文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

怎么在Python中利用cn2an将中文数字与阿拉伯数字进行转换

2023-06-06 16:28

关注

这篇文章主要介绍了怎么在Python中利用cn2an将中文数字与阿拉伯数字进行转换,此处通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考价值,需要的朋友可以参考下:

python是什么意思

Python是一种跨平台的、具有解释性、编译性、互动性和面向对象的脚本语言,其最初的设计是用于编写自动化脚本,随着版本的不断更新和新功能的添加,常用于用于开发独立的项目和大型项目。

安装

pip install cn2an

依赖库为setuptools、PyYAML

查看版本

In [1]: import cn2anIn [2]: cn2an.__version__Out[2]: '0.5.8'

查看模块定义的标识符

In [3]: dir(cn2an)Out[3]:['An2Cn', 'Cn2An', 'Transform', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '__version__', 'an2cn', 'cn2an', 'transform', 'utils']

模块结构

cn2an模块结构如下:

an2cn.pyan2cn_test.pycn2an.pycn2an_test.pyconfig.yamlperformance.pytransform.pytransform_test.pyutils.py__init__.py

查看模块下的__init__.py文件可知,模块主要对外暴露cn2an、an2cn和transform三个方法。

from .cn2an import Cn2Anfrom .an2cn import An2Cnfrom .transform import Transform__version__ = "0.5.8"cn2an = Cn2An().cn2anan2cn = An2Cn().an2cntransform = Transform().transform__all__ = [  "__version__",  "cn2an",  "an2cn",  "transform"]

使用说明

1. 中文数字转阿拉伯数字

In [4]: help(cn2an.cn2an)Help on method cn2an in module cn2an.cn2an:cn2an(inputs: str = None, mode: str = 'strict') -> int method of cn2an.cn2an.Cn2An instance

查看帮助可知:
cn2an方法有两个参数:inputs和mode,inputs类型为字符串,默认值为空值,mode类型为字符串,默认值为strict,查看源码可知,mode仅支持strict, normal, smart等三个值。
返回值为int类型。
最大支持到10**16,即 千万亿,最小支持到 10**-16。

1 严格模式(strict)

默认为严格模式,严格模式下只有严格符合数字拼写的才可以进行转化。

In [1]: import cn2anIn [2]: output = cn2an.cn2an("一百二十三")In [3]: outputOut[3]: 123In [4]: output = cn2an.cn2an("一二三")---------------------------------------------------------------------------ValueError                Traceback (most recent call last)<ipython-input-4-4c55ae4aa4a9> in <module>----> 1 output = cn2an.cn2an("一二三")c:\users\administrator\appdata\local\programs\python\python37\lib\site-packages\cn2an\cn2an.py in cn2an(self, inputs, mode)   30   31       # 检查输入数据是否有效---> 32       sign, integer_data, decimal_data, is_all_num = self.__check_input_data_is_valid(inputs, mode)   33   34       # smart 下的特殊情况c:\users\administrator\appdata\local\programs\python\python37\lib\site-packages\cn2an\cn2an.py in __check_input_data_is_valid(self, check_data, mode)  155     else:  156       if mode == "strict":--> 157         raise ValueError(f"不符合格式的数据:{integer_data}")  158       elif mode == "normal":  159         # 纯数模式:一二三ValueError: 不符合格式的数据:一二三

2 正常模式(normal)

在正常模式下,可以对 一二三 进行转化

In [5]: output = cn2an.cn2an("一二三",'normal')In [6]: outputOut[6]: 123

3 灵活模式(smart)

在 灵活模式下,可以对混合拼写的 1百23 进行转换,也可以对口语化数字进行转换

In [7]: output = cn2an.cn2an("1百23", "smart")In [8]: outputOut[8]: 123In [9]: output = cn2an.cn2an("一万二", "smart")In [10]: outputOut[10]: 12000

2. 阿拉伯数字转中文数字

In [1]: import cn2anIn [2]: help(cn2an.an2cn)Help on method an2cn in module cn2an.an2cn:an2cn(inputs: Union[str, int, float] = None, mode: str = 'low') -> str method of cn2an.an2cn.An2Cn instance  阿拉伯数字转中文数字  :param inputs: 阿拉伯数字  :param mode: 小写数字,大写数字,人民币大写,直接转化  :return: 中文数字

查看帮助可知:

an2cn方法有两个参数:inputs和mode,inputs类型可以是字符串、整数或者浮点数,默认值为空值,mode类型为字符串,默认值为low,查看源码可知,mode支持low, up, rmb, direct等四个值。
返回值为str类型。

1 小写中文模式(low)

