cn2an icon indicating copy to clipboard operation
cn2an copied to clipboard

中文数字补位‘零’识别错误

Open SachaHu opened this issue 1 year ago • 4 comments

‘十万零一千‘ 无法识别 万位为零千位不为零时,按一般中文数字规则,可以补零也可以不补零。如‘十万一千’和‘十万零一千’,应该都是正确写法。 ‘十万一千’正确识别,‘十万零一千’无法识别 输入: cn2an.cn2an("十万零一千","smart") 报错:

ValueError                                Traceback (most recent call last)
Cell In[20], line 1
----> 1 cn2an.cn2an("十万零一千","smart")

File D:\anaconda\envs\agent\lib\site-packages\cn2an\cn2an.py:58, in Cn2An.cn2an(self, inputs, mode)
     55 inputs = inputs.replace("廿", "二十")
     57 # 检查输入数据是否有效
---> 58 sign, integer_data, decimal_data, is_all_num = self.__check_input_data_is_valid(inputs, mode)
     60 # smart 下的特殊情况
     61 if sign == 0:

File D:\anaconda\envs\agent\lib\site-packages\cn2an\cn2an.py:235, in Cn2An.__check_input_data_is_valid(self, check_data, mode)
    232             else:
    233                 return sign, integer_data, decimal_data, False
--> 235 raise ValueError(f"不符合格式的数据:{check_data}")

ValueError: 不符合格式的数据:十万零一千

SachaHu avatar Mar 28 '24 08:03 SachaHu

遇到了同样的问题“十万零五千”无法转化为105000,smart和strict模式都无法解决,请问有什么好办法么?

17-panyx avatar Apr 13 '24 13:04 17-panyx

遇到了同样的问题“十万零五千”无法转化为105000,smart和strict模式都无法解决,请问有什么好办法么?

get_pattern的时候没有穷举到这个样式,大概可以加上去试试,应该可以正常反解。 我在实际项目里选择在外层识别了这个样式,把'十万零'替换为'十万',解析成功。

SachaHu avatar Apr 15 '24 11:04 SachaHu

遇到了同样的问题“十万零五千”无法转化为105000,smart和strict模式都无法解决,请问有什么好办法么?

get_pattern的时候没有穷举到这个样式,大概可以加上去试试,应该可以正常反解。 我在实际项目里选择在外层识别了这个样式,把'十万零'替换为'十万',解析成功。

好的,谢谢!

17-panyx avatar Apr 15 '24 11:04 17-panyx

可以用正则识别万零X千然后去掉零

转换为中文数字

cn_str = cn2an.transform(original_str, 'an2cn')

修复万零X千(cn2an 包自带问题)

pattern = r'万零([一二三四五六七八九十百千]+千)' replacement = r'万\1' cn_str = re.sub(pattern, replacement, cn_str)

Dipper-347 avatar May 14 '24 03:05 Dipper-347