diff --git a/.travis.yml b/.travis.yml index 3e6c162..9f7cbf7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,8 +13,9 @@ env: - TOX_ENV=教典詞條例句 - TOX_ENV=TGB - TOX_ENV=詞彙分級 -- TOX_ENV=教育部臺灣閩南語字詞頻調查工作 - TOX_ENV=itaigi +- TOX_ENV=台語文語料庫蒐集及語料庫為本台語書面語音節詞頻統計 +- TOX_ENV=教育部臺灣閩南語字詞頻調查工作 - TOX_ENV=台灣白話基礎語句 addons: apt: diff --git a/README.md b/README.md index aa8d96d..fcf039d 100644 --- a/README.md +++ b/README.md @@ -49,6 +49,14 @@ python manage.py icorpus臺華平行新聞語料庫 python manage.py 詞彙分級 ``` +### [台語文語料庫蒐集及語料庫為本台語書面語音節詞頻統計](http://ip194097.ntcu.edu.tw/giankiu/keoe/KKH/guliau-supin/guliau-supin.asp) +- 形式:漢羅抑是全羅 +- 段數:193071段, 其中漢羅128505段、全羅64566段(2018/07/24) +- 語料:[Github](https://github.com/Taiwanese-Corpus/Ungian_2005_guliau-supin) +``` +python manage.py 教育部臺灣閩南語字詞頻調查工作 +``` + ### [教育部臺灣閩南語字詞頻調查工作](http://ip194097.ntcu.edu.tw/Ungian/Chokphin/Lunbun/KIPsupin/KIPsupin.asp) - 形式:漢羅、全羅 - 段數:59300段,其中53593段對會齊(2018/07/24) @@ -136,16 +144,6 @@ python manage.py 匯入資料 https://Taiwanese-Corpus.github.io/icorpus_ka1_han python manage.py 匯入資料 https://Taiwanese-Corpus.github.io/Linya-Huang_2014_taiwanesecharacters/咱的字你敢捌.yaml ``` -### [台語文語料庫蒐集及語料庫為本台語書面語音節詞頻統計](https://github.com/Taiwanese-Corpus/Ungian_2005_guliau-supin) - * 純文字→臺灣言語工具分詞 - * 201466筆文本資料 - * `https://taiwanese-corpus.github.io/Ungian_2005_guliau-supin/台語文語料庫蒐集及語料庫為本台語書面語音節詞頻統計.yaml` - -### [教育部臺灣閩南語字詞頻調查工作](https://github.com/Taiwanese-Corpus/Ungian_2009_KIPsupin) - * 允言整理過的doc→json→臺灣言語資料庫yaml - * 全漢全羅 - * 59558筆文本資料 - * `https://taiwanese-corpus.github.io/Ungian_2009_KIPsupin/教育部臺灣閩南語字詞頻調查工作.yaml` ### [臺語國校仔課本](https://github.com/Taiwanese-Corpus/kok4hau7-kho3pun2) * 允言整理過的doc→json→臺灣言語資料庫yaml diff --git a/tox.ini b/tox.ini index 1f0ac77..325993d 100644 --- a/tox.ini +++ b/tox.ini @@ -62,17 +62,23 @@ deps = commands= coverage run --source=匯入 manage.py test 試驗.test詞彙分級 +[testenv:itaigi] +deps = + coverage +commands= + coverage run --source=匯入 manage.py test 試驗.testItaigi + [testenv:教育部臺灣閩南語字詞頻調查工作] deps = coverage commands= coverage run --source=匯入 manage.py test 試驗.test教育部臺灣閩南語字詞頻調查工作 -[testenv:itaigi] +[testenv:台語文語料庫蒐集及語料庫為本台語書面語音節詞頻統計] deps = coverage commands= - coverage run --source=匯入 manage.py test 試驗.testItaigi + coverage run --source=匯入 manage.py test 試驗.test台語文語料庫蒐集及語料庫為本台語書面語音節詞頻統計 [testenv:台灣白話基礎語句] deps = diff --git "a/\345\214\257\345\205\245/management/commands/\345\217\260\350\252\236\346\226\207\350\252\236\346\226\231\345\272\253\350\222\220\351\233\206\345\217\212\350\252\236\346\226\231\345\272\253\347\202\272\346\234\254\345\217\260\350\252\236\346\233\270\351\235\242\350\252\236\351\237\263\347\257\200\350\251\236\351\240\273\347\265\261\350\250\210.py" "b/\345\214\257\345\205\245/management/commands/\345\217\260\350\252\236\346\226\207\350\252\236\346\226\231\345\272\253\350\222\220\351\233\206\345\217\212\350\252\236\346\226\231\345\272\253\347\202\272\346\234\254\345\217\260\350\252\236\346\233\270\351\235\242\350\252\236\351\237\263\347\257\200\350\251\236\351\240\273\347\265\261\350\250\210.py" new file mode 100644 index 0000000..59c86ce --- /dev/null +++ "b/\345\214\257\345\205\245/management/commands/\345\217\260\350\252\236\346\226\207\350\252\236\346\226\231\345\272\253\350\222\220\351\233\206\345\217\212\350\252\236\346\226\231\345\272\253\347\202\272\346\234\254\345\217\260\350\252\236\346\233\270\351\235\242\350\252\236\351\237\263\347\257\200\350\251\236\351\240\273\347\265\261\350\250\210.py" @@ -0,0 +1,111 @@ +from csv import DictReader +import io +from os import walk +from os.path import join, basename, dirname +from tempfile import TemporaryDirectory +from urllib.request import urlopen +from zipfile import ZipFile + + +from 臺灣言語工具.解析整理.拆文分析器 import 拆文分析器 +from 臺灣言語服務.models import 訓練過渡格式 +from 匯入.指令 import 匯入枋模 +from 臺灣言語工具.解析整理.解析錯誤 import 解析錯誤 + + +class Command(匯入枋模): + help = 'http://ip194097.ntcu.edu.tw/giankiu/keoe/KKH/guliau-supin/guliau-supin.asp' + zip網址 = 'https://github.com/Taiwanese-Corpus/Ungian_2005_guliau-supin/archive/master.zip' + + 來源 = '台語文語料庫蒐集及語料庫為本台語書面語音節詞頻統計' + 公家內容 = { + '年代': '2005', + '種類': '語句', + } + 欄位表 = { + 'luipiat': '類別', + 'chokchia': '作者', + 'piautoe': '標題', + 'tongmia': '檔名', + 'nitai': '年代', + 'lamlu': '男女', + } + 性別表 = {'b': '查某', 'p': '查甫', 'm': '毋知'} + + def add_arguments(self, parser): + parser.add_argument( + '--錯誤印部份就好', + action='store_true', + help='因為CI有限制輸出4M', + ) + + def 全部資料(self, *args, **參數): + self.錯誤全印 = not 參數['錯誤印部份就好'] + + 匯入數量 = 0 + for 資料 in self._全部資料(): + yield 訓練過渡格式( + **資料, + **self.公家內容 + ) + + 匯入數量 += 1 + if 匯入數量 % 1000 == 0: + self.stdout.write('匯入 {} 筆'.format(匯入數量)) + + def _全部資料(self): + with TemporaryDirectory() as 資料夾: + with urlopen(self.zip網址) as 網路檔: + with io.BytesIO(網路檔.read()) as 檔: + with ZipFile(檔) as 資料: + 資料.extractall(資料夾) + 實際資料夾 = join(資料夾, 'Ungian_2005_guliau-supin-master/') + yield from self.轉規類(join(實際資料夾, '轉換後資料'), 'HL') + yield from self.轉規類(join(實際資料夾, '轉換後資料'), 'POJ') + + def 轉規類(self, 語料資料夾, 類): + 目錄 = {} + with open(join(語料資料夾, '{}.csv'.format(類))) as csvfile: + reader = DictReader(csvfile) + for row in reader: + 資料 = {} + for 欄位, 內容 in row.items(): + try: + 資料[self.欄位表[欄位]] = 內容 + except KeyError: + 'Ki-thann na-ui ing be tioh.' + 資料['男女'] = self.性別表[資料['男女']] + 檔名 = 資料.pop('檔名') + 目錄[檔名] = 資料 + for 所在, _資料夾, 檔名陣列 in walk(join(語料資料夾, 類)): + for 檔名 in 檔名陣列: + with open(join(所在, 檔名)) as 檔: + try: + 來源內容 = 目錄.pop(檔名[:-4]) + 作者 = 來源內容['作者'] + 類別 = 來源內容['類別'] + except KeyError: + 作者 = basename(所在) + 類別 = basename(dirname(所在)) + for 一逝 in 檔.readlines(): + 文本資料 = 一逝.strip() + if len(文本資料) > 0: + try: + 台文 = 拆文分析器.建立句物件(文本資料).看分詞() + except 解析錯誤 as 錯誤: + if self.錯誤全印: + self.stderr.write(錯誤) + else: + self.stderr.write(str(錯誤)[:40]) + else: + yield { + '來源': '{}-{}'.format( + self.來源, 類, 作者, 類別 + ), + '文本': 台文, + } + + if len(目錄) > 0: + self.stderr.write( + '表有物件無對著!!目錄賰:'.format(目錄.keys()), + ) diff --git "a/\345\214\257\345\205\245/\346\214\207\344\273\244.py" "b/\345\214\257\345\205\245/\346\214\207\344\273\244.py" index 27768c1..763f021 100644 --- "a/\345\214\257\345\205\245/\346\214\207\344\273\244.py" +++ "b/\345\214\257\345\205\245/\346\214\207\344\273\244.py" @@ -7,7 +7,6 @@ class 匯入枋模(BaseCommand): def handle(self, *args, **參數): self.stdout.write('資料數量:{}'.format(訓練過渡格式.資料數量())) - self.stdout.write('檢查格式了匯入') 訓練過渡格式.加一堆資料(self.全部資料(*args, **參數)) self.stdout.write('資料數量:{}'.format(訓練過渡格式.資料數量())) diff --git "a/\350\251\246\351\251\227/test\345\217\260\350\252\236\346\226\207\350\252\236\346\226\231\345\272\253\350\222\220\351\233\206\345\217\212\350\252\236\346\226\231\345\272\253\347\202\272\346\234\254\345\217\260\350\252\236\346\233\270\351\235\242\350\252\236\351\237\263\347\257\200\350\251\236\351\240\273\347\265\261\350\250\210.py" "b/\350\251\246\351\251\227/test\345\217\260\350\252\236\346\226\207\350\252\236\346\226\231\345\272\253\350\222\220\351\233\206\345\217\212\350\252\236\346\226\231\345\272\253\347\202\272\346\234\254\345\217\260\350\252\236\346\233\270\351\235\242\350\252\236\351\237\263\347\257\200\350\251\236\351\240\273\347\265\261\350\250\210.py" new file mode 100644 index 0000000..f6e1c8c --- /dev/null +++ "b/\350\251\246\351\251\227/test\345\217\260\350\252\236\346\226\207\350\252\236\346\226\231\345\272\253\350\222\220\351\233\206\345\217\212\350\252\236\346\226\231\345\272\253\347\202\272\346\234\254\345\217\260\350\252\236\346\233\270\351\235\242\350\252\236\351\237\263\347\257\200\350\251\236\351\240\273\347\265\261\350\250\210.py" @@ -0,0 +1,31 @@ +from django.core.management import call_command +from django.test.testcases import TestCase +from 臺灣言語服務.models import 訓練過渡格式 + + +class 台語文語料庫試驗(TestCase): + + @classmethod + def setUpClass(cls): + call_command( + '台語文語料庫蒐集及語料庫為本台語書面語音節詞頻統計', + '--錯誤印部份就好' + ) + return super().setUpClass() + + def test數量(self): + self.assertGreater(訓練過渡格式.資料數量(), 193000) + + def testPOJ來源(self): + self.assertTrue( + 訓練過渡格式.objects + .filter(來源='台語文語料庫蒐集及語料庫為本台語書面語音節詞頻統計-POJ') + .exists() + ) + + def testHL來源(self): + self.assertTrue( + 訓練過渡格式.objects + .filter(來源='台語文語料庫蒐集及語料庫為本台語書面語音節詞頻統計-HL') + .exists() + )