有如下数据,需要对名字注音。
数据样例:👇
一、实现过程
前提条件:由于会用到pypinyin库,所以一定得提前安装。
pip install pypinyin
1、详细代码:
from pypinyin import pinyin, Style
# 输入数据
names = [
"曾靖茵", "吕咏潼", "曾宝莹", "谢婉晴", "王 悦", "高 妍", "刘付浩宇",
"欧文彬", "何嘉俊", "区诚煜", "黄梓钊", "郭梓涵", "欧阳梓锋"
]
# 定义函数,接受一个名字作为参数
def get_pinyin_with_tone(name):
result = []
# 遍历名字中的每个字符
for char in name:
if char.strip(): # 如果字符不是仅由空格组成(即忽略空格)
# 使用 pypinyin 库获取当前字符的带声调拼音,style=Style.TONE 表示获取带声调的拼音格式
py = pinyin(char, style=Style.TONE)[0][0]
# 将字符和对应的拼音格式化为特定格式并添加到结果列表中
result.append(f"{char}({py})")
# 将结果列表中的元素连接成一个字符串并返回
return ''.join(result)
# 处理并打印结果
for name in names:
print(get_pinyin_with_tone(name))
2、输出结果
这时候发现和需求不对,有的姓名为多音字,需要进行特殊处理。
3、优化后的最终代码:
from pypinyin import pinyin, Style, lazy_pinyin
# 输入数据
names = [
"曾靖茵", "吕咏潼", "曾宝莹", "谢婉晴", "王 悦", "高 妍", "刘付浩宇",
"欧文彬", "何嘉俊", "区诚煜", "黄梓钊", "郭梓涵", "欧阳梓锋"
]
# 多音字字典
multi_tone_chars = {
'曾': 'zēng',
'区': 'ōu',
'阳': 'yáng',
}
# 定义函数,接受一个名字作为参数
def get_pinyin_with_tone(name):
result = []
# 遍历名字中的每个字符
for char in name:
if char.strip(): # 如果字符不是仅由空格组成(即忽略空格)
# 判断当前字符是否在多音字字典中
if char in multi_tone_chars:
# 如果在,直接从多音字字典中获取对应的拼音
py = multi_tone_chars[char]
else:
# 如果不在,使用 lazy_pinyin 函数获取当前字符的带声调拼音
py = lazy_pinyin(char, style=Style.TONE)[0]
# 将字符和对应的拼音格式化为特定格式并添加到结果列表中
result.append(f"{char}({py})")
# 将结果列表中的元素连接成一个字符串并返回
return ''.join(result)
# 处理并打印结果
for name in names:
print(get_pinyin_with_tone(name))
4、最终结果: