基于Python第三方插件实现西游记章节标注汉语拼音的方法


Posted in Python onMay 22, 2020

      起因很单纯,就是给我1年级小豆包的女儿标注三国和西游章节的汉语拼音,我女儿每天都朗读 ,结果有很多字不认识,我爱人居然让我给标记不认识的完了手动注音......我勒个去......身为程序员的我怎么能忘记用程序实现呢,特别是咱也会点Python万能语言。哈哈!列举一下使用的技术。

语言:Python3.7

插件:pypinyin0.37.0  和 openpyxl 3.0.3

开发工具:pycharm 社区版

使用openpyxl操作execl的教程多的你无法想。

使用pypinyin将汉字转换成汉语拼音很简单,网络上API一大推。而且简单的不能再简单了,就一句话就实现了。分享点代码:

# 带声调的(默认)
def yinjie(word):
  sentens = "".join(word.split())
  print(sentens)
  s = ''
  # heteronym=True开启多音字
  for i in pypinyin.pinyin(word, heteronym=False):
    s = s + ''.join(i) + " "
  return s

这个就足够汉字转拼音了,不过我要求数据结构就没使用这个方法。我把数据结构说一下。

三层二维数组(这个非常关键):

第一层:单个汉字和汉语拼音构成。

['dì', '第'], ['yī', '一'], ['bǎi', '百'], ['huí', '回']

第二层:按照标题空格分词。

 [['dì', '第'], ['yī', '一'], ['bǎi', '百'], ['huí', '回']], [['jìng', '径'], ['huí', '回'], ['dōng', '东'], ['tǔ', '土']], [['wǔ', '五'], ['shèng', '圣'], ['chéng', '成'], ['zhēn', '真']]

第三层:所有标题的集合。

就是第二层的合计,西游记就是100个章节标题集合。

最开始的成果物。这个不好对应也很难阅读。

基于Python第三方插件实现西游记章节标注汉语拼音的方法

我爱人给了我一个参考事例。如下图:

基于Python第三方插件实现西游记章节标注汉语拼音的方法

咱也不能示弱,咱也是程序员。咱也会万能的Python。

最开始的目标是将文字写入到word中,所以就用了Python-docx。汉语拼音长短不一这个很难对齐。想计算汉语拼音的长度进而计算汉字的位置......这个算法得多复杂,一个排版算法...我不是大神......

这个玩意其实和数学应用题一样,想到了其实一点也不难,就是弄个表格完了让汉语拼音和汉字居中不就得了。想到这个以后其实一点都不难了。使用Python-docx搞了好久有个问题就是竖版的word放不下汉字和汉语拼音。头疼啊。效果如下图:

基于Python第三方插件实现西游记章节标注汉语拼音的方法

唉!难道是思路不对。。。

不用Python-docx了。使用openpyxl来操作execl。第一次成果物。看起来还可以。

基于Python第三方插件实现西游记章节标注汉语拼音的方法

最终的成果物。

基于Python第三方插件实现西游记章节标注汉语拼音的方法

转成PDF的成果物:

基于Python第三方插件实现西游记章节标注汉语拼音的方法

继续鼓捣,最终搞定。。。一共花费了近6个小时,时间有点多。其实主要是数据结构和排版耽误时间,在有就是语法,作为Net出身而后转Java的人来说这个…&...就是并且的意思。然而在Python里面他不就是并且是and啊啊啊啊啊!因为这个我改了N多代码调试了好几次,唉深度无语。真是基础不牢地动山摇啊。别废话了上代码:

