Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
SachaHu opened this issue Mar 28, 2024 · 4 comments
Open

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

SachaHu opened this issue Mar 28, 2024 · 4 comments

Comments

@SachaHu
Copy link

SachaHu commented Mar 28, 2024

‘十万零一千‘ 无法识别
万位为零千位不为零时,按一般中文数字规则,可以补零也可以不补零。如‘十万一千’和‘十万零一千’,应该都是正确写法。
‘十万一千’正确识别,‘十万零一千’无法识别
输入:
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: 不符合格式的数据:十万零一千
@17-panyx
Copy link

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

@SachaHu
Copy link
Author

SachaHu commented Apr 15, 2024

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

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

@17-panyx
Copy link

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

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

好的,谢谢!

@Dipper-347
Copy link

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

转换为中文数字

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

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

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants