Skip to content

Commit 63ea8cc

Browse files
committed
feat: support "N个X" repeat digit pattern in Chinese ITN (#201)
In digit sequences (phone numbers, bank cards, etc.), expand spoken repeat patterns like 四个八 => 8888. Requires at least one normal digit before the repeat to avoid false positives (e.g. standalone 四个八 stays as 4个8). Supported range: 三个X to 九个X (3-9 repetitions). Examples: 幺三八五七四九四个八 => 13857498888 六二二五零八四个零幺二三四五六 => 6225080000123456
1 parent 91697e9 commit 63ea8cc

2 files changed

Lines changed: 329 additions & 0 deletions

File tree

Lines changed: 322 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,322 @@
1+
七个一 1111111
2+
七个七 7777777
3+
七个三 3333333
4+
七个两 2222222
5+
七个九 9999999
6+
七个二 2222222
7+
七个五 5555555
8+
七个伍 5555555
9+
七个八 8888888
10+
七个六 6666666
11+
七个叁 3333333
12+
七个四 4444444
13+
七个壹 1111111
14+
七个幺 1111111
15+
七个拐 7777777
16+
七个捌 8888888
17+
七个柒 7777777
18+
七个洞 0000000
19+
七个玖 9999999
20+
七个肆 4444444
21+
七个贰 2222222
22+
七个陆 6666666
23+
七个零 0000000
24+
三个一 111
25+
三个七 777
26+
三个三 333
27+
三个两 222
28+
三个九 999
29+
三个二 222
30+
三个五 555
31+
三个伍 555
32+
三个八 888
33+
三个六 666
34+
三个叁 333
35+
三个四 444
36+
三个壹 111
37+
三个幺 111
38+
三个拐 777
39+
三个捌 888
40+
三个柒 777
41+
三个洞 000
42+
三个玖 999
43+
三个肆 444
44+
三个贰 222
45+
三个陆 666
46+
三个零 000
47+
九个一 111111111
48+
九个七 777777777
49+
九个三 333333333
50+
九个两 222222222
51+
九个九 999999999
52+
九个二 222222222
53+
九个五 555555555
54+
九个伍 555555555
55+
九个八 888888888
56+
九个六 666666666
57+
九个叁 333333333
58+
九个四 444444444
59+
九个壹 111111111
60+
九个幺 111111111
61+
九个拐 777777777
62+
九个捌 888888888
63+
九个柒 777777777
64+
九个洞 000000000
65+
九个玖 999999999
66+
九个肆 444444444
67+
九个贰 222222222
68+
九个陆 666666666
69+
九个零 000000000
70+
五个一 11111
71+
五个七 77777
72+
五个三 33333
73+
五个两 22222
74+
五个九 99999
75+
五个二 22222
76+
五个五 55555
77+
五个伍 55555
78+
五个八 88888
79+
五个六 66666
80+
五个叁 33333
81+
五个四 44444
82+
五个壹 11111
83+
五个幺 11111
84+
五个拐 77777
85+
五个捌 88888
86+
五个柒 77777
87+
五个洞 00000
88+
五个玖 99999
89+
五个肆 44444
90+
五个贰 22222
91+
五个陆 66666
92+
五个零 00000
93+
伍个一 11111
94+
伍个七 77777
95+
伍个三 33333
96+
伍个两 22222
97+
伍个九 99999
98+
伍个二 22222
99+
伍个五 55555
100+
伍个伍 55555
101+
伍个八 88888
102+
伍个六 66666
103+
伍个叁 33333
104+
伍个四 44444
105+
伍个壹 11111
106+
伍个幺 11111
107+
伍个拐 77777
108+
伍个捌 88888
109+
伍个柒 77777
110+
伍个洞 00000
111+
伍个玖 99999
112+
伍个肆 44444
113+
伍个贰 22222
114+
伍个陆 66666
115+
伍个零 00000
116+
八个一 11111111
117+
八个七 77777777
118+
八个三 33333333
119+
八个两 22222222
120+
八个九 99999999
121+
八个二 22222222
122+
八个五 55555555
123+
八个伍 55555555
124+
八个八 88888888
125+
八个六 66666666
126+
八个叁 33333333
127+
八个四 44444444
128+
八个壹 11111111
129+
八个幺 11111111
130+
八个拐 77777777
131+
八个捌 88888888
132+
八个柒 77777777
133+
八个洞 00000000
134+
八个玖 99999999
135+
八个肆 44444444
136+
八个贰 22222222
137+
八个陆 66666666
138+
八个零 00000000
139+
六个一 111111
140+
六个七 777777
141+
六个三 333333
142+
六个两 222222
143+
六个九 999999
144+
六个二 222222
145+
六个五 555555
146+
六个伍 555555
147+
六个八 888888
148+
六个六 666666
149+
六个叁 333333
150+
六个四 444444
151+
六个壹 111111
152+
六个幺 111111
153+
六个拐 777777
154+
六个捌 888888
155+
六个柒 777777
156+
六个洞 000000
157+
六个玖 999999
158+
六个肆 444444
159+
六个贰 222222
160+
六个陆 666666
161+
六个零 000000
162+
叁个一 111
163+
叁个七 777
164+
叁个三 333
165+
叁个两 222
166+
叁个九 999
167+
叁个二 222
168+
叁个五 555
169+
叁个伍 555
170+
叁个八 888
171+
叁个六 666
172+
叁个叁 333
173+
叁个四 444
174+
叁个壹 111
175+
叁个幺 111
176+
叁个拐 777
177+
叁个捌 888
178+
叁个柒 777
179+
叁个洞 000
180+
叁个玖 999
181+
叁个肆 444
182+
叁个贰 222
183+
叁个陆 666
184+
叁个零 000
185+
四个一 1111
186+
四个七 7777
187+
四个三 3333
188+
四个两 2222
189+
四个九 9999
190+
四个二 2222
191+
四个五 5555
192+
四个伍 5555
193+
四个八 8888
194+
四个六 6666
195+
四个叁 3333
196+
四个四 4444
197+
四个壹 1111
198+
四个幺 1111
199+
四个拐 7777
200+
四个捌 8888
201+
四个柒 7777
202+
四个洞 0000
203+
四个玖 9999
204+
四个肆 4444
205+
四个贰 2222
206+
四个陆 6666
207+
四个零 0000
208+
捌个一 11111111
209+
捌个七 77777777
210+
捌个三 33333333
211+
捌个两 22222222
212+
捌个九 99999999
213+
捌个二 22222222
214+
捌个五 55555555
215+
捌个伍 55555555
216+
捌个八 88888888
217+
捌个六 66666666
218+
捌个叁 33333333
219+
捌个四 44444444
220+
捌个壹 11111111
221+
捌个幺 11111111
222+
捌个拐 77777777
223+
捌个捌 88888888
224+
捌个柒 77777777
225+
捌个洞 00000000
226+
捌个玖 99999999
227+
捌个肆 44444444
228+
捌个贰 22222222
229+
捌个陆 66666666
230+
捌个零 00000000
231+
柒个一 1111111
232+
柒个七 7777777
233+
柒个三 3333333
234+
柒个两 2222222
235+
柒个九 9999999
236+
柒个二 2222222
237+
柒个五 5555555
238+
柒个伍 5555555
239+
柒个八 8888888
240+
柒个六 6666666
241+
柒个叁 3333333
242+
柒个四 4444444
243+
柒个壹 1111111
244+
柒个幺 1111111
245+
柒个拐 7777777
246+
柒个捌 8888888
247+
柒个柒 7777777
248+
柒个洞 0000000
249+
柒个玖 9999999
250+
柒个肆 4444444
251+
柒个贰 2222222
252+
柒个陆 6666666
253+
柒个零 0000000
254+
玖个一 111111111
255+
玖个七 777777777
256+
玖个三 333333333
257+
玖个两 222222222
258+
玖个九 999999999
259+
玖个二 222222222
260+
玖个五 555555555
261+
玖个伍 555555555
262+
玖个八 888888888
263+
玖个六 666666666
264+
玖个叁 333333333
265+
玖个四 444444444
266+
玖个壹 111111111
267+
玖个幺 111111111
268+
玖个拐 777777777
269+
玖个捌 888888888
270+
玖个柒 777777777
271+
玖个洞 000000000
272+
玖个玖 999999999
273+
玖个肆 444444444
274+
玖个贰 222222222
275+
玖个陆 666666666
276+
玖个零 000000000
277+
肆个一 1111
278+
肆个七 7777
279+
肆个三 3333
280+
肆个两 2222
281+
肆个九 9999
282+
肆个二 2222
283+
肆个五 5555
284+
肆个伍 5555
285+
肆个八 8888
286+
肆个六 6666
287+
肆个叁 3333
288+
肆个四 4444
289+
肆个壹 1111
290+
肆个幺 1111
291+
肆个拐 7777
292+
肆个捌 8888
293+
肆个柒 7777
294+
肆个洞 0000
295+
肆个玖 9999
296+
肆个肆 4444
297+
肆个贰 2222
298+
肆个陆 6666
299+
肆个零 0000
300+
陆个一 111111
301+
陆个七 777777
302+
陆个三 333333
303+
陆个两 222222
304+
陆个九 999999
305+
陆个二 222222
306+
陆个五 555555
307+
陆个伍 555555
308+
陆个八 888888
309+
陆个六 666666
310+
陆个叁 333333
311+
陆个四 444444
312+
陆个壹 111111
313+
陆个幺 111111
314+
陆个拐 777777
315+
陆个捌 888888
316+
陆个柒 777777
317+
陆个洞 000000
318+
陆个玖 999999
319+
陆个肆 444444
320+
陆个贰 222222
321+
陆个陆 666666
322+
陆个零 000000

itn/chinese/rules/cardinal.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,10 @@ def build_tagger(self):
149149
self.number_exclude_0_to_9 = (sign.ques + number_exclude_0_to_9).optimize()
150150

151151
# 3. 特殊格式的数字
152+
# "N个X" repeat pattern for digit sequences, e.g. 四个八 => 8888
153+
repeat_digit = string_file(get_abs_path("../itn/chinese/data/number/repeat_digit.tsv"))
154+
digit_token = digits | repeat_digit
155+
152156
# cardinal string like 127.0.0.1, used in ID, IP, etc.
153157
cardinal = digits.plus + (dot + digits.plus).plus
154158
# float number like 1.11
@@ -157,6 +161,9 @@ def build_tagger(self):
157161
# 340621199806051223, used in ID card
158162
idcard_last_char = digits | "X" | "x"
159163
cardinal |= digits**3 | digits**4 | digits**5 | digits**11 | (digits**17 + idcard_last_char) | digits**18
164+
# digit sequences with "N个X" repeat, e.g. 幺三八四个八 => 1388888
165+
# requires at least one normal digit before repeat_digit
166+
cardinal |= digits.plus + repeat_digit + digits.star
160167

161168
# 4. 特殊格式的数字 + 标准数字
162169
# cardinal string like 23

0 commit comments

Comments
 (0)