Skip to content

Commit 5b27a59

Browse files
authored
[itn] fix 三百九十八三盒 (#181)
1 parent 2a60045 commit 5b27a59

11 files changed

Lines changed: 127 additions & 29 deletions
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
一二 1-2
2+
二三 2-3
3+
三四 3-4
4+
四五 4-5
5+
五六 5-6
6+
六七 6-7
7+
七八 7-8
8+
八九 8-9
9+
一二十 10-20
10+
二三十 20-30
11+
三四十 30-40
12+
三五十 30-50
13+
四五十 40-50
14+
五六十 50-60
15+
六七十 60-70
16+
七八十 70-80
17+
八九十 80-90
18+
一二百 100-200
19+
一两百 100-200
20+
二三百 200-300
21+
两三百 200-300
22+
三四百 300-400
23+
三五百 300-500
24+
四五百 400-500
25+
五六百 500-600
26+
六七百 600-700
27+
七八百 700-800
28+
八九百 800-900
29+
一二千 1000-2000
30+
一两千 1000-2000
31+
二三千 2000-3000
32+
两三千 2000-3000
33+
三四千 3000-4000
34+
三五千 3000-5000
35+
四五千 4000-5000
36+
五六千 5000-6000
37+
六七千 6000-7000
38+
七八千 7000-8000
39+
八九千 8000-9000
40+
一二万 1-2万
41+
一两万 1-2万
42+
二三万 2-3万
43+
两三万 2-3万
44+
三四万 3-4万
45+
三五万 3-5万
46+
四五万 4-5万
47+
五六万 5-6万
48+
六七万 6-7万
49+
七八万 7-8万
50+
八九万 8-9万
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
一二 1~2
2+
二三 2~3
3+
三四 3~4
4+
四五 4~5
5+
五六 5~6
6+
六七 6~7
7+
七八 7~8
8+
八九 8~9
9+
一二十 10~20
10+
二三十 20~30
11+
三四十 30~40
12+
三五十 30~50
13+
四五十 40~50
14+
五六十 50~60
15+
六七十 60~70
16+
七八十 70~80
17+
八九十 80~90
18+
一二百 100~200
19+
一两百 100~200
20+
二三百 200~300
21+
两三百 200~300
22+
三四百 300~400
23+
三五百 300~500
24+
四五百 400~500
25+
五六百 500~600
26+
六七百 600~700
27+
七八百 700~800
28+
八九百 800~900
29+
一二千 1000~2000
30+
一两千 1000~2000
31+
二三千 2000~3000
32+
两三千 2000~3000
33+
三四千 3000~4000
34+
三五千 3000~5000
35+
四五千 4000~5000
36+
五六千 5000~6000
37+
六七千 6000~7000
38+
七八千 7000~8000
39+
八九千 8000~9000
40+
一二万 1~2万
41+
一两万 1~2万
42+
二三万 2~3万
43+
两三万 2~3万
44+
三四万 3~4万
45+
三五万 3~5万
46+
四五万 4~5万
47+
五六万 5~6万
48+
六七万 6~7万
49+
七八万 7~8万
50+
八九万 8~9万

itn/chinese/rules/cardinal.py

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@ def __init__(self,
3636
def build_tagger(self):
3737
zero = string_file('itn/chinese/data/number/zero.tsv') # 0
3838
digit = string_file('itn/chinese/data/number/digit.tsv') # 1 ~ 9
39+
special_tilde = string_file(
40+
'itn/chinese//data/number/special_tilde.tsv') # 七八十->70~80
41+
special_dash = string_file(
42+
'itn/chinese//data/number/special_dash.tsv') # 七八十->70-80
3943
sign = string_file('itn/chinese/data/number/sign.tsv') # + -
4044
dot = string_file('itn/chinese/data/number/dot.tsv') # .
4145

@@ -90,23 +94,17 @@ def build_tagger(self):
9094
(number + accep('亿') + delete('零').ques).ques + number)
9195
# 负的xxx 1.11, 1.01
9296
number = sign.ques + number + (dot + digits.plus).ques
93-
# 五六万,三五千,六七百,三四十
94-
special_2number = digit + insert("0~") + digit + cross("十", "0")
95-
special_2number |= digit + insert("00~") + digit + cross("百", "00")
96-
special_2number |= digit + insert("000~") + digit + cross("千", "000")
97-
special_2number |= digit + insert("0000~") + digit + cross("万", "0000")
98-
number |= special_2number
99-
# 十七八美元 => $17~18, 四十五六岁 => 45-6岁,
100-
# 三百七八公里 => 370-80km, 三百七八十千克 => 370-80kg
101-
special_3number = cross('十', '1') + digit + insert("~1") + digit
102-
special_3number |= digit + delete('十') + digit + insert("-") + digit
103-
special_3number |= digit + delete('百') + digit + insert("0-") + digit \
104-
+ (insert("0") | add_weight(cross("十", "0"), -0.1))
105-
number |= add_weight(special_3number, -100.0)
97+
# 五六万 => 5~6万,三五千 => 3000~5000,六七百 => 600~700,三四十 => 30~40
98+
number |= special_tilde
99+
# 十七八 => 17-8, 四十五六 => 45-6, 三百七八十 => 370-80
100+
_special_dash = cross('十', '1') + special_dash
101+
_special_dash |= digit + delete('十') + special_dash
102+
_special_dash |= digit + delete('百') + special_dash
103+
number |= add_weight(_special_dash, -100.0)
106104

107105
self.number = number.optimize()
108-
self.special_2number = special_2number.optimize()
109-
self.special_3number = special_3number.optimize()
106+
self.special_tilde = special_tilde.optimize()
107+
self.special_dash = _special_dash.optimize()
110108

111109
# 2. 利用基础数字所构建的不包含0~9的完整数字
112110
# 十/百/千/万
@@ -123,8 +121,8 @@ def build_tagger(self):
123121
# 五六万,三五千,六七百,三四十
124122
# 十七八美元 => $17~18, 四十五六岁 => 45-6岁,
125123
# 三百七八公里 => 370-80km, 三百七八十千克 => 370-80kg
126-
number_exclude_0_to_9 |= special_2number
127-
number_exclude_0_to_9 |= add_weight(special_3number, -100.0)
124+
number_exclude_0_to_9 |= special_tilde
125+
number_exclude_0_to_9 |= add_weight(_special_dash, -100.0)
128126

129127
self.number_exclude_0_to_9 = (sign.ques +
130128
number_exclude_0_to_9).optimize()

itn/chinese/rules/measure.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ def __init__(self, exclude_one=True, enable_0_to_9=True):
3131
def build_tagger(self):
3232
units_en = string_file('itn/chinese/data/measure/units_en.tsv')
3333
units_zh = string_file('itn/chinese/data/measure/units_zh.tsv')
34-
digit = string_file('itn/chinese/data/number/digit.tsv') # 1 ~ 9
3534
sign = string_file('itn/chinese/data/number/sign.tsv') # + -
3635
to = cross('到', '~') | cross('到百分之', '~')
3736

@@ -52,8 +51,6 @@ def build_tagger(self):
5251

5352
# 十千米每小时 => 10km/h, 十一到一百千米每小时 => 11~100km/h
5453
measure = number + (to + number).ques + units
55-
# 七八块钱
56-
measure |= digit + insert("~") + digit + units
5754
tagger = insert('value: "') + (measure | percent) + insert('"')
5855

5956
# 每小时十千米 => 10km/h, 每小时三十到三百一十一千米 => 30~311km/h

itn/chinese/test/data/cardinal.txt

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,13 @@
33
这是手机一八五四四一三九一二一 => 这是手机18544139121
44
三五百 => 300~500
55
三五千 => 3000~5000
6-
三五万 => 30000~50000
7-
三四万 => 30000~40000
6+
三五万 => 3~5万
7+
三四万 => 3~4万
88
五六十 => 50~60
9-
十五六 => 15~16
9+
十五六 => 15-6
1010
四十五六 => 45-6
11-
七百三四 => 730-40
1211
七百三四十 => 730-40
13-
十七八万 => 17~18万
12+
十七八万 => 17-8万
1413
六十三四万 => 63-4万
1514
我的身份证号是三四零二零三一九三七零幺零幺零五幺七 => 我的身份证号是340203193701010517
1615
给一三三四五三一二二二一打电话 => 给13345312221打电话

itn/chinese/test/data/measure.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
三五百公里 => 300~500km
3838
三四万吨 => 3~4万吨
3939
三四万伏特 => 3~4Wv
40-
十五六千瓦时 => 15~16kwh
40+
十五六千瓦时 => 15-6kwh
4141
四十五六度 => 45-6°
42-
七百三四秒 => 730-40s
42+
七百三四十秒 => 730-40s
4343
七百三四十分钟 => 730-40min

itn/chinese/test/data/money.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
三十四点五二一元 => ¥34.521
44
八九千美元 => $8000~9000
55
七八英镑 => £7~8
6-
十五六卢布 => ₽15~16
6+
十五六卢布 => ₽15-6
77
四十五六新台币 => TWD45-6
8-
七百三四欧元 => €730-40
8+
七百三四十欧元 => €730-40
99
七百三四十马来西亚令吉 => RM730-40
1010
三千三百八十元五角八分 => ¥3380.58
1111
二十五元三毛 => ¥25.3

itn/chinese/test/data/normalizer.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,4 @@
2929
可以打我手机幺三五零幺二三四五六七 => 可以打我手机13501234567
3030
可以拨打幺二三零六来咨询 => 可以拨打12306来咨询
3131
二点五平方电线,五,五十五,疑是银河落九天,十二块五 => 2.5平方电线,5,55,疑是银河落9天,12块5
32+
三百九十九三盒 => 3993盒

itn/chinese/test/data/normalizer_disable_standalone_number_disable_0_to_9.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,3 +30,4 @@
3030
明天有百分之六十二的概率降雨所以你有百分之二点五一的可能性赢得比赛但是有负百分之十三的人认为你有负的百分之二十的胜利可能性 => 明天有62%的概率降雨所以你有2.51%的可能性赢得比赛但是有-13%的人认为你有-20%的胜利可能性
3131
这块黄金重达三百二十四点七五克,我再随便来几个价格三十四点五二一元,二十点一万 => 这块黄金重达324.75g,我再随便来几个价格¥34.521,20.1万
3232
一共有一人二人三人四人五人六人七人八人九人十人十一人十二人十三人十四人十五人十六人十七人十八人十九人二十人二十一人二十二人二十三人二十四人二十五人二十六人二十七人二十八人二十九人三十人三十一人三十二人三十三人三十四人三十五人三十六人三十七人三十八人三十九人四十人四十一人四十二人四十三人四十四人四十五人四十六人四十七人四十八人四十九人五十人五十一人五十二人五十三人五十四人五十五人五十六人五十七人五十八人五十九人六十人六十一人六十二人六十三人六十四人六十五人六十六人六十七人六十八人六十九人七十人七十一人七十二人七十三人七十四人七十五人七十六人七十七人七十八人七十九人八十人八十一人八十二人八十三人八十四人八十五人八十六人八十七人八十八人八十九人九十人九十一人九十二人九十三人九十四人九十五人九十六人九十七人九十八人九十九人一百人一百零一人一百一人一百一十一人一百一十二人两百二人二百二十三人三百三人三百三十四人四百四人四百四十五人一千零一人一千零五十人一千零五十一人一千三百人一千五百五人两千五百五十六人三千六百六人四千六百六十七人五千七百七人六千七百七十八人七千八百八人八千八百八十九人九千九百九人九千九百九十一人 => 一共有一人二人三人四人五人六人七人八人九人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人110人111人112人220人223人330人334人440人445人1001人1050人1051人1300人1550人2556人3660人4667人5770人6778人7880人8889人9990人9991人
33+
三百九十九三盒 => 三百九十九三盒
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
二点五平方电线,五,五十五,疑是银河落九天,十二块五 => 2.5平方电线,五,五十五,疑是银河落9天,12块五
2+
三百九十九三盒 => 三百九十九3盒

0 commit comments

Comments
 (0)