作为一个南方人,拼音没学好那似乎已是一件非常正常的事。什么卷舌音、鼻音,也只有在近几年才算是分清了一部分。但尴尬的事情仍在继续,发短信的时候,总有些字拼得不准;说话的时候,总有些字没有卷舌、或忘了加鼻音……痛定思痛,于是有了一个用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给汉字加上带音调的拼音相关推荐

  1. python拼音怎么写-[编程心得]用Python给汉字加上带音调的拼音

    作为一个南方人,拼音没学好那似乎已是一件非常正常的事.什么卷舌音.鼻音,也只有在近几年才算是分清了一部分.但尴尬的事情仍在继续,发短信的时候,总有些字拼得不准:说话的时候,总有些字没有卷舌.或忘了加鼻 ...

  2. python读取传感器数据实时上传_树莓派上利用python读取传感器DHT11的温湿度

    昨晚测试Python操作dht11传感器失败!本来想着利用树莓派,传感器,数据库搭建一个机房环境监控系统,卡在了python读取数据上,怎么读取数据都是有问题.世上无难事,只要肯放弃,决定暂时放弃实验 ...

  3. 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 ...

  4. 如何用python读取文本中指定行的内容

    如何用python读取文本中指定行的内容 搜索资料 我来答 分享 新浪微博 QQ空间 浏览 5284 次 查看全文 http://www.taodudu.cc/news/show-64036.ht ...

  5. python 读取特定一段文本_python提取文本内容 python读取文本每行指定内容

    用"python"怎么提取文件里的指定内容?原来这些年,他痊愈的只是外表,有一种伤,它深入骨髓,在人看不见的地方肆虐. python读取文件内容的方法: 一.最方便的方法是一次性读 ...

  6. 一文教你学会python读取文本及字符串常用操作

    python 读取txt文件 打开支付宝首页搜索'543701491',领取马云的支付宝红包 Python的文本处理是经常碰到的一个问题,Python的txt文件读取中,有三类方法:read().re ...

  7. python读取文件第n行-Python读取文件后n行的代码示例

    这篇文章主要介绍了Python实现读取文件最后n行的方法,涉及Python针对文件的读取.遍历与运算相关操作技巧,需要的朋友可以参考下# -*- coding:utf8-*- import os im ...

  8. python读取文本数据绘制曲线图

    目录 写在前面 代码 reference 写在前面 1.本文内容 python读取文本数据曲线图 2.转载请注明出处: https://blog.csdn.net/qq_41102371/articl ...

  9. python读文件一次读特定行_Python3实现从文件中读取指定行的方法 python读取文本内每行指定内容...

    如何用python读取文本中指定行的内容在这个世界上说不出口的话太多了,你能不能陪小编去,你能不能留下来,你能不能帮帮小编,你对小编很重要,所以你可不可以不要走,到最后哽咽出口的却是,没关系,小编可以 ...

  10. python 中文转带音调的拼音

    python 中文转带音调的拼音 前言 python 中文转带音调的拼音 1. 1.1 安装pinyin模块 1.2 试验 1.3 效果图 1.4 代码实现 前言 今天整理中药材,每个药材上标上带音调 ...

最新文章

  1. docker依赖的技术探索
  2. 机器学习 LR中的参数迭代公式推导——极大似然和梯度下降
  3. 配置spring整合jpa自动生成数据表
  4. 【转】全排列算法非递归实现和递归实现
  5. 三、解决ie缓存问题
  6. php 移植 arm 精简,arm linux 移植 PHP
  7. ElasticSearch 聚合查询
  8. [问题解决]win10误删启动项(BCD)(HP电脑亲测,无需启动盘,并非重装系统)
  9. 如何使用ELK来监控性能
  10. 年终了,看雪给努力又认真的你颁奖!
  11. win10系统文件夹黑色的背景色如何更改为白色?
  12. ColorUI从0开始搭建项目
  13. 工程造价步骤_史上最全造价工作流程,全了
  14. 《查理·芒格:你是一条狗-雾满拦江》
  15. easyexcel 导出数据锁定某个单元格
  16. 33. Pandas计算同比环比指标的3种方法
  17. Linux下的motion detection(最简单的办公室监控系统)
  18. php正则匹配中文和英文字母,PHP正则匹配中文字母数字正则的表达式
  19. android p屏幕使用时间,MIUI迎来第414周更新,新增屏幕使用时间,小米6获Android P更新!...
  20. mongodb被锁定 --repair

热门文章

  1. 五种对称加密算法总结
  2. Linux中设置Java程序开机自动运行
  3. dnf最新地图编号2020_《DNF》2020搬砖地图有哪些
  4. 计算机组装与维护公开课,(最新整理)计算机组装与维护公开课教案
  5. 卸载密码保护的瑞星网络版
  6. snb处理器hd3000显卡专用extra_Intel十代酷睿处理器:移动平台性能有了质飞跃!...
  7. 绘画和照片编辑:Artstudio Pro for mac
  8. 如何批量设置 Word 文档的只读密码?
  9. 获取TrustedInstaller权限(Grant TrustedInstaller Permission)
  10. buuctf misc部分wp