基于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 06 Python
基于pandas将类别属性转化为数值属性的方法
Jul 25 Python
Python json模块dumps、loads操作示例
Sep 06 Python
python3实现表白神器
Apr 09 Python
Django页面数据的缓存与使用的具体方法
Apr 23 Python
python binascii 进制转换实例
Jun 12 Python
Pyqt QImage 与 np array 转换方法
Jun 27 Python
python内存动态分配过程详解
Jul 15 Python
在python image 中安装中文字体的实现方法
Aug 22 Python
Python+OpenCV实现实时眼动追踪的示例代码
Nov 11 Python
wxPython绘图模块wxPyPlot实现数据可视化
Nov 19 Python
用python实现学生管理系统
Jul 24 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 函数使用方法与函数定义方法
2010/05/09 PHP
MySQL连接数超过限制的解决方法
2011/07/17 PHP
php实现分页工具类分享
2014/01/09 PHP
PHP扩展Memcache分布式部署方案
2015/12/06 PHP
功能强大的PHP POST提交数据类
2016/07/15 PHP
微信JSSDK分享功能图文实例详解
2019/04/08 PHP
一些有关检查数据的JS代码
2006/09/07 Javascript
JS去掉第一个字符和最后一个字符的实现代码
2014/02/20 Javascript
Javascript玩转继承(三)
2014/05/08 Javascript
简化版手机端照片预览组件
2015/04/13 Javascript
JavaScript精炼之构造函数 Constructor及Constructor属性详解
2015/11/05 Javascript
如何解决ligerUI布局时Center中的Tab高度大小
2015/11/24 Javascript
基于jquery编写的放大镜插件
2016/03/23 Javascript
jQuery+CSS实现简单切换菜单示例
2016/07/27 Javascript
ajax异步请求详解
2017/01/06 Javascript
Javascript中类式继承和原型式继承的实现方法和区别之处
2017/04/25 Javascript
详解vue2 $watch要注意的问题
2017/09/08 Javascript
关于Vue在ie10下空白页的debug小结
2018/05/02 Javascript
JS实现DOM节点插入操作之子节点与兄弟节点插入操作示例
2018/07/30 Javascript
解决JavaScript layui 下拉框不显示的问题
2018/08/14 Javascript
JavaScript this在函数中的指向及实例详解
2019/10/14 Javascript
python调用tcpdump抓包过滤的方法
2018/07/18 Python
[机器视觉]使用python自动识别验证码详解
2019/05/16 Python
python中while和for的区别总结
2019/06/28 Python
Python3实现zip分卷压缩过程解析
2019/10/09 Python
详细分析Python垃圾回收机制
2020/07/01 Python
使用Python操作MySQL的小技巧
2020/09/10 Python
英国床垫和床架购物网站:Bedman
2019/11/04 全球购物
网站开发实习生的自我评价
2013/12/11 职场文书
小学安全教育材料
2014/02/17 职场文书
精彩广告词大全
2014/03/19 职场文书
教师廉洁自律承诺书
2014/05/26 职场文书
“四风”查摆问题自我剖析材料
2014/09/27 职场文书
中学社团活动总结
2015/05/07 职场文书
公司借款担保书
2015/09/22 职场文书
励志正能量20句:送给所有为梦想拼搏的人
2019/11/11 职场文书