python ljust 中文_python ljust 中文_Python为文档批量注音(生僻字歌词为例)
抖音配乐--生僻字
首次听到生僻字就是从抖音了,随着生僻字配乐使用的人越来越多,很多人翻唱、模仿甚至有讲解成语出处和寓意的段子,可谓百家争鸣。
但,有一类视频很不讨喜,就是把歌词用谐音字代替,好让人一眼认识。
如果是那些哈韩哈日的朋友们,想唱歌但又没有语言基础,那你配上谐音的字没毛病。可歌词中的成语和汉子就是老祖宗传下来的文化,你却用谐音字去让自己容易辨识,不觉得脸红吗?
如果不认识,你可以查字典,找度娘,然后标注上拼音啊!即娱乐又长知识了。
当然有人觉得这样一个一个的查太麻烦,那是因为----你不会Python啊!
今天,我就来教教你们,怎么把文本内容自动标注拼音。
Python的拼音模块
Python的模块库API,每次进去习惯第一动作,就是右键翻译为中文。(好羞愧,个人太爱国了,所以一直排斥学英语,好不要脸的借口...)可Python的拼音模块不需要这么做,因为涉及拼音等模块肯定和中文有关系,文档自然是中文的喽。
那么Python的拼音模块是什么? pypinyin
特性
根据词组智能匹配最正确的拼音。
支持多音字。
简单的繁体支持, 注音支持。
支持多种不同拼音/注音风格。
安装
pip install pypinyin
使用示例
>>> from pypinyin import pinyin, lazy_pinyin, Style
>>> pinyin('中心')
[['zhōng'], ['xīn']]
>>> pinyin('中心', heteronym=True) # 启用多音字模式
[['zhōng', 'zhòng'], ['xīn']]
>>> pinyin('中心', style=Style.FIRST_LETTER) # 设置拼音风格
[['z'], ['x']]
>>> pinyin('中心', style=Style.TONE2, heteronym=True)
[['zho1ng', 'zho4ng'], ['xi1n']]
>>> pinyin('中心', style=Style.BOPOMOFO) # 注音风格
[['ㄓㄨㄥ'], ['ㄒㄧㄣ']]
>>> pinyin('中心', style=Style.CYRILLIC) # 俄语字母风格
[['чжун1'], ['синь1']]
>>> lazy_pinyin('中心') # 不考虑多音字的情况
['zhong', 'xin']
# Python 3(Python 2 下把 '中心' 替换为 u'中心' 即可):
实现分析
起初想着,既然有了这个强大的拼音模块,那么文本批量添加拼音,岂不是分分钟的事情了吗?然后,打脸接踵而来!
首先,要实现文字上一一对应的标注拼音,每个字与拼音的长度肯定不同,没办法对其。如果要对其,就得将文字进行拆分,字与字之间添加间距。有人说简单啊,每个字的拼音最多不过6为,那我们使用列表解析式[i.just(6) for i in line]不就完了?
听起来没毛病,但是...
歌词也有语气词啊,这句Wu 又双叒叕你直接按照字符串拆开成了什么鬼?
一个中文在文本中占两个字符的长度,如果对齐的话,还需要识别中文和英文字符!
有效字符的辨识,Wu被认为是是个有效字段,模块会对其进行合并
pinyin('Wu 又双叒叕') -->[['Wu '], ['yòu'], ['shuāng'], ['ruò'], ['zhuó']]
中文识别
本来考虑使用正则去判断中文的,因为网上查到正则的匹配中文是[\u4e00-\u9fa5],简单测试了下,貌似没毛病
然后...代码都快写完了发现有些生僻字不再这个范围内,我擦!
'\u4e00'<='生'<='\u9fa5'
True
'\u4e00'<='僻'<='\u9fa5'
True
'\u4e00'<='字'<='\u9fa5'
True
'\u4e00'<='㙓'<='\u9fa5'
False
生僻字果然没那么好处理,但我这么追求完美的处女座大叔,怎么能容忍特例的出现呢?
解决办法
针对正则匹配问题,深入去研究,就脱离了学Python的初衷,即便解决了也收获甚微,不如换个思路。
utf-8字符编码下,一个中文字符占3个字节,但是字符的长度仅为1,那么解析中文的方式是否可以变通为:
len(bytes(str,'utf-8) == 3 and len(string) == 1)
关于文本书写,我们判断中文后,如果是汉字str.ljust(5),否则str.ljust(6)不就行了(因为一个汉字占两个字符长度)。
代码实现
# -*- coding: utf-8 -*-
# @Author : 王翔
# @JianShu : 清风Python
# @Date : 2019/5/18 22:53
# Software : PyCharm
# version: Python 3.6.8
# @File : ChromePassword.py
from pypinyin import pinyin
import re
class ChangePinyin:
def __init__(self, filename):
self.file = filename
self.lyric = self.read_file()
self.pinyin = []
def read_file(self):
with open(self.file, encoding='utf-8') as f:
return f.readlines()
def write_file(self):
with open('New_%s' % self.file, 'w', encoding='utf-8') as f:
print(self.lyric)
for line in self.lyric:
# print(line)
if line.strip() == '':
continue
_new_line = re.sub(r'\s', '', line)
# 行内容转拼音
_pinyin = ''.join(map(lambda x: x[0].ljust(6), pinyin(_new_line)))
# 根据中英文,将行内容进行字符与汉字的拆分
_lyric = self.split_words(_new_line)
f.write('%s\n%s\n' % (_pinyin, _lyric))
@staticmethod
def split_words(words):
word_list = ""
tmp = ""
for string in words:
if len(bytes(string, 'utf-8')) == 3 and len(string) == 1:
if tmp != '':
word_list += tmp.ljust(6)
tmp = ""
word_list += string.ljust(5)
else:
tmp += string
return word_list
if __name__ == '__main__':
Main = ChangePinyin('lyric.txt')
Main.write_file()
看看最后的实现效果吧,是不是格式很工整!
文本注音效果.gif
录屏软件为LICEcap
它是一款屏幕录制工具,支持导出 GIF 动画图片格式,轻量级、使用简单,录制过程中可以随意改变录屏范围。
好了,今天的内容就到这里,希望大家喜欢,如果觉得文章有用,记得关注支持我啊。
©本文由简书作者:清风Python 原创 如需转载请注明
欢迎大家关注我的公众号 清风Python
python ljust 中文_python ljust 中文_Python为文档批量注音(生僻字歌词为例)相关推荐
- python ljust 中文_Python为文档批量注音(生僻字歌词为例)
抖音配乐--生僻字 首次听到生僻字就是从抖音了,随着生僻字配乐使用的人越来越多,很多人翻唱.模仿甚至有讲解成语出处和寓意的段子,可谓百家争鸣. 但,有一类视频很不讨喜,就是把歌词用谐音字代替,好让人一 ...
- Python为文档批量注音(生僻字歌词为例)
抖音配乐--生僻字 首次听到生僻字就是从抖音了,随着生僻字配乐使用的人越来越多,很多人翻唱.模仿甚至有讲解成语出处和寓意的段子,可谓百家争鸣. 但,有一类视频很不讨喜,就是把歌词用谐音字代替,好让人一 ...
- 使用中文分词工具切分ArcGIS在线文档
下面使用中文分词工具切分ArcGIS在线帮助文档:以减轻阅读难度:看下有无效果:此为我发明的阅读方法: ArcGIS是个非常庞大的系统,希望可以减轻阅读强度: 下面是6篇文档的切分结果截图:原文链接和 ...
- Python使用标准库zipfile+re提取docx文档中超链接文本和链接地址
推荐教材: <Python程序设计实用教程>,ISBN:978-7-5635-6065-3,董付国,北京邮电大学出版社 教材封面: 全国各地新华书店有售 京东购买链接: 配套资源:教学大纲 ...
- python word 合并单元格_在word文档选项卡中检测合并单元格
一点背景 我有一个软件规范,我需要以表格的形式解析需求.它们的格式也不总是相同的.我继承了一个python脚本,它使用win32com解析word文档,然后openpyxl将需求导出到excel文件, ...
- python 合并word内容_python如何合并两个文档内容
1.两个文档合并之前 2.合并两个文件的代码:file1 = open("name,tel.txt", "rb") file2 = open("nam ...
- python开源项目博客_Blog_mini首页、文档和下载 - Python Flask开源博客 - OSCHINA - 中文开源技术交流社区...
使用Blog_mini,你完全不用担心博客的管理问题! Blog_mini是一个用Python Flask开发的,拥有简洁页面(支持响应式布局!)和强大后台管理功能的开源博客系统,使用Blog_min ...
- python处理pdf实例_python 使用pdfminer3k 读取PDF文档的例子
1.安装 pdfminer3k 通过pip安装: pip install pdfminer3k 下载安装:在网页 https://pypi.org/project/pdfminer3k/1.3.1/# ...
- python查看文档的软件_Python __doc__属性:查看文档
前面介绍了使用 help() 函数来查看程序单元的帮助信息.比如导入 string 模块之后,即可使用 help() 函数来查看指定程序单元的帮助信息. 例如,在交互式解释器中输入如下命令来查看 st ...
最新文章
- C++成员对齐方式探讨
- jQuery HTML 添加和删除元素
- QT安卓web使用mysql_Qt使用MySQL笔记一
- 4 Git 分支 - 分支开发工作流
- Win7旗舰版系统网页显示不全怎么办
- labview高级编程与虚拟仪器工程应用 代码_用labview自己编程控制专用的声发射仪器...
- 【转载】Windows 10系统默认将画面显示比例调整至125%或150%,最高分辨率已经达到3840×2160(4K)这一级别。...
- matlab file(i).name,求大佬帮忙备注一下,有点看不懂,详细一点
- 转:oracle常见重要视图-v$sql,v$sql_plan,v$sqltext,v$sqlarea,v$sql_plan_statistcs
- python中mid_Python生成音乐 之 mido库读取midi文件
- 大陆身份证号码格式校验代码
- 《MATLAB智能算法超级学习手册》一一1.5 简单工程应用分析
- 特征选择:嵌入法---《菜菜机器学习笔记》
- 如何在一个事件中使用(调用)另一个事件
- CSS系列之连续的字母或数字在Html盒子中不会自动换行,直接溢出
- python小应用之整理手机图片_手把手:扫描图片又大又不清晰?这个Python小程序帮你搞定!...
- android出生日期计算年龄,Java 通过生日计算宝宝多大了,输出我27岁7月零9天
- 基于ARMv8架构的mini操作系统
- 好看的微信忧心文案小程序源码 文案+头像+背景图
- 基于react的影院购票应用
热门文章
- 最小生成树(库鲁斯卡尔算法)
- Zookeeper整合JAVA应用之Curator开源客户端使用案例
- 【生信MOOC】生物序列比对工具——多序列比对
- 计算机修改人类记忆曲线,艾宾浩斯遗忘曲线和费曼技巧
- 带轮轮毂长度l和带轮宽b表_A型V带轮的轮缘宽B,轮毂孔径D和轮毂长L.doc
- 遗传算法(二)——编码
- IQueryable和IEnumerable学习
- docker容器不阻塞的进入
- (Hadoop、HBase、Kafka)中,Zookeeper都作为核心组件使用
- Outlook 2013 重新联姻Hotmail ,Exchange ActiveSync牵线搭桥