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('\t')
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('\t')
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读取传感器数据实时上传_树莓派上利用python读取传感器DHT11的温湿度
昨晚测试Python操作dht11传感器失败!本来想着利用树莓派,传感器,数据库搭建一个机房环境监控系统,卡在了python读取数据上,怎么读取数据都是有问题.世上无难事,只要肯放弃,决定暂时放弃实验 ...
- python读取多个txt文件数据恢复_带有Pandas的Python 2.7:如何恢复两个数据帧...
嗯,一种实现方法是使用isin(但是您也可以使用merge命令来实现它--我都展示了示例).例如: >>> df1 A B C D 0 a b c d 1 e f g h 2 i j ...
- 如何用python读取文本中指定行的内容
如何用python读取文本中指定行的内容 搜索资料 我来答 分享 新浪微博 QQ空间 浏览 5284 次 查看全文 http://www.taodudu.cc/news/show-64036.ht ...
- python 读取特定一段文本_python提取文本内容 python读取文本每行指定内容
用"python"怎么提取文件里的指定内容?原来这些年,他痊愈的只是外表,有一种伤,它深入骨髓,在人看不见的地方肆虐. python读取文件内容的方法: 一.最方便的方法是一次性读 ...
- 一文教你学会python读取文本及字符串常用操作
python 读取txt文件 打开支付宝首页搜索'543701491',领取马云的支付宝红包 Python的文本处理是经常碰到的一个问题,Python的txt文件读取中,有三类方法:read().re ...
- python读取文件第n行-Python读取文件后n行的代码示例
这篇文章主要介绍了Python实现读取文件最后n行的方法,涉及Python针对文件的读取.遍历与运算相关操作技巧,需要的朋友可以参考下# -*- coding:utf8-*- import os im ...
- python读取文本数据绘制曲线图
目录 写在前面 代码 reference 写在前面 1.本文内容 python读取文本数据曲线图 2.转载请注明出处: https://blog.csdn.net/qq_41102371/articl ...
- python读文件一次读特定行_Python3实现从文件中读取指定行的方法 python读取文本内每行指定内容...
如何用python读取文本中指定行的内容在这个世界上说不出口的话太多了,你能不能陪小编去,你能不能留下来,你能不能帮帮小编,你对小编很重要,所以你可不可以不要走,到最后哽咽出口的却是,没关系,小编可以 ...
- python 中文转带音调的拼音
python 中文转带音调的拼音 前言 python 中文转带音调的拼音 1. 1.1 安装pinyin模块 1.2 试验 1.3 效果图 1.4 代码实现 前言 今天整理中药材,每个药材上标上带音调 ...
最新文章
- docker依赖的技术探索
- 机器学习 LR中的参数迭代公式推导——极大似然和梯度下降
- 配置spring整合jpa自动生成数据表
- 【转】全排列算法非递归实现和递归实现
- 三、解决ie缓存问题
- php 移植 arm 精简,arm linux 移植 PHP
- ElasticSearch 聚合查询
- [问题解决]win10误删启动项(BCD)(HP电脑亲测,无需启动盘,并非重装系统)
- 如何使用ELK来监控性能
- 年终了,看雪给努力又认真的你颁奖!
- win10系统文件夹黑色的背景色如何更改为白色?
- ColorUI从0开始搭建项目
- 工程造价步骤_史上最全造价工作流程,全了
- 《查理·芒格:你是一条狗-雾满拦江》
- easyexcel 导出数据锁定某个单元格
- 33. Pandas计算同比环比指标的3种方法
- Linux下的motion detection(最简单的办公室监控系统)
- php正则匹配中文和英文字母,PHP正则匹配中文字母数字正则的表达式
- android p屏幕使用时间,MIUI迎来第414周更新,新增屏幕使用时间,小米6获Android P更新!...
- mongodb被锁定 --repair
热门文章
- 五种对称加密算法总结
- Linux中设置Java程序开机自动运行
- dnf最新地图编号2020_《DNF》2020搬砖地图有哪些
- 计算机组装与维护公开课,(最新整理)计算机组装与维护公开课教案
- 卸载密码保护的瑞星网络版
- snb处理器hd3000显卡专用extra_Intel十代酷睿处理器:移动平台性能有了质飞跃!...
- 绘画和照片编辑:Artstudio Pro for mac
- 如何批量设置 Word 文档的只读密码?
- 获取TrustedInstaller权限(Grant TrustedInstaller Permission)
- buuctf misc部分wp