Python实现拼音转换


Posted in Python onJune 07, 2021

什么是拼音转换

在我们学习语言之前,我们一般会学习拼音来认识汉字,并学会如何读汉字。所以,拼音在对于我们语言的重要性不言而喻。

而拼音转换指的是将汉字转为拼音的过程。但是,我们中文博大精深,一般来说某个字并不仅仅只有一个读音,比如“翟”,它作为姓氏可以读作zhái,作为其他可读作di。这是就需要结合上下文,或者说结合与其组合的词汇进行转换拼音。不仅如此,拼音还有音调,比如一二三四声表示的意义有时候也是不一样的。

本篇博文将介绍字符串到拼音的转换。

拼音转换

首先,HanLP库提供的拼音转换为本位于data/dictionary/pinyin/pinyin.txt文件中。每行分别由=隔开汉字与拼音。其中多音字的拼音数量多余汉字数量。在实际的转换过程中,默认读取多音字的第一个拼音,除非匹配到更长的词语。

此外,HanLP库还支持声母,韵母,音调,音标以及输入法首字母与收声母功能。当然,也能给前文的繁体字转换为拼音。

下面,我们来看一段代码示例:

if __name__ == "__main__":
    text = "重载不是重量"
    pinyin_list = HanLP.convertToPinyinList(text)
    print(pinyin_list)

运行之后,控制台输出如下:

Python实现拼音转换

可以看到,基本上每个字的拼音都输出了。如果程序判断不出来多音字是哪个声调,会输出其所有的声调。比如这里的体输出了3声和1声,重输出了3声与2声。

在python中,我们通过HanLP.convertToPinyinList进行汉字与拼音的转换。

输出音调

鉴于我们已经知道了如何转换汉字到拼音,那么我们现在需要实现的是单独获取每个汉字的音调,不需要声调。现在该如何去实现呢?不妨先来看看代码:

if __name__ == "__main__":
    Pinyin = JClass("com.hankcs.hanlp.dictionary.py.Pinyin")
    text = "重载不是体重"
    pinyin_list = HanLP.convertToPinyinList(text)
    print(pinyin_list)
    print("输出音调")
    for pinyin in pinyin_list:
        print("%s," % pinyin.getPinyinWithToneMark(), end=" ")

如上面代码所示,我们获取了Java的HanLP库中的Pinyin类,这个类可以帮我们处理很多的拼音相关的问题,比如这里的获取音调。

运行之后,效果如下:

Python实现拼音转换

需要注意的是,前面博文已经说过了,通过python进行HanLP库使用时,尽量调用Java类进行处理,因为Java类的处理时间比python快很多。这里我们通过Pinyin类的getPinyinWithToneMark()方法获取声调。

输出声调

既然可以只输出音调,那么肯定也可以单独输出声调。具体代码如下:

if __name__ == "__main__":
    Pinyin = JClass("com.hankcs.hanlp.dictionary.py.Pinyin")
    text = "重载不是体重"
    pinyin_list = HanLP.convertToPinyinList(text)
    print(pinyin_list)
    print("输出声调")
    for pinyin in pinyin_list:
        print("%s," % pinyin.getTone(), end=" ")

运行之后,效果如下:

Python实现拼音转换

这里我们通过Pinyin类的getTone()方法获取声调。

输出声母

同样的,我们还可以输出声母。代码如下:

if __name__ == "__main__":
    Pinyin = JClass("com.hankcs.hanlp.dictionary.py.Pinyin")
    text = "重载不是体重"
    pinyin_list = HanLP.convertToPinyinList(text)
    print(pinyin_list)
    print("\r\n输出声母")
    for pinyin in pinyin_list:
        print("%s," % pinyin.getShengmu(), end=" ")

运行之后,效果如下:

Python实现拼音转换

这里我们用getShengmu()方法输出声母,方法名就是中文意思,很好理解。

输出韵母

接着,我们再来输出韵母。代码如下:

if __name__ == "__main__":
    Pinyin = JClass("com.hankcs.hanlp.dictionary.py.Pinyin")
    text = "重载不是体重"
    pinyin_list = HanLP.convertToPinyinList(text)
    print(pinyin_list)
    print("\r\n输出韵母")
    for pinyin in pinyin_list:
        print("%s," % pinyin.getYunmu(), end=" ")

运行之后,效果如下:

Python实现拼音转换

这里我们用getYunmu()方法输出韵母,方法名就是中文意思,很好理解。

处理数字拼音

除此之外,上面因为都是汉字,所以大家肯定都很好处理成拼音。但是现在很多时候,中文文本里面并不仅仅只有汉字,也有数字和英文。但是拼音是汉字独有的,那怎么办呢?

我们先来看看按上面直接处理带数字与英文时,效果怎么样。代码如下所示:

if __name__ == "__main__":
    Pinyin = JClass("com.hankcs.hanlp.dictionary.py.Pinyin")
    text = "我们到2035年就会称为世界第一"
    pinyin_list = HanLP.convertToPinyinList(text)
    print(pinyin_list)

