装13的冷场

“龙生九子,各不相同…”
囚牛、睚眦、嘲风、蒲牢、狻猊、霸下、狴犴、负屃、螭吻。

都说提笔忘字丢人,可至少还有提笔的机会。随着信息化时代的普及,原来越多的人成了半文盲。怎么说?电脑前打字敲的一二一,可提起笔来就忘字。从前特别喜欢钢笔,笔袋里放的凌美、百利、永生、英雄一堆,买的北碳、毕加索、派克、百利金各式牌子的墨水。结果感觉半年多都没动过这些陈年老货了。
下午聊天装13说到龙生九子,本来吹得正欢,结果朋友问老七 bì àn怎么写,然后…瞬间懵逼了,这个13装的有点冷场啊。
最近项目有些忙,晚上构思该写点什么。想到下午的尴尬,决定发一篇之前写的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  : 王翔
# @公众号   : 清风Python# @WeChat  : King_Uranus# @Date    : 2019/9/6 01:33
# Software : PyCharm
# version  :Python 3.7.3
# @File    : TextAddPinyin.pyfrom pypinyin import pinyin
import reclass ChangePinyin:def __init__(self, filename):self.file = filenameself.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))@staticmethoddef 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 += stringreturn word_listif __name__ == '__main__':Main = ChangePinyin('lyric.txt')Main.write_file()

看看最后的实现效果吧,是不是格式很工整!


录屏软件为LICEcap

它是一款屏幕录制工具,支持导出 GIF 动画图片格式,轻量级、使用简单,录制过程中可以随意改变录屏范围。
好了,今天的内容就到这里,希望大家喜欢,如果觉得文章有用,记得关注支持我啊。

The End

OK,今天的内容就到这里,如果觉得内容对你有所帮助,欢迎点赞。
期待你关注我的公众号清风Python,如果觉得不错,希望能动动手指转发给你身边的朋友们。

作者:清风Python

装13失败后,我决定使用Python为生僻字批量注音相关推荐

  1. python生僻字如何转码_装13失败后,我决定使用Python为生僻字批量注音

    装13的冷场 "龙生九子,各不相同-" 囚牛.睚眦.嘲风.蒲牢.狻猊.霸下.狴犴.负屃.螭吻. 都说提笔忘字丢人,可至少还有提笔的机会.随着信息化时代的普及,原来越多的人成了半文盲 ...

  2. python生僻字如何转码_如何用Python检测生僻字

    最近在工作中碰到一个需求,要求检测字段是否包含生僻字以及一些非法字符如 ~!@#$%^&*.通过网上的查找资料解决了,现在将解决的过程和示例代码分享给大家,有需要的可以参考借鉴.下面来一起看看 ...

  3. [584]python给生僻字注拼音(pypinyin库)

    茕茕孑立 沆瀣一气 踽踽独行 醍醐灌顶 绵绵瓜瓞 奉为圭臬 龙行龘龘 犄角旮旯 娉婷袅娜 涕泗滂沱 呶呶不休 不稂不莠 这首<生僻字>,考验的是"语文"硬实力.倘若实力 ...

  4. Python为文档批量注音(生僻字歌词为例)

    抖音配乐--生僻字 首次听到生僻字就是从抖音了,随着生僻字配乐使用的人越来越多,很多人翻唱.模仿甚至有讲解成语出处和寓意的段子,可谓百家争鸣. 但,有一类视频很不讨喜,就是把歌词用谐音字代替,好让人一 ...

  5. mac升级到 macos ventura 13.0 后,git失效及gitlab认证失败问题

    首先失效问题的解决 打开终端在命令行输入(terminal输入): xcode-select --install 系统会跳出窗口提醒 xcode-select: note: install reque ...

  6. Ubuntu 13.10 安装软件失败后出现的问题——已安装 post-installation 脚本 返回了错误号 1...

    安装Oracle-java7-installer失败后,再次重新安装后出现错误-- dpkg: error processing oracle-java7-installer (--configure ...

  7. pamac 安装 ros-noetic-desktop-full(AUR) 失败后如何清理残留的问题

    pamac 安装 ros-noetic-desktop-full(AUR) 失败后如何清理残留的问题 date: 2022-09-21 lastmod: 2022-09-21 ros-noetic-d ...

  8. 诺基亚5320微信提示服务器繁忙,诺基亚5320XM刷机要注意 RM409刷6.13失败的经历

    诺基亚5320XM刷机的技巧 RM409刷6.13失败的经历 老婆的诺基亚5320XM红黑买来是4.13的系统,开始使用很稳定,后来就偶尔出现黑屏及自动重启.于是决定刷版本升级,用凤凰刷机下载香港的系 ...

  9. AMD电脑装完Winsows10后开机蓝屏,报错代码:cdmsnroot_s.sys

    #背景 今天装了个WIN10,电脑配置:联想 IdeaPad   Z485      : AMD   A8处理器 .完成安装后电脑没有问题,安装了驱动程序后将电脑用360深度清理了一遍. # 问题 确 ...

最新文章

  1. H国的身份证号码(搜索)
  2. WPF 中设置Combox下拉框Text 显示值
  3. 【面向对象】泛化与继承
  4. 搞了多年管理软件,总算说清楚了什么是好软件
  5. 有偿数据收集 | 哈工大手写作文图片收集
  6. git github配置
  7. Xcode7 插件制作入门
  8. Exchange 2010 迁移至Exchange 2013系列之六:创建信任关系并安装ADMT Server
  9. Excel 从web中提取数据
  10. 靠谱前端必上网站大全
  11. 计算机并口优点,并口的主要特点 - USB接口、串口、并口有何区别
  12. 计算机图形学裁剪算法应用,计算机图形学裁剪:关于梁友栋-Barsky算法(Liang-Barsky算法)...
  13. python母亲节代码_python 计算 母亲节
  14. 基于swiftype应用于Hexo-Yilia-主题的站内搜索引擎
  15. 【go】ssa和调用链分析
  16. 阿里云服务器安装mysql
  17. pip升级报错:def read(rel_path: str) -> str SyntaxError: invalid syntax
  18. 风格迁移-风格损失函数(Gram矩阵)理解
  19. JSONObject.toBean() 把jsonobject转换成实体类
  20. 数据库:数据的独立性

热门文章

  1. 用鸿蒙取名好吗,“鸿蒙”两个字,还是古人写得好看…
  2. c语言去掉数组中重复的,C语言删除无序整型数组中的重复元素及时间复杂度
  3. Oracle修改表存储参数,Oracle存储结构之参数文件
  4. for循环与each遍历的跳出循环方式
  5. tomcat,Jboss,weblogic区别与比较
  6. MySql.Data.dll官网下载
  7. [图形]图形API的两种模式
  8. 动态规划(6)——NYOJ469擅长排列的小明II*
  9. 2014年自动化的个人感想
  10. 《把时间当作朋友》第1章 心智的力量