import pypinyin
from openpyxl import Workbook
from openpyxl.drawing.text import Font
from openpyxl.styles import Font, colors, Alignment
from pulgin.Tools import Tools
class HanZhiAddPinYin:
  def __init__(self):
    pass
  def signWord(self,word):
    pinyicontent = pypinyin.pinyin(word, heteronym=False)
    word_pinyin = [pinyicontent[0][0], word]
    return word_pinyin
  def sentences(self,keyWords):
    listsentense = []
    for duanyu in keyWords.split():
      print(duanyu)
      duanyu_list = []
      for word in duanyu:
        duanyu_list.append(self.signWord(word))
      listsentense.append(duanyu_list)
    print(
      listsentense
    )
    return listsentense
  def articles(self,txt_file_path):
    article = []
    encoding = Tools.get_file_encoding(txt_file_path)
    f = open(txt_file_path, "r", encoding=encoding, errors='ignore') # 返回一个文件对象
    line = f.readline().strip() # 调用文件的 readline()方法
    index = 1
    while line:
      article.append(self.sentences(line))
      line = f.readline()
      index = index + 1
    f.close()
    return article
  def builder_execl(self,word_title, save_path, article):
    """
    构建execl文件
    :param word_title: sheet页面的名词
    :param save_path: execl保存路径
    :param article: 文章内容集合
    :return:
    """
    wb = Workbook()
    ws = wb.active
    ws.title = word_title
    ws.sheet_properties.tabColor = "1072BA" # 设置背景
    xl_sheet = wb.get_sheet_by_name(word_title)
    execl_cell_width = 4.6
    for sentences in article:
      column_index = 1
      # sentences 2行数据
      # 获取行数
      pinyin_row = xl_sheet.max_row + 1 # 拼音所在的行
      hanzi_row = pinyin_row + 1 # 汉字所在的行
      sentences_index = 0
      for duanyu in sentences: # ['dì', '第'], ['yī', '一'], ['huí', '回']
        for sign_word in duanyu: # ['dì', '第']
          # region 设置样式
          # 设置样式
          execl_cell_font = Font(name='华文楷体', size=12, italic=False, color=colors.BLACK, bold=True)
          execl_pinyin_row = xl_sheet.cell(row=pinyin_row, column=column_index)
          execl_hanzi_row = xl_sheet.cell(row=hanzi_row, column=column_index)
          execl_pinyin_row.alignment = Alignment(horizontal='center', vertical='center')
          execl_hanzi_row.alignment = Alignment(horizontal='center', vertical='center')
          execl_pinyin_row.font = execl_cell_font
          execl_hanzi_row.font = execl_cell_font
          xl_sheet.column_dimensions['A'].width = 3
          xl_sheet.column_dimensions['B'].width = 3
          xl_sheet.column_dimensions['C'].width = 3
          xl_sheet.column_dimensions['D'].width = execl_cell_width
          xl_sheet.column_dimensions['E'].width = execl_cell_width
          xl_sheet.column_dimensions['F'].width = execl_cell_width
          xl_sheet.column_dimensions['H'].width = execl_cell_width
          xl_sheet.column_dimensions['I'].width = execl_cell_width
          xl_sheet.column_dimensions['G'].width = execl_cell_width
          xl_sheet.column_dimensions['J'].width = execl_cell_width
          xl_sheet.column_dimensions['K'].width = execl_cell_width
          xl_sheet.column_dimensions['L'].width = execl_cell_width
          xl_sheet.column_dimensions['M'].width = execl_cell_width
          xl_sheet.column_dimensions['N'].width = execl_cell_width
          xl_sheet.column_dimensions['O'].width = execl_cell_width
          xl_sheet.column_dimensions['P'].width = execl_cell_width
          xl_sheet.column_dimensions['Q'].width = execl_cell_width
          xl_sheet.column_dimensions['R'].width = execl_cell_width
          xl_sheet.column_dimensions['S'].width = execl_cell_width
          xl_sheet.column_dimensions['T'].width = execl_cell_width
          xl_sheet.column_dimensions['U'].width = execl_cell_width
          xl_sheet.column_dimensions['V'].width = execl_cell_width
          xl_sheet.column_dimensions['W'].width = execl_cell_width
          # endregion
          xl_sheet.cell(row=pinyin_row, column=column_index, value=sign_word[0])
          xl_sheet.cell(row=hanzi_row, column=column_index, value=sign_word[1]) # 0 第一百回 1 径回东土 2 五圣成真
          # print(sentences_index)
          # print(len(duanyu) + len(sentences[0]))
          # print(column_index)
          if sentences_index == 1 and len(duanyu) + len(sentences[0]) == column_index:#坑人的and
            xl_sheet.cell(row=pinyin_row, column=column_index + 1, value=",")
            xl_sheet.cell(row=hanzi_row, column=column_index + 1, value=",")
            column_index = column_index + 1 # 遇到断句多增加一列向后
          column_index = column_index + 1 # 列向后
        sentences_index = sentences_index + 1 # 三个短语计数器
    wb.save(save_path)

总结

