diff --git a/.gitignore b/.gitignore index 16f55992..8bb27809 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,4 @@ __pycache__/ /.coverage /.project /.pydevproject +/tai5_uan5_gian5_gi2_kang1_ku7.egg-info/ diff --git "a/\350\207\272\347\201\243\350\250\200\350\252\236\345\267\245\345\205\267/\346\255\243\350\246\217/\351\230\277\346\213\211\344\274\257\346\225\270\345\255\227.py" "b/\350\207\272\347\201\243\350\250\200\350\252\236\345\267\245\345\205\267/\350\252\236\351\237\263\350\276\250\350\255\230/\346\225\270\345\255\227.py" similarity index 89% rename from "\350\207\272\347\201\243\350\250\200\350\252\236\345\267\245\345\205\267/\346\255\243\350\246\217/\351\230\277\346\213\211\344\274\257\346\225\270\345\255\227.py" rename to "\350\207\272\347\201\243\350\250\200\350\252\236\345\267\245\345\205\267/\350\252\236\351\237\263\350\276\250\350\255\230/\346\225\270\345\255\227.py" index c15df85c..c7691e52 100644 --- "a/\350\207\272\347\201\243\350\250\200\350\252\236\345\267\245\345\205\267/\346\255\243\350\246\217/\351\230\277\346\213\211\344\274\257\346\225\270\345\255\227.py" +++ "b/\350\207\272\347\201\243\350\250\200\350\252\236\345\267\245\345\205\267/\350\252\236\351\237\263\350\276\250\350\255\230/\346\225\270\345\255\227.py" @@ -3,10 +3,6 @@ class 阿拉伯數字(): - 一二三 = '一二三四五六七八九' - 兩 = '兩' - 細位 = ['', '十', '百', '千', ] - 大位 = ['', '萬', '億', '兆', ] def 是數字無(self, 數字): return 數字.isdigit() @@ -35,43 +31,6 @@ def 轉號碼(self, 空, 數字): 漢字.append(空一二三[int(數)]) return ''.join(漢字) - def 轉數量(self, 空, 數字): - if not self.是數量無(數字): - return 數字 - 空一二三 = 空 + self.一二三 - 漢字 = [] - 頭前有空號無 = False - 大位有數字無 = False - for 所在 in range(len(數字)): - 數值 = int(數字[所在]) - 數細位 = (len(數字) - 所在 - 1) % 4 - 數大位 = (len(數字) - 所在 - 1) // 4 - if 數值 == 0: - 頭前有空號無 = True - else: - 大位有數字無 = True - if 頭前有空號無: - 漢字.append(空一二三[0]) - 頭前有空號無 = False - if 數值 == 2: - if 數細位 == 1 or (所在 != 0 and 數細位 == 0): # 二十佮兩億零二萬 - 漢字.append(空一二三[2]) -# elif 數細位==0 and 數大位==0:#二 -# 漢字.append(空一二三[2]) - else: - 漢字.append(self.兩) - else: - 漢字.append(空一二三[數值]) - 漢字.append(self.細位[數細位]) - if 數細位 == 0 and 大位有數字無: - 漢字.append(self.大位[數大位]) - 頭前有空號無 = False - 大位有數字無 = False - 結果 = ''.join(漢字) - if 結果.startswith('一十'): - return 結果[1:] - return 結果 - def 轉閩南語數量無(self, 數量): return self.轉閩南語數量(數量) != 數量 @@ -124,3 +83,46 @@ def 轉官話數量(self, 數量): return 數量[:-2] + self.一二三[1] return 數量[:-1] return 數量 + + +class 台語數字(): + 一二三 = '一二三四五六七八九' + 兩 = '兩' + 細位 = ['', '十', '百', '千', ] + 大位 = ['', '萬', '億', '兆', ] + + def 轉數量(self, 數字): + 空一二三 = '空' + self.一二三 + 漢字 = [] + 頭前有空號無 = False + 大位有數字無 = False + 數字字串 = str(數字) + for 所在 in range(len(數字字串)): + 數值 = int(數字字串[所在]) + 數細位 = (len(數字字串) - 所在 - 1) % 4 + 數大位 = (len(數字字串) - 所在 - 1) // 4 + if 數值 == 0: + 頭前有空號無 = True + else: + 大位有數字無 = True + if 頭前有空號無: + 漢字.append(空一二三[0]) + 頭前有空號無 = False + if 數值 == 2: + if 數細位 == 1 or (所在 != 0 and 數細位 == 0): # 二十佮兩億零二萬 + 漢字.append(空一二三[2]) +# elif 數細位==0 and 數大位==0:#二 +# 漢字.append(空一二三[2]) + else: + 漢字.append(self.兩) + else: + 漢字.append(空一二三[數值]) + 漢字.append(self.細位[數細位]) + if 數細位 == 0 and 大位有數字無: + 漢字.append(self.大位[數大位]) + 頭前有空號無 = False + 大位有數字無 = False + 結果 = ''.join(漢字) + if 結果.startswith('一十'): + return 結果[1:] + return 結果 diff --git "a/\350\251\246\351\251\227/\346\255\243\350\246\217/Test\351\230\277\346\213\211\344\274\257\346\225\270\345\255\227\345\226\256\345\205\203\350\251\246\351\251\227.py" "b/\350\251\246\351\251\227/\346\255\243\350\246\217/Test\351\230\277\346\213\211\344\274\257\346\225\270\345\255\227\345\226\256\345\205\203\350\251\246\351\251\227.py" deleted file mode 100644 index 726d1d9b..00000000 --- "a/\350\251\246\351\251\227/\346\255\243\350\246\217/Test\351\230\277\346\213\211\344\274\257\346\225\270\345\255\227\345\226\256\345\205\203\350\251\246\351\251\227.py" +++ /dev/null @@ -1,241 +0,0 @@ -# -*- coding: utf-8 -*- -from unittest.case import TestCase -from 臺灣言語工具.正規.阿拉伯數字 import 阿拉伯數字 - - -class 阿拉伯數字單元試驗(TestCase): - def setUp(self): - self.數字 = 阿拉伯數字() - pass - - def tearDown(self): - pass - - def test_判斷是數字無(self): - self.assertEqual(self.數字.是數字無(''), False) - self.assertEqual(self.數字.是數字無('0'), True) - self.assertEqual(self.數字.是數字無('12312'), True) - self.assertEqual(self.數字.是數字無('1332312'), True) - self.assertEqual(self.數字.是數字無('6'), True) - self.assertEqual(self.數字.是數字無('01332312三'), False) - self.assertEqual(self.數字.是數字無('0013327890'), True) - self.assertEqual(self.數字.是數字無('000'), True) - # 小數本來就會使拆開唸,予別的模組合起來 - self.assertEqual(self.數字.是數字無('00.30'), False) - self.assertEqual(self.數字.是數字無('197.080'), False) - self.assertEqual(self.數字.是數字無('197.08.0'), False) - - def test_轉號碼(self): - 問答 = [ - ('2', '二'), - ('10', '一空'), - ('23', '二三'), - ('15', '一五'), - ('120', '一二空'), - ('230', '二三空'), - ('602', '六空二'), - ('1001', '一空空一'), - ('1020', '一空二空'), - ('1300', '一三空空'), - ('4512', '四五一二'), - ('5004', '五空空四'), - ('6070', '六空七空'), - ('9800', '九八空空'), # 九千八百 - ('10800', '一空八空空'), - ('400000800', '四空空空空空八空空'), - ('1230567890980654', '一二三空五六七八九空九八空六五四'), - ('1300130013', '一三空空一三空空一三'), - ('2000000022222', '二空空空空空空空二二二二二'), - ('10000000000000000', '一空空空空空空空空空空空空空空空空'), - ('0830', '空八三空'), - ] - for 問, 答 in 問答: - if 答 is None: - self.assertEqual(self.數字.是號碼無(問), False) - self.assertEqual(self.數字.轉號碼('空', 問), 問) - else: - self.assertEqual(self.數字.是號碼無(問), True) - self.assertEqual(self.數字.轉號碼('空', 問), 答) - self.assertEqual(self.數字.轉號碼('零', 問), - 答.replace('空', '零')) - - def test_轉數量(self): - 問答 = [ - ('2', '兩'), - ('10', '十'), - ('23', '二十三'), - ('15', '十五'), - ('120', '一百二十'), # 百二 一百二 - ('230', '兩百三十'), # 兩百三 - ('602', '六百空二'), - ('1001', '一千空一'), - ('1020', '一千空二十'), - ('1200', '一千兩百'), - ('1300', '一千三百'), # 千三 一千三 - ('4512', '四千五百一十二'), - ('5004', '五千空四'), - ('6070', '六千空七十'), - ('9800', '九千八百'), # 九千八 - ('10800', '一萬空八百'), - ('400000800', '四億空八百'), - ('1230567890980654', '一千兩百三十兆五千六百七十八億九千空九十八萬空六百五十四'), - ('1300130013', '十三億空一十三萬空一十三'), - ('2000000022222', '兩兆空二萬兩千兩百二十二'), - ('2000000000000', '兩兆'), - ('7900000000', '七十九億'), - ('10000000000000000', None), - ('0830', None), - ] - self.檢查數量(問答) - - def test_轉兩佮二的數量(self): - 問答 = [ - ('12', '十二'), - ('120', '一百二十'), - ('3200', '三千兩百'), - ('42000', '四萬兩千'), - ('920000', '九十二萬'), - ('1200000', '一百二十萬'), - ('12000000', '一千兩百萬'), - ('32000000', '三千兩百萬'), - ('200000000', '兩億'), - ('820000000', '八億兩千萬'), - ] - self.檢查數量(問答) - - def test_轉閩南語數量省一佮單位(self): - 問答 = [ - ('兩百三十', '兩百三'), - ('六百空二', None), - ('一千空一', None), - ('一千空一十', '一千空十'), - ('一千空二十', None), - ('一千一百一十', '一千一百一'), - ('一千兩百', '千二'), - ('一千三百', '千三'), - ('一千三百一十三', '一千三百十三'), - ('四千五百一十二', '四千五百十二'), - ('五千空四', None), - ('六千空七十', None), - ('九千八百', '九千八'), - ('十三萬空一十三', '十三萬空十三'), - ('一兆空一十六萬七千', '一兆空十六萬七'), - ('七十九億', None), - ] - self.檢查閩南語數量(問答) - - def test_轉閩南語兩佮二數量(self): - 問答 = [ - ('十二', None), - ('一百二十', '百二'), - ('一千兩百', '千二'), - ('三千兩百', '三千二'), - ('四萬兩千', '四萬二'), - ('九十二萬', None), - ('八億兩千萬', None), - ('一百二十萬', '百二萬'), - ('一千兩百萬', '千二萬'), - ('三千兩百萬', None), - ('兩億', None), - ('一千兩百億', '千二億'), - ('三千兩百億', None), - ] - self.檢查閩南語數量(問答) - - def test_轉客家話數量省單位(self): - 問答 = [ - ('一百二十', '百二'), - ('兩百三十', '兩百三'), - ('六百零二', None), - ('一千零一', None), - ('一千零一十', None), - ('一千零二十', None), - ('一千一百一十', '一千一百一'), - ('一千兩百', '千二'), - ('一千三百', '千三'), - ('一千三百一十三', None), - ('四千五百一十二', None), - ('五千零四', None), - ('六千零七十', None), - ('九千八百', '九千八'), - ('十三億零一十三萬零一十三', None), - ('一兆零一十六萬七千', '一兆零一十六萬七'), - ('七十九億', None), - ] - self.檢查客家話數量(問答) - - def test_轉官話數量省上尾單位(self): - 問答 = [ - ('一百二十', '一百二'), - ('兩百三十', '兩百三'), - ('六百零二', None), - ('一千零一', None), - ('一千零一十', None), - ('一千零二十', None), - ('一千一百一十', '一千一百一'), - ('一千兩百', '一千二'), - ('一千三百', '一千三'), - ('一千三百一十三', None), - ('四千五百一十二', None), - ('五千零四', None), - ('六千零七十', None), - ('九千八百', '九千八'), - ('十三億零一十三萬零一十三', None), - ('一兆零一十六萬七千', '一兆零一十六萬七'), - ('七十九億', None), - ] - self.檢查官話數量(問答) - - def test_轉官話兩佮二數量(self): - 問答 = [ - ('十二', None), - ('一百二十', '一百二'), - ('一千兩百', '一千二'), - ('三千兩百', '三千二'), - ('四萬兩千', '四萬二'), - ('九十二萬', None), - ('八億兩千萬', None), - ('一百二十萬', None), - ('一千兩百萬', None), - ('三千兩百萬', None), - ('兩億', None), - ] - self.檢查官話數量(問答) - - def 檢查數量(self, 問答): - for 問, 答 in 問答: - if 答 is None: - self.assertEqual(self.數字.是數量無(問), False, 問) - self.assertEqual(self.數字.轉數量('空', 問), 問) - else: - self.assertEqual(self.數字.是數量無(問), True) - self.assertEqual(self.數字.轉數量('空', 問), 答, 問) - self.assertEqual(self.數字.轉數量('零', 問), - 答.replace('空', '零'), 問) - - def 檢查閩南語數量(self, 問答): - for 問, 答 in 問答: - if 答 is None: - self.assertEqual(self.數字.轉閩南語數量無(問), False, 問) - self.assertEqual(self.數字.轉閩南語數量(問), 問) - else: - self.assertEqual(self.數字.轉閩南語數量無(問), True, 問) - self.assertEqual(self.數字.轉閩南語數量(問), 答, 問) - - def 檢查客家話數量(self, 問答): - for 問, 答 in 問答: - if 答 is None: - self.assertEqual(self.數字.轉客家話數量無(問), False, 問) - self.assertEqual(self.數字.轉客家話數量(問), 問) - else: - self.assertEqual(self.數字.轉客家話數量無(問), True, 問) - self.assertEqual(self.數字.轉客家話數量(問), 答, 問) - - def 檢查官話數量(self, 問答): - for 問, 答 in 問答: - if 答 is None: - self.assertEqual(self.數字.轉官話數量無(問), False, 問) - self.assertEqual(self.數字.轉官話數量(問), 問) - else: - self.assertEqual(self.數字.轉官話數量無(問), True, 問) - self.assertEqual(self.數字.轉官話數量(問), 答, 問) diff --git "a/\350\251\246\351\251\227/\346\255\243\350\246\217/__init__.py" "b/\350\251\246\351\251\227/\346\255\243\350\246\217/__init__.py" deleted file mode 100644 index e69de29b..00000000 diff --git "a/\350\251\246\351\251\227/\350\252\236\351\237\263\350\276\250\350\255\230/\346\225\270\345\255\227/Test\346\225\270\351\207\217\345\226\256\345\205\203\350\251\246\351\251\227.py" "b/\350\251\246\351\251\227/\350\252\236\351\237\263\350\276\250\350\255\230/\346\225\270\345\255\227/Test\346\225\270\351\207\217\345\226\256\345\205\203\350\251\246\351\251\227.py" new file mode 100644 index 00000000..9f08eae4 --- /dev/null +++ "b/\350\251\246\351\251\227/\350\252\236\351\237\263\350\276\250\350\255\230/\346\225\270\345\255\227/Test\346\225\270\351\207\217\345\226\256\345\205\203\350\251\246\351\251\227.py" @@ -0,0 +1,191 @@ +# -*- coding: utf-8 -*- +from unittest.case import TestCase, skip +from 臺灣言語工具.語音辨識.數字 import 台語數字 +from 臺灣言語工具.語音辨識.數字 import 阿拉伯數字 + + +class 數量單元試驗(TestCase): + def tearDown(self): + self.assertEqual(台語數字().轉數量(self.題目), self.答案) + + def test_10(self): + self.題目 = 10 + self.答案 = '十' + + def test_15(self): + self.題目 = 15 + self.答案 = '十五' + + @skip + def test_單位詞kah數量(self): + self.題目 = 180 + self.答案 = '百八' + + @skip + def test_數量kah單位詞kah數量(self): + self.題目 = 2300 + self.答案 = '兩千三' + + def test_一萬以下無0(self): + self.題目 = 4512 + self.答案 = '四千五百一十二' + + def test_百空(self): + self.題目 = 602 + self.答案 = '六百空二' + + def test_千空(self): + self.題目 = 6078 + self.答案 = '六千空七十八' + + def test_萬空(self): + self.題目 = 6078 + self.答案 = '一萬空九百' + + def test_空十幾(self): + self.題目 = 1300130013 + self.答案 = '十三億空一十三萬空一十三' + + def test_大數字(self): + self.題目 = 1230567890980654 + self.答案 = '一千兩百三十兆五千六百七十八億九千空九十八萬空六百五十四' + + def test_2ê(self): + self.題目 = 2 + self.答案 = '兩' + + def test_20ê(self): + self.題目 = 20 + self.答案 = '二十' + + def test_空二(self): + self.題目 = 102 + self.答案 = '一百空二' + + def test_二單位(self): + self.題目 = 2200000000 + self.答案 = '二十二億' + + def test_大單位(self): + self.題目 = 2000000000000 + self.答案 = '兩兆' + + def test_siunn大(self): + self.題目 = 10000000000000000 + self.答案 = None + + def test_x01x(self): + self.題目 = 1010 + self.答案 = '一千空十' + + def test_x11x(self): + self.題目 = 1110 + self.答案 = '一千一百十' + + def test_xx1x(self): + self.題目 = 1310 + self.答案 = '一千三百十' + + +class 阿拉伯數字單元試驗(): + def setUp(self): + self.數字 = 阿拉伯數字() + pass + + def test_轉客家話數量省單位(self): + 問答 = [ + ('一百二十', '百二'), + ('兩百三十', '兩百三'), + ('六百零二', None), + ('一千零一', None), + ('一千零一十', None), + ('一千零二十', None), + ('一千一百一十', '一千一百一'), + ('一千兩百', '千二'), + ('一千三百', '千三'), + ('一千三百一十三', None), + ('四千五百一十二', None), + ('五千零四', None), + ('六千零七十', None), + ('九千八百', '九千八'), + ('十三億零一十三萬零一十三', None), + ('一兆零一十六萬七千', '一兆零一十六萬七'), + ('七十九億', None), + ] + self.檢查客家話數量(問答) + + def test_轉官話數量省上尾單位(self): + 問答 = [ + ('一百二十', '一百二'), + ('兩百三十', '兩百三'), + ('六百零二', None), + ('一千零一', None), + ('一千零一十', None), + ('一千零二十', None), + ('一千一百一十', '一千一百一'), + ('一千兩百', '一千二'), + ('一千三百', '一千三'), + ('一千三百一十三', None), + ('四千五百一十二', None), + ('五千零四', None), + ('六千零七十', None), + ('九千八百', '九千八'), + ('十三億零一十三萬零一十三', None), + ('一兆零一十六萬七千', '一兆零一十六萬七'), + ('七十九億', None), + ] + self.檢查官話數量(問答) + + def test_轉官話兩佮二數量(self): + 問答 = [ + ('十二', None), + ('一百二十', '一百二'), + ('一千兩百', '一千二'), + ('三千兩百', '三千二'), + ('四萬兩千', '四萬二'), + ('九十二萬', None), + ('八億兩千萬', None), + ('一百二十萬', None), + ('一千兩百萬', None), + ('三千兩百萬', None), + ('兩億', None), + ] + self.檢查官話數量(問答) + + def 檢查數量(self, 問答): + for 問, 答 in 問答: + if 答 is None: + self.assertEqual(self.數字.是數量無(問), False, 問) + self.assertEqual(self.數字.轉數量('空', 問), 問) + else: + self.assertEqual(self.數字.是數量無(問), True) + self.assertEqual(self.數字.轉數量('空', 問), 答, 問) + self.assertEqual(self.數字.轉數量('零', 問), + 答.replace('空', '零'), 問) + + def 檢查閩南語數量(self, 問答): + for 問, 答 in 問答: + if 答 is None: + self.assertEqual(self.數字.轉閩南語數量無(問), False, 問) + self.assertEqual(self.數字.轉閩南語數量(問), 問) + else: + self.assertEqual(self.數字.轉閩南語數量無(問), True, 問) + self.assertEqual(self.數字.轉閩南語數量(問), 答, 問) + + def 檢查客家話數量(self, 問答): + for 問, 答 in 問答: + if 答 is None: + self.assertEqual(self.數字.轉客家話數量無(問), False, 問) + self.assertEqual(self.數字.轉客家話數量(問), 問) + else: + self.assertEqual(self.數字.轉客家話數量無(問), True, 問) + self.assertEqual(self.數字.轉客家話數量(問), 答, 問) + + def 檢查官話數量(self, 問答): + for 問, 答 in 問答: + if 答 is None: + self.assertEqual(self.數字.轉官話數量無(問), False, 問) + self.assertEqual(self.數字.轉官話數量(問), 問) + else: + self.assertEqual(self.數字.轉官話數量無(問), True, 問) + self.assertEqual(self.數字.轉官話數量(問), 答, 問) diff --git "a/\350\251\246\351\251\227/\350\252\236\351\237\263\350\276\250\350\255\230/\346\225\270\345\255\227/Test\350\231\237\347\242\274\345\226\256\345\205\203\350\251\246\351\251\227.py" "b/\350\251\246\351\251\227/\350\252\236\351\237\263\350\276\250\350\255\230/\346\225\270\345\255\227/Test\350\231\237\347\242\274\345\226\256\345\205\203\350\251\246\351\251\227.py" new file mode 100644 index 00000000..909e52ac --- /dev/null +++ "b/\350\251\246\351\251\227/\350\252\236\351\237\263\350\276\250\350\255\230/\346\225\270\345\255\227/Test\350\231\237\347\242\274\345\226\256\345\205\203\350\251\246\351\251\227.py" @@ -0,0 +1,47 @@ +# -*- coding: utf-8 -*- +from unittest.case import TestCase +from 臺灣言語工具.正規.阿拉伯數字 import 阿拉伯數字 + + +class 阿拉伯數字單元試驗(TestCase): + def setUp(self): + self.數字 = 阿拉伯數字() + pass + + def tearDown(self): + pass + + + def test_轉號碼(self): + 問答 = [ + ('2', '二'), + ('10', '一空'), + ('23', '二三'), + ('15', '一五'), + ('120', '一二空'), + ('230', '二三空'), + ('602', '六空二'), + ('1001', '一空空一'), + ('1020', '一空二空'), + ('1300', '一三空空'), + ('4512', '四五一二'), + ('5004', '五空空四'), + ('6070', '六空七空'), + ('9800', '九八空空'), # 九千八百 + ('10800', '一空八空空'), + ('400000800', '四空空空空空八空空'), + ('1230567890980654', '一二三空五六七八九空九八空六五四'), + ('1300130013', '一三空空一三空空一三'), + ('2000000022222', '二空空空空空空空二二二二二'), + ('10000000000000000', '一空空空空空空空空空空空空空空空空'), + ('0830', '空八三空'), + ] + for 問, 答 in 問答: + if 答 is None: + self.assertEqual(self.數字.是號碼無(問), False) + self.assertEqual(self.數字.轉號碼('空', 問), 問) + else: + self.assertEqual(self.數字.是號碼無(問), True) + self.assertEqual(self.數字.轉號碼('空', 問), 答) + self.assertEqual(self.數字.轉號碼('零', 問), + 答.replace('空', '零')) diff --git "a/\350\207\272\347\201\243\350\250\200\350\252\236\345\267\245\345\205\267/\346\255\243\350\246\217/__init__.py" "b/\350\251\246\351\251\227/\350\252\236\351\237\263\350\276\250\350\255\230/\346\225\270\345\255\227/__init__.py" similarity index 100% rename from "\350\207\272\347\201\243\350\250\200\350\252\236\345\267\245\345\205\267/\346\255\243\350\246\217/__init__.py" rename to "\350\251\246\351\251\227/\350\252\236\351\237\263\350\276\250\350\255\230/\346\225\270\345\255\227/__init__.py"