Skip to content

Commit

Permalink
[itn] fix 三百九十八三盒 (#181)
Browse files Browse the repository at this point in the history
  • Loading branch information
xingchensong authored Jan 9, 2024
1 parent 2a60045 commit 5b27a59
Show file tree
Hide file tree
Showing 11 changed files with 127 additions and 29 deletions.
50 changes: 50 additions & 0 deletions itn/chinese/data/number/special_dash.tsv
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
一二 1-2
二三 2-3
三四 3-4
四五 4-5
五六 5-6
六七 6-7
七八 7-8
八九 8-9
一二十 10-20
二三十 20-30
三四十 30-40
三五十 30-50
四五十 40-50
五六十 50-60
六七十 60-70
七八十 70-80
八九十 80-90
一二百 100-200
一两百 100-200
二三百 200-300
两三百 200-300
三四百 300-400
三五百 300-500
四五百 400-500
五六百 500-600
六七百 600-700
七八百 700-800
八九百 800-900
一二千 1000-2000
一两千 1000-2000
二三千 2000-3000
两三千 2000-3000
三四千 3000-4000
三五千 3000-5000
四五千 4000-5000
五六千 5000-6000
六七千 6000-7000
七八千 7000-8000
八九千 8000-9000
一二万 1-2万
一两万 1-2万
二三万 2-3万
两三万 2-3万
三四万 3-4万
三五万 3-5万
四五万 4-5万
五六万 5-6万
六七万 6-7万
七八万 7-8万
八九万 8-9万
50 changes: 50 additions & 0 deletions itn/chinese/data/number/special_tilde.tsv
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
一二 1~2
二三 2~3
三四 3~4
四五 4~5
五六 5~6
六七 6~7
七八 7~8
八九 8~9
一二十 10~20
二三十 20~30
三四十 30~40
三五十 30~50
四五十 40~50
五六十 50~60
六七十 60~70
七八十 70~80
八九十 80~90
一二百 100~200
一两百 100~200
二三百 200~300
两三百 200~300
三四百 300~400
三五百 300~500
四五百 400~500
五六百 500~600
六七百 600~700
七八百 700~800
八九百 800~900
一二千 1000~2000
一两千 1000~2000
二三千 2000~3000
两三千 2000~3000
三四千 3000~4000
三五千 3000~5000
四五千 4000~5000
五六千 5000~6000
六七千 6000~7000
七八千 7000~8000
八九千 8000~9000
一二万 1~2万
一两万 1~2万
二三万 2~3万
两三万 2~3万
三四万 3~4万
三五万 3~5万
四五万 4~5万
五六万 5~6万
六七万 6~7万
七八万 7~8万
八九万 8~9万
32 changes: 15 additions & 17 deletions itn/chinese/rules/cardinal.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,10 @@ def __init__(self,
def build_tagger(self):
zero = string_file('itn/chinese/data/number/zero.tsv') # 0
digit = string_file('itn/chinese/data/number/digit.tsv') # 1 ~ 9
special_tilde = string_file(
'itn/chinese//data/number/special_tilde.tsv') # 七八十->70~80
special_dash = string_file(
'itn/chinese//data/number/special_dash.tsv') # 七八十->70-80
sign = string_file('itn/chinese/data/number/sign.tsv') # + -
dot = string_file('itn/chinese/data/number/dot.tsv') # .

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

self.number = number.optimize()
self.special_2number = special_2number.optimize()
self.special_3number = special_3number.optimize()
self.special_tilde = special_tilde.optimize()
self.special_dash = _special_dash.optimize()

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

self.number_exclude_0_to_9 = (sign.ques +
number_exclude_0_to_9).optimize()
Expand Down
3 changes: 0 additions & 3 deletions itn/chinese/rules/measure.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ def __init__(self, exclude_one=True, enable_0_to_9=True):
def build_tagger(self):
units_en = string_file('itn/chinese/data/measure/units_en.tsv')
units_zh = string_file('itn/chinese/data/measure/units_zh.tsv')
digit = string_file('itn/chinese/data/number/digit.tsv') # 1 ~ 9
sign = string_file('itn/chinese/data/number/sign.tsv') # + -
to = cross('到', '~') | cross('到百分之', '~')

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

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

# 每小时十千米 => 10km/h, 每小时三十到三百一十一千米 => 30~311km/h
Expand Down
9 changes: 4 additions & 5 deletions itn/chinese/test/data/cardinal.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,13 @@
这是手机一八五四四一三九一二一 => 这是手机18544139121
三五百 => 300~500
三五千 => 3000~5000
三五万 => 30000~50000
三四万 => 30000~40000
三五万 => 3~5万
三四万 => 3~4万
五六十 => 50~60
十五六 => 15~16
十五六 => 15-6
四十五六 => 45-6
七百三四 => 730-40
七百三四十 => 730-40
十七八万 => 17~18万
十七八万 => 17-8万
六十三四万 => 63-4万
我的身份证号是三四零二零三一九三七零幺零幺零五幺七 => 我的身份证号是340203193701010517
给一三三四五三一二二二一打电话 => 给13345312221打电话
Expand Down
4 changes: 2 additions & 2 deletions itn/chinese/test/data/measure.txt
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
三五百公里 => 300~500km
三四万吨 => 3~4万吨
三四万伏特 => 3~4Wv
十五六千瓦时 => 15~16kwh
十五六千瓦时 => 15-6kwh
四十五六度 => 45-6°
七百三四秒 => 730-40s
七百三四十秒 => 730-40s
七百三四十分钟 => 730-40min
4 changes: 2 additions & 2 deletions itn/chinese/test/data/money.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
三十四点五二一元 => ¥34.521
八九千美元 => $8000~9000
七八英镑 => £7~8
十五六卢布 => ₽15~16
十五六卢布 => ₽15-6
四十五六新台币 => TWD45-6
七百三四欧元 => €730-40
七百三四十欧元 => €730-40
七百三四十马来西亚令吉 => RM730-40
三千三百八十元五角八分 => ¥3380.58
二十五元三毛 => ¥25.3
1 change: 1 addition & 0 deletions itn/chinese/test/data/normalizer.txt
Original file line number Diff line number Diff line change
Expand Up @@ -29,3 +29,4 @@
可以打我手机幺三五零幺二三四五六七 => 可以打我手机13501234567
可以拨打幺二三零六来咨询 => 可以拨打12306来咨询
二点五平方电线,五,五十五,疑是银河落九天,十二块五 => 2.5平方电线,5,55,疑是银河落9天,12块5
三百九十九三盒 => 3993盒
Original file line number Diff line number Diff line change
Expand Up @@ -30,3 +30,4 @@
明天有百分之六十二的概率降雨所以你有百分之二点五一的可能性赢得比赛但是有负百分之十三的人认为你有负的百分之二十的胜利可能性 => 明天有62%的概率降雨所以你有2.51%的可能性赢得比赛但是有-13%的人认为你有-20%的胜利可能性
这块黄金重达三百二十四点七五克,我再随便来几个价格三十四点五二一元,二十点一万 => 这块黄金重达324.75g,我再随便来几个价格¥34.521,20.1万
一共有一人二人三人四人五人六人七人八人九人十人十一人十二人十三人十四人十五人十六人十七人十八人十九人二十人二十一人二十二人二十三人二十四人二十五人二十六人二十七人二十八人二十九人三十人三十一人三十二人三十三人三十四人三十五人三十六人三十七人三十八人三十九人四十人四十一人四十二人四十三人四十四人四十五人四十六人四十七人四十八人四十九人五十人五十一人五十二人五十三人五十四人五十五人五十六人五十七人五十八人五十九人六十人六十一人六十二人六十三人六十四人六十五人六十六人六十七人六十八人六十九人七十人七十一人七十二人七十三人七十四人七十五人七十六人七十七人七十八人七十九人八十人八十一人八十二人八十三人八十四人八十五人八十六人八十七人八十八人八十九人九十人九十一人九十二人九十三人九十四人九十五人九十六人九十七人九十八人九十九人一百人一百零一人一百一人一百一十一人一百一十二人两百二人二百二十三人三百三人三百三十四人四百四人四百四十五人一千零一人一千零五十人一千零五十一人一千三百人一千五百五人两千五百五十六人三千六百六人四千六百六十七人五千七百七人六千七百七十八人七千八百八人八千八百八十九人九千九百九人九千九百九十一人 => 一共有一人二人三人四人五人六人七人八人九人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人
三百九十九三盒 => 三百九十九三盒
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
二点五平方电线,五,五十五,疑是银河落九天,十二块五 => 2.5平方电线,五,五十五,疑是银河落9天,12块五
三百九十九三盒 => 三百九十九3盒
Original file line number Diff line number Diff line change
Expand Up @@ -30,3 +30,4 @@
明天有百分之六十二的概率降雨所以你有百分之二点五一的可能性赢得比赛但是有负百分之十三的人认为你有负的百分之二十的胜利可能性 => 明天有62%的概率降雨所以你有2.51%的可能性赢得比赛但是有-13%的人认为你有-20%的胜利可能性
这块黄金重达三百二十四点七五克,我再随便来几个价格三十四点五二一元,二十点一万 => 这块黄金重达324.75g,我再随便来几个价格¥34.521,20.1万
一共有一人二人三人四人五人六人七人八人九人十人十一人十二人十三人十四人十五人十六人十七人十八人十九人二十人二十一人二十二人二十三人二十四人二十五人二十六人二十七人二十八人二十九人三十人三十一人三十二人三十三人三十四人三十五人三十六人三十七人三十八人三十九人四十人四十一人四十二人四十三人四十四人四十五人四十六人四十七人四十八人四十九人五十人五十一人五十二人五十三人五十四人五十五人五十六人五十七人五十八人五十九人六十人六十一人六十二人六十三人六十四人六十五人六十六人六十七人六十八人六十九人七十人七十一人七十二人七十三人七十四人七十五人七十六人七十七人七十八人七十九人八十人八十一人八十二人八十三人八十四人八十五人八十六人八十七人八十八人八十九人九十人九十一人九十二人九十三人九十四人九十五人九十六人九十七人九十八人九十九人一百人一百零一人一百一人一百一十一人一百一十二人两百二人二百二十三人三百三人三百三十四人四百四人四百四十五人一千零一人一千零五十人一千零五十一人一千三百人一千五百五人两千五百五十六人三千六百六人四千六百六十七人五千七百七人六千七百七十八人七千八百八人八千八百八十九人九千九百九人九千九百九十一人 => 一共有一人二人三人四人五人六人七人八人九人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人
三百九十九三盒 => 399三盒

0 comments on commit 5b27a59

Please sign in to comment.