This repository has been archived by the owner on May 14, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 9
/
test匯出漢語音節fst單元試驗.py
214 lines (189 loc) · 7.13 KB
/
test匯出漢語音節fst單元試驗.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
from os.path import join
from tempfile import TemporaryDirectory
from unittest.mock import patch
from django.core.management import call_command
from django.test.testcases import TestCase
from 臺灣言語服務.Kaldi語料處理 import Kaldi語料處理
from 臺灣言語工具.音標系統.閩南語.臺灣閩南語羅馬字拼音 import 臺灣閩南語羅馬字拼音
from 臺灣言語服務.kaldi.lexicon import 辭典輸出
class 匯出漢語音節fst單元試驗(TestCase):
def test_揣出漢語音節(self):
音節 = Kaldi語料處理.揣出漢語音節種類(
辭典輸出(臺灣閩南語羅馬字拼音, '拆做音素'),
['敢-若|kan2-na2 散-步|san3-poo7 咧|leh4']
)
self.assertEqual(
音節,
{'kan2', 'na2', 'san3', 'poo7', 'leh4'}
)
def test_揣出有音檔名嘛無要緊(self):
音節 = Kaldi語料處理.揣出漢語音節種類(
辭典輸出(臺灣閩南語羅馬字拼音, '拆做音素'),
[
'tong0000000-0000000無註明-ku0000000 '
'敢-若|kan2-na2 散-步|san3-poo7 咧|leh4'
]
)
self.assertEqual(
音節,
{'kan2', 'na2', 'san3', 'poo7', 'leh4'}
)
def test_無法度解析的免插(self):
音節 = Kaldi語料處理.揣出漢語音節種類(
辭典輸出(臺灣閩南語羅馬字拼音, '拆做音素'),
['敢-若|kan2-na2 散-步|san3-poo7 咧|咧 !|!']
)
self.assertEqual(
音節,
{'kan2', 'na2', 'san3', 'poo7'}
)
def test_轉fst(self):
fst = Kaldi語料處理.轉fst格式(
辭典輸出(臺灣閩南語羅馬字拼音, '拆做音素'),
{'kan2', 'na2', 'san3', 'poo7', 'leh4'}
)
self.assertEqual(
fst,
[
'0\t0\tkan\tkan',
'0\t0\tleh\tleh',
'0\t0\tna\tna',
'0\t0\tpoo\tpoo',
'0\t0\tsan\tsan',
'0\t1',
]
)
def test_fst仝調一條路就好(self):
fst = Kaldi語料處理.轉fst格式(
辭典輸出(臺灣閩南語羅馬字拼音, '拆做音素'),
{'sui1', 'sui2', 'sui3'}
)
self.assertEqual(
fst,
[
'0\t0\tsui\tsui',
'0\t1',
]
)
def test_轉辭典檔(self):
fst = Kaldi語料處理.轉辭典檔(
辭典輸出(臺灣閩南語羅馬字拼音, '拆做音素'),
{'kan2', 'na2', 'san3', 'poo7', 'leh4'}
)
self.assertEqual(
fst,
[
'kan\tk- a2 n2',
'leh\tl- e4 ʔ4',
'na\tn- a2',
'poo\tp- o7',
'san\ts- a3 n3'
]
)
def test_仝音攏出現(self):
fst = Kaldi語料處理.轉辭典檔(
辭典輸出(臺灣閩南語羅馬字拼音, '拆做音素'),
{'sui1', 'sui2', 'sui3'}
)
self.assertEqual(
fst,
[
'sui\ts- u1 i1',
'sui\ts- u2 i2',
'sui\ts- u3 i3',
]
)
def test_輕聲佮原本音攏仝款(self):
fst = Kaldi語料處理.轉辭典檔(
辭典輸出(臺灣閩南語羅馬字拼音, '拆做音素'),
{'khiau2', '0sui2', 'sui1', 'sui2', 'sui3'}
)
self.assertEqual(
fst,
[
'khiau\tkʰ- i2 a2 u2',
'sui\ts- u0 i0',
'sui\ts- u1 i1',
'sui\ts- u2 i2',
'sui\ts- u3 i3',
]
)
def test_外來詞佮原本音攏仝款(self):
fst = Kaldi語料處理.轉辭典檔(
辭典輸出(臺灣閩南語羅馬字拼音, '拆做音素'),
{'khiau2', '1sui2', 'sui1', 'sui2', 'sui3'}
)
self.assertEqual(
fst,
[
'khiau\tkʰ- i2 a2 u2',
'sui\ts- u1 i1',
'sui\ts- u2 i2',
'sui\ts- u3 i3',
]
)
def test_單元音(self):
fst = Kaldi語料處理.轉辭典檔(
辭典輸出(臺灣閩南語羅馬字拼音, '拆做音素'),
{'i1'}
)
self.assertEqual(
fst,
[
'i\tʔ- i1',
]
)
@patch('臺灣言語服務.Kaldi語料處理.Kaldi語料處理.揣出漢語音節種類')
def test_指令有讀(self, 揣出漢語音節種類mock):
揣出漢語音節種類mock.return_value = {'kan2', 'na2', 'san3', 'poo7', 'leh4'}
with TemporaryDirectory() as 資料夾路徑:
語言文本 = join(資料夾路徑, '語言文本.txt')
with open(語言文本, 'w') as 檔案:
print('敢-若|kan2-na2 散-步|san3-poo7 咧|leh4', file=檔案)
call_command('轉Kaldi音節fst', '台語', '拆做音素', 語言文本, 資料夾路徑)
self.assertEqual(揣出漢語音節種類mock.call_count, 1)
@patch('臺灣言語服務.Kaldi語料處理.Kaldi語料處理.轉fst格式')
def test_指令有輸出fst(self, 轉fst格式mock):
轉fst格式mock.return_value = [
'0 0 leh leh',
'0 0 kan kan',
'0 0 na na',
'0 0 poo poo',
'0 0 san san',
'0 1',
]
with TemporaryDirectory() as 資料夾路徑:
語言文本 = join(資料夾路徑, '語言文本.txt')
with open(語言文本, 'w') as 檔案:
print('敢-若|kan2-na2 散-步|san3-poo7 咧|leh4', file=檔案)
call_command('轉Kaldi音節fst', '台語', '拆做音素', 語言文本, 資料夾路徑)
self.比較檔案(
join(資料夾路徑, 'data', 'local', 'free-syllable', 'uniform.fst'),
[
'0 0 leh leh',
'0 0 kan kan',
'0 0 na na',
'0 0 poo poo',
'0 0 san san',
'0 1',
]
)
@patch('臺灣言語服務.Kaldi語料處理.Kaldi語料處理.轉辭典檔')
def test_指令有輸出辭典檔(self, 轉辭典檔mock):
轉辭典檔mock.return_value = [
'sui2 s- u2 i2',
]
with TemporaryDirectory() as 資料夾路徑:
語言文本 = join(資料夾路徑, '語言文本.txt')
with open(語言文本, 'w') as 檔案:
print('敢-若|kan2-na2 散-步|san3-poo7 咧|leh4', file=檔案)
call_command('轉Kaldi音節fst', '台語', '拆做音素', 語言文本, 資料夾路徑)
self.比較檔案(
join(資料夾路徑, 'data', 'local', 'free-syllable', 'lexicon.txt'),
[
'sui2 s- u2 i2',
]
)
def 比較檔案(self, 檔名, 資料):
with open(檔名) as 檔案:
self.assertEqual(檔案.read(), '\n'.join(資料) + '\n')