在 low 模式(默认)下,数字转化为小写的中文数字。

In [3]: output = cn2an.an2cn("123")In [4]: outputOut[4]: '一百二十三'In [5]: output = cn2an.an2cn("123", "low")In [6]: outputOut[6]: '一百二十三'

2 大写中文模式(up)

在 up 模式下,数字转化为大写的中文数字。

In [7]: output = cn2an.an2cn("123", "up")In [8]: outputOut[8]: '壹佰贰拾叁'

3 人民币模式(rmb)

在 rmb 模式下,数字转化为人民币专用的描述。

In [9]: output = cn2an.an2cn("123", "rmb")In [10]: outputOut[10]: '壹佰贰拾叁元整'

4 直接模式(direct)

在 direct 模式下,阿拉伯数字直接转换为对应的中文小写数字,小数点转换为汉字点。

In [11]: output = cn2an.an2cn("-1.23", "direct")In [12]: outputOut[12]: '负一点二三'

3. 句子中的数字转换

文档中说明该功能为实验性质,功能尚不稳定。

In [1]: import cn2anIn [2]: help(cn2an.transform)Help on method transform in module cn2an.transform:transform(inputs: str, method: str = 'cn2an') -> str method of cn2an.transform.Transform instance

transform方法具有两个参数:inputs和method,inputs的类型为字符串,method的类型为字符串,默认值为cn2an,查看源码可知method支持cn2an和an2cn这两个值。返回值为字符串。

1 中文数字转阿拉伯数字

在 cn2an 方法(默认)下,可以将句子中的中文数字转换为阿拉伯数字
查看源码可知默认情况下,中文数字转换阿拉伯数字采用的smart模式。

In [3]: output = cn2an.transform("小王捡了一百块钱")In [4]: outputOut[4]: '小王捡了100块钱'In [5]: output = cn2an.transform("整齐的步伐,一二一")In [6]: outputOut[6]: '整齐的步伐,121'

transform方法会根据正则表达式,检测日期、摄氏度、分数、百分比等特殊情况进行转换。

In [7]: output = cn2an.transform("小王的生日是二零零一年三月四日", "cn2an")In [8]: outputOut[8]: '小王的生日是2001年3月4日'In [9]: output = cn2an.transform("抛出去的硬币为正面的概率是二分之一", "cn2an")In [10]: outputOut[10]: '抛出去的硬币为正面的概率是1/2'In [11]: output = cn2an.transform("任务已经完成百分之五十", "cn2an")In [12]: outputOut[12]: '任务已经完成50%'In [13]: output = cn2an.transform("明天最低温度一度", "cn2an")In [14]: outputOut[14]: '明天最低温度1度'In [15]: output = cn2an.transform("明天最低温度一摄氏度", "cn2an")In [16]: outputOut[16]: '明天最低温度1℃'

2 阿拉伯数字转中文数字

在an2cn 方法下,可以将句子中的阿拉伯数字转换为中文数字。
an2cn 模式下,依然会检测日期、摄氏度、分数、百分比等特殊情况进行转换

In [2]: output = cn2an.transform("小王捡了100块钱", "an2cn")In [3]: outputOut[3]: '小王捡了一百块钱'In [4]: output = cn2an.transform("金额为12000元 ", "an2cn")In [5]: outputOut[5]: '金额为一万二千元 'In [6]: output = cn2an.transform("小王的生日是2001年3月4日", "an2cn")In [7]: outputOut[7]: '小王的生日是二零零一年三月四日'In [8]: output = cn2an.transform("抛出去的硬币为正面的概率是1/2", "an2cn")In [9]: outputOut[9]: '抛出去的硬币为正面的概率是二分之一'In [10]: output = cn2an.transform("任务完成了50%", "an2cn")In [11]: outputOut[11]: '任务完成了百分之五十'In [12]: output = cn2an.transform("今天最低气温1摄氏度", "an2cn")In [13]: outputOut[13]: '今天最低气温一摄氏度'

3 问题(大写数字)

根据源码可知transform方法优先考虑日期、分数、百分比、摄氏度等情况判断,不符合这几种情况的都判断为普通数字,因此,大写数字在transform方法中表现并不好!

In [14]: output = cn2an.transform("金额为壹万贰仟元", "cn2an")WARN: 不符合格式的数据:万WARN: 不符合格式的数据:仟In [15]: outputOut[15]: '金额为壹万贰仟元 '

到此这篇关于怎么在Python中利用cn2an将中文数字与阿拉伯数字进行转换的文章就介绍到这了,更多相关怎么在Python中利用cn2an将中文数字与阿拉伯数字进行转换的内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