中文数字补位‘零’识别错误
‘十万零一千‘ 无法识别
万位为零千位不为零时,按一般中文数字规则,可以补零也可以不补零。如‘十万一千’和‘十万零一千’,应该都是正确写法。
‘十万一千’正确识别,‘十万零一千’无法识别
输入:
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: 不符合格式的数据:十万零一千
遇到了同样的问题“十万零五千”无法转化为105000,smart和strict模式都无法解决,请问有什么好办法么?
遇到了同样的问题“十万零五千”无法转化为105000,smart和strict模式都无法解决,请问有什么好办法么?
get_pattern的时候没有穷举到这个样式,大概可以加上去试试,应该可以正常反解。 我在实际项目里选择在外层识别了这个样式,把'十万零'替换为'十万',解析成功。
遇到了同样的问题“十万零五千”无法转化为105000,smart和strict模式都无法解决,请问有什么好办法么?
get_pattern的时候没有穷举到这个样式,大概可以加上去试试,应该可以正常反解。 我在实际项目里选择在外层识别了这个样式,把'十万零'替换为'十万',解析成功。
好的,谢谢!
可以用正则识别万零X千然后去掉零
转换为中文数字
cn_str = cn2an.transform(original_str, 'an2cn')
修复万零X千(cn2an 包自带问题)
pattern = r'万零([一二三四五六七八九十百千]+千)' replacement = r'万\1' cn_str = re.sub(pattern, replacement, cn_str)