炼数成金 门户 大数据 Python 查看内容

改造Python中文拼音扩展库pypinyin补充自定义声母全过程

2017-4-14 18:06| 发布者: 炼数成金_小数| 查看: 11397| 评论: 0|原作者: 董付国,应根球|来自: Python小屋

摘要: 问题要从昨天说起,应根球老师发给我一个代码问可能是啥原因,如下:该函数的第二个参数3含义为只保留声母,为啥“应”的声母丢了呢?因为当时正是课间休息,一会儿还要上课,没时间多想,感觉或许是lazy_pinyin()函 ...

Python Java Hadoop 培训 程序设计 函数

问题要从昨天说起,应根球老师发给我一个代码问可能是啥原因,如下:

该函数的第二个参数3含义为只保留声母,为啥“应”的声母丢了呢?
因为当时正是课间休息,一会儿还要上课,没时间多想,感觉或许是lazy_pinyin()函数的问题,毕竟是个懒惰的函数嘛,于是告诉应老师试试其他函数。
今天早上来教研室以后,突然想起这个问题,于是我也试了试,发现存在这个问题的不仅仅是这个懒惰的函数,不懒惰的函数也存在相同的问题。例如:

于是,我感觉应该是这个库的设计有问题,但是问题在哪里呢?这肯定需要阅读源代码来确定并尝试解决,于是我打开这个库的安装文件夹,如图:

初步分析,phrases_dict.py和pinyin_dict.py这两个文件比较大,看名字应该是一些字典的定义,这也是标准的做法。其他文件暂时不知道具体用途,那么就从入口文件__init__.py开始吧,内容如下:

很容易发现,在导入pypinyin时,自动从constants.py文件中导入了很多常量(吃瓜群众可能要问了:你咋知道是常量?这个嘛,一般惯例就是这样的,在Python编码规范中绝大部分常量都是全部字母大写的。)那么接下来就看看这个文件里有什么吧。如图:

后面的观众请大声告诉我,你看到了什么?回答正确,声母表,并且这个声母表里真的没有“y”,那么很自然会想到,我们可不可以自己增加一个呢,要是在这里增加了会不会起作用呢?可以明确地说,答案是肯定的,那就动手吧,修改后如下:

好了,保存一下,赶紧去试试好用不好用吧。接上面的代码继续执行,如图:

看到这个图大家开心了,心里肯定在想“董老师,这下演砸了吧,哈哈哈哈,看你怎么收场?”
深吸一口气,别紧张,回想上面的完整过程,似乎完全没有问题,那么问题在哪里呢?那就是:重新导入模块或重启shell,当然,在程序中是不会出现这个问题的,每次运行时都会重新导入模块。

最后做个小广告:热烈庆祝拙作《Python可以这样学》(董付国著,清华大学出版社,2017.2)出版第3个月完成了第2次印刷,《Python程序设计(第2版)》(董付国编著,清华大学出版社,2016.6)出版第9个月完成了第3次印刷,《Python程序设计基础》(董付国编著,清华大学出版社,2015.8)出版第18个月马上要进行第4次印刷。

欢迎加入本站公开兴趣群
软件开发技术群
兴趣范围包括:Java,C/C++,Python,PHP,Ruby,shell等各种语言开发经验交流,各种框架使用,外包项目机会,学习、培训、跳槽等交流
QQ群:26931708

Hadoop源代码研究群
兴趣范围包括:Hadoop源代码解读,改进,优化,分布式系统场景定制,与Hadoop有关的各种开源项目,总之就是玩转Hadoop
QQ群:288410967 

鲜花

握手

雷人

路过

鸡蛋

相关阅读

最新评论

热门频道

  • 大数据
  • 商业智能
  • 量化投资
  • 科学探索
  • 创业

即将开课

 

GMT+8, 2018-5-25 12:53 , Processed in 0.173385 second(s), 25 queries .