运行之后,效果如下:

Python实现拼音转换

可以看到数字都直接替换为none5,也就是缺失的意义。拼音文件找不到与其匹配的汉语拼音。

而我们实际在处理中文文档时,都是保留数字与英文的并不直接翻译。其实这里我们想保留其数字的话,HanLP.convertToPinyinString()方法就能实现,我们来看看这个方法的完整定义:

convertToPinyinString(转换为拼音的字符串文本,输出间隔符,布尔类型)

相信看了上面方法的读者应该很快就知道了,第3个布尔类型就是转换数字与保留数字的关键参数,这里我们再来变换代码:

if __name__ == "__main__":
    Pinyin = JClass("com.hankcs.hanlp.dictionary.py.Pinyin")
    text = "我们到2035年就会称为世界第一"
    pinyin_list = HanLP.convertToPinyinString(text," ",False)
    print(pinyin_list)

运行之后,我们的英文与数字就会原封不动的保留下来。效果如下:

Python实现拼音转换

到此这篇关于Python实现拼音转换的文章就介绍到这了,更多相关Python 拼音转换内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python os模块中的isfile()和isdir()函数均返回false问题解决方法
Feb 04 Python
Python 高级专用类方法的实例详解
Sep 11 Python
用 Python 连接 MySQL 的几种方式详解
Apr 04 Python
儿童编程python入门
May 08 Python
Python3.5装饰器典型案例分析
Apr 30 Python
python 返回一个列表中第二大的数方法
Jul 09 Python
Pytoch之torchvision.transforms图像变换实例
Dec 30 Python
flask框架自定义url转换器操作详解
Jan 25 Python
Python3监控疫情的完整代码
Feb 20 Python
Keras SGD 随机梯度下降优化器参数设置方式
Jun 19 Python
Python查找算法的实现 (线性、二分,分块、插值查找算法)
Apr 24 Python
Python开发五子棋小游戏
May 02 Python
Python实现简繁体转换
在Python中如何使用yield
Jun 07 #Python
python 爬取天气网卫星图片
Python实现天气查询软件
Python字典和列表性能之间的比较
使用pycharm运行flask应用程序的详细教程
只用Python就可以制作的简单词云
You might like
PHP中使用smarty生成静态文件的例子
2014/04/24 PHP
如何在centos8自定义目录安装php7.3
2019/11/28 PHP
对google个性主页的拖拽效果的js的完整注释[转]
2007/04/10 Javascript
将HTMLCollection/NodeList/伪数组转换成数组的实现方法
2011/06/20 Javascript
window.location不跳转的问题解决方法
2014/04/17 Javascript
IE6-IE9中tbody的innerHTML不能赋值的解决方法
2014/09/26 Javascript
浅析jQuery EasyUI中的tree使用指南
2014/12/18 Javascript
jQuery和AngularJS的区别浅析
2015/01/29 Javascript
JS当前页面登录注册框,固定DIV,底层阴影的实例代码
2016/09/29 Javascript
jQuery实现点击任意位置弹出层外关闭弹出层效果
2016/10/19 Javascript
使用json来定义函数,在里面可以定义多个函数的实现方法
2016/10/28 Javascript
详解vue事件对象、冒泡、阻止默认行为
2017/03/20 Javascript
node中modules.exports与exports导出的区别
2018/06/08 Javascript
JavaScript创建对象的常用方式总结
2018/08/10 Javascript
vuex2中使用mapGetters/mapActions报错的解决方法
2018/10/20 Javascript
浅谈关于JS下大批量异步任务按顺序执行解决方案一点思考
2019/01/08 Javascript
express.js中间件说明详解
2019/03/19 Javascript
js实现select下拉框选择
2020/01/11 Javascript
微信小程序自定义纯净模态框(弹出框)的实例代码
2020/03/09 Javascript
js+canvas实现画板功能
2020/09/13 Javascript
[58:46]OG vs NAVI 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
python查看zip包中文件及大小的方法
2015/07/09 Python
python函数形参用法实例分析
2015/08/04 Python
python获取微信企业号打卡数据并生成windows计划任务
2019/04/30 Python
pyinstaller打包单个exe后无法执行错误的解决方法
2019/06/21 Python
html5的自定义data-*属性与jquery的data()方法的使用
2014/07/02 HTML / CSS
Html5基于canvas实现电子签名并生成PDF文档
2020/12/07 HTML / CSS
美国杂志订阅折扣与优惠网站:Magazines.com
2016/08/31 全球购物
Java中各种基本数据类型的默认值都是什么
2016/12/22 面试题
小学生成长感言
2014/01/30 职场文书
国际经济与贸易专业求职信
2014/07/10 职场文书
大型主题婚礼活动策划方案
2014/09/15 职场文书
2015年三八妇女节活动总结
2015/02/06 职场文书
2016抗战胜利71周年红领巾广播稿
2015/12/18 职场文书
医德医风学习心得体会
2016/01/25 职场文书
使用vuex-persistedstate本地存储vuex
2022/04/29 Vue.js