一、为什么要搞?
前几天有同学在讨论家中小盆友的作业问题,说连一些拼音作业的难度已经超出了能力范围,感叹自己已经比不上现在的小学生了。听得滋滋有味的我又产生了一个大胆的想法:
使用Python自动在每个文字的上方标注拼音
预期输出示例如下:
二、准备如何搞?
查阅一番资料后,发现一个神奇的库:pypinyin,可以轻松将汉字文本转换为拼音
先来安装pypinyin
pip install pypinyin
这还不够,要将文本和拼音输出到文件,我想到了以下两条路:
1.结果写入到txt或者doc文件
2.结果写入到excel表格
仔细思考后发现第一条路很难实现拼音和汉字的连续换行以及一一对应,而通过excel表格的话能轻松标识汉字和拼音需要写入的行和列
这里使用比较熟悉的xlwt模块写入excel,先来安装
pip install xlwt
事先准备了需要转换的文本内容test_file.txt,1000+汉字,手动注音的话,那不得放个寒暑假了啊:
三、说搞咱就搞!
文本读取与预处理
使用with open方法打开文本,readlines方法读取文本内容
注意:文本内容当中包含换行符,这里做了去除处理
# 文本读取与预处理
file = 'test_file.txt'
with open(file, 'r', encoding='utf-8') as f:
text = f.readlines()
f.close()
new_text = ''.join((''.join(text)).splitlines()) # 去除文本的换行符
print(new_text)
运行效果:
文本拼音获取
一行代码搞定(导库不算哈)
from pypinyin import pinyin
text_pinyin = pinyin(new_text)
print(text_pinyin)
运行结果:
结果excel输出
我们阔以看到,汉字字数和拼音数量是对得上的
list_length_hz = len(new_text) # 汉字字数
list_length_py = len(text_pinyin) # 拼音数量
print(f"汉字:{list_length_hz}")
print(f"拼音:{list_length_py}")
运行结果:
先使用xlwt建立wookbook和worksheet
import xlwt
new_file = 'target.xls'
wb = xlwt.Workbook(encoding='utf-8') # 新建工作簿
ws = wb.add_sheet('target_sheet', cell_overwrite_ok=True) # 新建工作表
这里将汉字和拼音写入到excel的 列*行=20*max_row 的单元格中,先设置列数并根据拼音数量获取最大行数
import math
num_cols = 20 # 列数
num_rows = math.ceil(list_length_py / 20) # 最大行数,不足20补一行
然后将汉字写入Excel工作表的奇数行
for i in range(num_rows):
for j in range(num_cols):
# 获取汉字列表值,若索引超出范围则使用空字符串代替
v = '' if i * num_cols + j >= list_length_hz else new_text[i * num_cols + j]
# 将值写入单元格的奇数行中
ws.write(i*2+1, j, v)
再将拼音写入Excel工作表的偶数行
for i in range(num_rows):
for j in range(num_cols):
# 获取汉字列表值,若索引超出范围则使用空字符串代替
v = '' if i * num_cols + j >= list_length_py else text_pinyin[i * num_cols + j]
# 将值写入单元格的偶数行中
ws.write(i*2, j, v)
最后将工作簿保存为excel
wb.save(new_file)
excel结果文件示例如下:
四、搞完收工!
1.使用pypin库一行代码轻松实现文本转拼音
2.使用xlwt库输出excel结果文件,将对应的拼音标注到每个汉字的上方
3.问题:若文本内容中包含连续的无法转换为拼音的字符,会造成拼音和汉字不能一一对应