到此这篇关于基于Python第三方插件实现西游记章节标注汉语拼音的方法的文章就介绍到这了,更多相关python第三方插件标拼音内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python生成随机数组的方法小结
Apr 15 Python
Python异常对代码运行性能的影响实例解析
Feb 08 Python
python如何压缩新文件到已有ZIP文件
Mar 14 Python
用TensorFlow实现多类支持向量机的示例代码
Apr 28 Python
pandas把所有大于0的数设置为1的方法
Jan 26 Python
解决在pycharm运行代码,调用CMD窗口的命令运行显示乱码问题
Aug 23 Python
python 通过视频url获取视频的宽高方式
Dec 10 Python
django 数据库 get_or_create函数返回值是tuple的问题
May 15 Python
Python使用Paramiko控制liunx第三方库
May 20 Python
Pycharm中如何关掉python console
Oct 27 Python
发工资啦!教你用Python实现邮箱自动群发工资条
May 10 Python
使用numpy nonzero 找出非0元素
May 14 Python
Tensorflow tf.tile()的用法实例分析
May 22 #Python
python代码实现将列表中重复元素之间的内容全部滤除
May 22 #Python
Tensorflow实现将标签变为one-hot形式
May 22 #Python
Python selenium爬取微博数据代码实例
May 22 #Python
python实现文法左递归的消除方法
May 22 #Python
使用Django搭建网站实现商品分页功能
May 22 #Python
Tensorflow卷积实现原理+手写python代码实现卷积教程
May 22 #Python
You might like
鸡肋的PHP单例模式应用详解
2013/06/03 PHP
PHP变量内存分配问题记录整理
2013/11/27 PHP
php抽象类使用要点与注意事项分析
2015/02/09 PHP
php+mysql实现的二级联动菜单效果详解
2016/05/10 PHP
ThinkPHP实现分页功能
2017/04/28 PHP
Yii2框架实现登陆添加验证码功能示例
2018/07/12 PHP
关于jquery ajax 调用带参数的webservice返回XML数据一个小细节
2012/07/31 Javascript
jquery实现的可隐藏重现的靠边悬浮层实例代码
2013/05/27 Javascript
js实现倒计时时钟的示例代码
2013/12/17 Javascript
javascript数据类型示例分享
2015/01/19 Javascript
js实现鼠标经过时图片滚动停止的方法
2015/02/16 Javascript
jQuery实现鼠标双击Table单元格变成文本框及输入内容后更新到数据库的方法
2015/11/25 Javascript
JavaScript测试工具之Karma-Jasmine的安装和使用详解
2015/12/03 Javascript
使用getBoundingClientRect方法实现简洁的sticky组件的方法
2016/03/22 Javascript
js仿小米手机上下滑动效果
2017/02/05 Javascript
JS如何判断浏览器类型和详细区分IE各版本浏览器
2017/03/04 Javascript
Bootstrap里的文件分别代表什么意思及其引用方法
2017/05/01 Javascript
在页面中引入js的两种方法(推荐)
2017/08/29 Javascript
JavaScript使用indexOf()实现数组去重的方法分析
2018/09/04 Javascript
NodeJS使用Range请求实现下载功能的方法示例
2018/10/12 NodeJs
如何在vue项目中嵌入jsp页面的方法(2种)
2020/02/06 Javascript
JS检测浏览器开发者工具是否打开的方法详解
2020/10/02 Javascript
Scrapy的简单使用教程
2017/10/24 Python
Python元组及文件核心对象类型详解
2018/02/11 Python
python基础教程项目三之万能的XML
2018/04/02 Python
python中def是做什么的
2020/06/10 Python
提供世界各地便宜的机票:Sky-tours
2016/07/21 全球购物
英国网上电器商店:Electricshop
2020/03/15 全球购物
Tuckernuck官网:经典的美国品质服装、鞋子和配饰
2021/01/11 全球购物
微博营销计划书
2014/01/10 职场文书
2014年党课学习材料
2014/05/11 职场文书
党员承诺书格式
2014/05/21 职场文书
个人委托书范本汇总
2014/10/01 职场文书
2015年见习期工作总结
2014/12/12 职场文书
2019优秀干部竞聘演讲稿范文!
2019/07/02 职场文书
java调用Restful接口的三种方法
2021/08/23 Java/Android