python拼音怎么写-[编程心得]用Python给汉字加上带音调的拼音
作为一个南方人,拼音没学好那似乎已是一件非常正常的事。什么卷舌音、鼻音,也只有在近几年才算是分清了一部分。但尴尬的事情仍在继续,发短信的时候,总有些字拼得不准;说话的时候,总有些字没有卷舌、或忘了加鼻音……痛定思痛,于是有了一个用SuperMemo来强化拼音的训练方案。
要实现这个方案,得具备两个条件,一是选定汉字范围——舍得选的是一级国标汉字,共计3700余个;二是利用程序将这些汉字转化为拼音,要求拼音带上音调,这个就需要对转换精灵进行适度的改造。
舍得以HzqGhost(小强)童鞋的代码为蓝本,进行了如下的改造: 编码部分采用这份码表:下载地址
源代码为python2.x的,改造为python 3.x;
在给韵母添加声调的部分代码,原代码有个别地方出现错误,在我家傻妹的提醒下,舍得修复了这一错误;
下面是相关的部分代码,分段描述:
1、读入码表文件,转成dict: fileName = './Mandarin.dat'
self.dict = {}
for line in open(fileName):
k, v = line.split(' ')
self.dict[k] = v
2、然后对传入的中文字符串进行处理:
self.yunmu = ( 'ang','eng','ing','ong','an','en','in','un','ai','ei','ao','ou','iu','er','en','a','o','e','i','u', 'v')
self.sheng = {'a':'ā á ǎ à','o':'ō ó ǒ ò','e':'ē é ě è','i':'ī í ǐ ì','u':'ū ú ǔ ù', 'v':'ǖ ǘ ǚ ǜ'}
result = []
for char in chars:#chars为传入的中文字符串
key = "%X" % ord(char)#将汉字转为utf16编码,“码表”文件中用的是这个编码
try:
py = self.dict[key].split("")[0].strip().lower()#只取查到的拼音第一个值(当有多音字的时候),同时将结果转为小写
for ym in self.yunmu:
if re.search(ym, py):#匹配
py = getPy(py, ym)
break#只取第一个结果
result.append(py)
except:
result.append(char)
return "".join(result)
原来的self.yunmu设置不合理,在碰到'ui','iu','ie','ue'四个韵母时,音调会标在第一个字母上,舍得在元组中去除了'ui','ie','ue'这三个值,这样在匹配时根据a,o,e,i,u的顺序,这三个韵母的音调才会落在第二个字母上。而对于'iu'这个韵母,则需在下面的getPy里作一个特殊的处理:
3、给匹配到的韵母标上音调:
def getPy(py, ym):
t = py[-1:].encode('ascii','ignore')#"码表’中返回的拼音字符串最后一位是数字,表示音调值
t2 = "%d" % ord(t)
t3 = (int(t2) - 48)%4 -1
py2 = py[:-len(ym)-1]#声母
if ym == "iu":#如果韵母是iu
letter = self.sheng[ym[1]].split(' ')[t3]#音调字母要标在u上
ym = ym[0] + letter
else:
letter = self.sheng[ym[0]].split(' ')[t3]#其它情况,音调标在第一个字母上
ym = letter + ym[1:]
py = py2 + ym
return py
最终完整的代码如下:
def cnCode(self, chars):
def getPy(py, ym):
t = py[-1:].encode('ascii','ignore')#"码表’中返回的拼音字符串最后一位是数字,表示音调值
t2 = "%d" % ord(t)
t3 = (int(t2) - 48)%4 -1
py2 = py[:-len(ym)-1]#声母
if ym == "iu":#如果韵母是iu
letter = self.sheng[ym[1]].split(' ')[t3]#音调字母要标在u上
ym = ym[0] + letter
else:
letter = self.sheng[ym[0]].split(' ')[t3]#其它情况,音调标在第一个字母上
ym = letter + ym[1:]
py = py2 + ym
return py
fileName = './Mandarin.dat'
self.dict = {}
for line in open(fileName):
k, v = line.split(' ')
self.dict[k] = v
self.yunmu = ( 'ang','eng','ing','ong','an','en','in','un','ai','ei','ao','ou','iu','er','en','a','o','e','i','u', 'v')
self.sheng = {'a':'ā á ǎ à','o':'ō ó ǒ ò','e':'ē é ě è','i':'ī í ǐ ì','u':'ū ú ǔ ù', 'v':'ǖ ǘ ǚ ǜ'}
result = []
for char in chars:#chars为传入的中文字符串
key = "%X" % ord(char)#将汉字转为utf16编码,“码表”文件中用的是这个编码
try:
py = self.dict[key].split("")[0].strip().lower()#只取查到的拼音第一个值(当有多音字的时候),同时将结果转为小写
for ym in self.yunmu:
if re.search(ym, py):#匹配
py = getPy(py, ym)
break#只取第一个结果
result.append(py)
except:
result.append(char)
return "".join(result)
调用的时候,只要这样就可以了:
chars = "舍得英语魔法学苑"
print(self.cnCode(chars))
返回的结果如下图所示:
不过舍得通常会读取当前文本,然后按换行符分割,再逐个传入,得到拼音,最后拼成TAB文本,这样就可以利用转换精灵制作成课程了。这里边的细节就不再一一叙述了。
附上最终完成的课程:
本文版权归舍得英语魔法学苑所有,欢迎转载,转载请注明作者和出处。谢谢!
作者:舍得首发:舍得@学习力博客
python拼音怎么写-[编程心得]用Python给汉字加上带音调的拼音相关推荐
- python 中文转带音调的拼音
python 中文转带音调的拼音 前言 python 中文转带音调的拼音 1. 1.1 安装pinyin模块 1.2 试验 1.3 效果图 1.4 代码实现 前言 今天整理中药材,每个药材上标上带音调 ...
- python在哪里写编程_Python编程入门介绍
编程-就是让计算机代为解决某个问题,对某个计算体系规定一定的计算方式,使计算体系按照计算方式运行,并最重得到结果的过程. 编程的语言有很多种,比如Python,JAVA,JavaScript,c++, ...
- python大神-Python代码怎么写,听听顶尖Python大神的建议
了解K神( kennethreitz)是从它牛逼的requests库开始,号称最顶尖的Python程序员之一.大神有很多作品,而且还有一个非常励志的传奇故事,从一个胖胖的不修边幅的码农,励志减肥而变成 ...
- python qt gui快速编程_《PYTHON QT GUI快速编程 PYQT编程指南》源码
文件名大小更新时间 <PYTHON QT GUI快速编程 PYQT编程指南>源码\chap01\answers.txt9882007-06-27 <PYTHON QT GUI快速编程 ...
- python拼音怎么写-【学习】python 汉语转拼音
一.pypinyin 概述 Python 中提供了汉字转拼音的库,名字叫做 PyPinyin,可以用于汉字注音.排序.检索等等场合,是基于 hotto/pinyin 这个库开发的,一些站点链接如下: ...
- python编程心得体会-python核心编程____学习心得____part1
字符编码的发展; 二进制: -->ASCII :只能存英文和拉丁字符,一个字符占一个字节,8位. ----->gb2312: 只能存6700多个中文,1980 ------------&g ...
- 学python怎么赚钱-有编程基础学python怎么赚点小钱?
800左右算是要求很低了,光一项爬虫,做好开发抓一些新闻证券的信息基本上月入就3-5k了.渠道自己可以去淘宝上找,或者让是猪八戒找一些兼职.具体的下文说,这是之前回答过的一个问题:python精通后能 ...
- python数字计算公式_Python编程5:Python中的数字和数学运算
#少儿编程# 小朋友们应该都玩过计算器,用计算器做算术,不论数字多大,它都能迅速的给出答案.而计算机不仅计算的更快,还能做更复杂的计算.计算机非常善于计算,它每秒能执行10亿次的计算. Python中 ...
- python剔除数字 青少年编程电子学会python编程等级考试二级真题解析2020年12月
目录 python剔除数字 一.题目要求 1.编程实现 2.输入输出 3.评分标准
最新文章
- MIT联合波士顿咨询:全球21个行业,对话3000名高管,AI如何重塑商业形态? | 雷报
- Ex 5_33 实现一个关于公式长度(其中所有文字总的出现次数)为线性时间的Horn公式可满足性问题_第十次作业...
- 大厂动态规划面试汇总,提升内功
- iOS 动画系列之动画解释
- 28、shareSDK分享以及 QQ应用平台申请遇到的问题
- 解决2次查询User的问题(ThreadLocal)
- 16个简单实用的.htaccess技巧
- POJ1321(深搜)
- 浅析Thinkphp框架中运用phprpc扩展模式
- 【“elabsim”高频电子线路实验】得到输出峰峰值幅度为200mV、频率为10.7MHz正弦波信号
- 什么是CMMI能力成熟度模型?企业为什么要做?
- 2019年第十二届中国大学生计算机设计大赛总结
- 伺服电机抖动原因分析
- java jdom2_JDOM 生成和解析XML(二)
- PHP字符串函数strrchr(查找指定字符在字符串中的最后一次出现)
- iptables和防火墙_iptables的防火墙正常运行时间和安全性
- 猜数字游戏(c语言实现)
- UNIAPP nvue 地图 markers 不显示
- 企业上云,安全合规如何进阶 ——一文拆解亚马逊云科技云安全理念与实践
- 炒鸡福利:买云服务送智能摄像头
热门文章
- 初学5之坦克要求(做出坦克被子弹击中时的爆炸效果)
- 多可文档管理软件权限说明(4)——权限累加规则
- python 打印乘法表各种形式_Python使用while循环花式打印乘法表
- Qt::Key键盘按键说明
- 鲲鹏Arm64 openEuler 虚拟机学习
- 自动控制原理02 数学模型
- python自动产品分类_商品分类(一堆多)
- android手机设置固定dns,手机dns怎么设置 简单几步就搞定
- 盘点2011年的网络流行语
- 反距离加权matlab算法,ImageWarping变形算法研究---反距离加权插值(IDW)