基于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获取远程文件大小的函数代码分享
May 13 Python
python图像处理之反色实现方法
May 30 Python
python实现爬虫统计学校BBS男女比例之多线程爬虫(二)
Dec 31 Python
python executemany的使用及注意事项
Mar 13 Python
python获取指定时间差的时间实例详解
Apr 11 Python
python如何读写json数据
Mar 21 Python
详解Django中类视图使用装饰器的方式
Aug 12 Python
Python3.5文件读与写操作经典实例详解
May 01 Python
用python爬取历史天气数据的方法示例
Dec 30 Python
使用Python爬取弹出窗口信息的实例
Mar 14 Python
Python-openpyxl表格读取写入的案例详解
Nov 02 Python
PyTorch中的torch.cat简单介绍
Mar 17 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的Reflection反射机制
2014/08/05 PHP
laravel 使用事件系统统计浏览量的实现
2019/10/16 PHP
javascript 动态生成私有变量访问器
2009/12/06 Javascript
Firefox中autocomplete="off" 设置不起作用Bug的解决方法
2011/03/25 Javascript
JavaScript中的this关键字介绍与使用实例
2013/06/21 Javascript
Jquery chosen动态设置值实例介绍
2013/08/08 Javascript
JS动态显示表格上下frame的方法
2015/03/31 Javascript
详解JavaScript操作HTML DOM的基本方式
2015/10/21 Javascript
每天一篇javascript学习小结(String对象)
2015/11/18 Javascript
JavaScript实现图片滑动切换的代码示例分享
2016/03/06 Javascript
深入理解jQuery事件绑定
2016/06/02 Javascript
Javascript中的prototype与继承
2017/02/06 Javascript
angular2系列之路由转场动画的示例代码
2017/11/09 Javascript
解决iView中时间控件选择的时间总是少一天的问题
2018/03/15 Javascript
javaScript实现鼠标在文字上悬浮时弹出悬浮层效果
2020/04/12 Javascript
浅谈ECMAScript 中的Array类型
2019/06/10 Javascript
微信小程序开发中var that =this的用法详解
2020/01/18 Javascript
vue实现购物车功能(商品分类)
2020/04/20 Javascript
vuex中store存储store.commit和store.dispatch的用法
2020/07/24 Javascript
python操作MySQL 模拟简单银行转账操作
2017/09/27 Python
简单实现python数独游戏
2018/03/30 Python
Python实现的多进程拷贝文件并显示百分比功能示例
2019/04/09 Python
python输出电脑上所有的串口名的方法
2019/07/02 Python
Python实现大数据收集至excel的思路详解
2020/01/03 Python
浅谈OpenCV中的新函数connectedComponentsWithStats用法
2020/07/05 Python
Python自动创建Excel并获取内容
2020/09/16 Python
英国领先的名牌服装折扣零售商:Brown Bag Clothing
2019/01/08 全球购物
英国在线购买马术服装:EQUUS
2019/07/12 全球购物
捷克购买家具网站:JENA nábytek
2020/03/19 全球购物
建筑工程专业学生的自我评价
2013/12/25 职场文书
给孩子的新年寄语
2014/04/08 职场文书
安全承诺书格式
2014/05/21 职场文书
经营理念口号
2014/06/21 职场文书
学校元旦晚会开场白
2014/12/14 职场文书
导游词之鲁迅祖居
2019/10/17 职场文书
如何理解Vue前后端数据交互与显示
2021/05/10 Vue.js