wenet-e2e / WeTextProcessing

Text Normalization & Inverse Text Normalization
Apache License 2.0
445 stars 66 forks source link

badcase咨询,连续的重复数字itn转换错误 #237

Closed vbiwuevbaeib closed 2 months ago

vbiwuevbaeib commented 3 months ago

例如“三十万三十万”,预期得到“30万 30万”,但现有结果是

invnormalizer.normalize("三十万三十万") cardinal { value: "303000 100000" } '303000 100000' 对于这样重复的数字,应该怎么判断分词呢?

除此之外,像“三万一天的利息”在itn转换过程中也存在问题,现有结果是

invnormalizer.normalize("三万一天的利息") measure { value: "31000天" } char { value: "的" } char { value: "利" } char { value: "息" } '31000天的利息' 这里的一天其实是指每天,应该是单位

xingchensong commented 3 months ago

第一个不是很好弄,第二个应该可以改下规则,让天数前面匹配数字的时候不匹配x万x这种数字,只匹配x万或者x这种

xingchensong commented 3 months ago

可以尝试改一下然后给我们pr哦

weimeng23 commented 3 months ago

确实这种case很多, 三千一年 三千一个月 三百一顿 这类

xingchensong commented 3 months ago

确实这种case很多, 三千一年 三千一个月 三百一顿 这类

这个很好改的,你给measure里加一条路径 digit + union("百", "千", "万") + digit + unit

然后给这条路径加一个非常优先的权重,这样 x千y年 就不会被分成 number了,可以提个pr,记得加一下单元测试样例

weimeng23 commented 3 months ago

确实这种case很多, 三千一年 三千一个月 三百一顿 这类

这个很好改的,你给measure里加一条路径 digit + union("百", "千", "万") + digit + unit

然后给这条路径加一个非常优先的权重,这样 x千y年 就不会被分成 number了,可以提个pr,记得加一下单元测试样例

嗯嗯是这个思路,我之前这么改的

        cardinal |= add_weight(
            ((digit + delete('百') + add_weight(addzero**2, 1.0)) |
             (digit + delete('千') + add_weight(addzero**3, 1.0)) |
             (digit + delete('万') + add_weight(addzero**4, 1.0))) +
            insert(' ') + digit +
            (accep('个') | accep('个月') | accep('月') | accep('天') | accep('年')),
            -0.5)
xingchensong commented 2 months ago

@weimeng23 方便提个pr不

weimeng23 commented 2 months ago

@weimeng23 方便提个pr不

没问题

weimeng23 commented 2 months ago

@xingchensong #255