Python+pypinyin实现将中文姓名拼音转换与搜索
作者:weixin_46244623
这篇文章主要为大家详细介绍了如何基于 pypinyin 和pandas实现一个优雅且实用的中文姓名拼音转换与搜索方案,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以了解下
Python 使用 pypinyin 将中文姓名转换为拼音并支持拼音搜索
在实际业务中,我们经常会遇到这样的需求:
- 将中文姓名转换为拼音
- 支持通过拼音或拼音首字母搜索中文姓名
- 结合 Pandas 对数据进行批量处理
本文将基于 pypinyin + pandas,实现一个优雅且实用的中文姓名拼音转换与搜索方案。
一、环境准备
安装依赖
pip install pandas pypinyin
导入必要的库
import pandas as pd from pypinyin import pinyin, Style
二、示例数据准备
假设我们有一列中文姓名数据:
data = {
'name': ['张三', '李四', '王小五', '赵六']
}
df = pd.DataFrame(data)
当前 DataFrame 结构如下:
| name |
|---|
| 张三 |
| 李四 |
| 王小五 |
| 赵六 |
三、实现姓名拼音转换函数
我们希望实现两个拼音字段:
- full_pinyin:姓名全拼(如
zhangsan) - initials:姓全拼 + 名首字母(如
zhangs)
核心函数实现
def get_full_pinyin_and_initials(name):
"""
将中文姓名转换为:
1. 全拼
2. 姓全拼 + 名首字母
"""
# 全拼(张三 -> zhangsan)
full_pinyin = ''.join(
pinyin(name, style=Style.NORMAL)[i][0]
for i in range(len(name))
)
# 姓的全拼
surname_pinyin = pinyin(name[0], style=Style.NORMAL)[0][0]
# 名的首字母
name_initials = pinyin(name[1:], style=Style.FIRST_LETTER)
initials = surname_pinyin + ''.join(i[0] for i in name_initials)
return full_pinyin, initials
四、批量生成拼音字段
使用 apply + pd.Series,将返回的元组拆分成多个列:
df[['full_pinyin', 'initials']] = (
df['name']
.apply(get_full_pinyin_and_initials)
.apply(pd.Series)
)
处理后的 DataFrame:
| name | full_pinyin | initials |
|---|---|---|
| 张三 | zhangsan | zhangs |
| 李四 | lisi | lis |
| 王小五 | wangxiaowu | wangxw |
| 赵六 | zhaoliu | zhaol |
五、实现拼音搜索功能
支持以下两种搜索方式:
- 全拼搜索
- 拼音首字母搜索
搜索函数实现
def find_name_by_pinyin(input_pinyin):
"""
根据拼音或拼音首字母查找姓名
"""
matched_names = df[
df['initials'].str.contains(input_pinyin, na=False) |
df['full_pinyin'].str.contains(input_pinyin, na=False)
]
return matched_names
六、使用示例
input_pinyin = "zhangs" result = find_name_by_pinyin(input_pinyin) print(result)
输出结果:
name full_pinyin initials
0 张三 zhangsan zhangs
七、完整代码
import pandas as pd
from pypinyin import pinyin, Style
# 假设你的 DataFrame 是这样的
data = {
'name': ['张三', '李四', '王小五', '赵六']
}
df = pd.DataFrame(data)
# 定义获取拼音的函数
def get_full_pinyin_and_initials(name):
# 获取全拼
full_pinyin = ''.join(pinyin(name, style=Style.NORMAL)[i][0] for i in range(len(name)))
# 获取姓的拼音和名的首字母
surname_pinyin = pinyin(name[0], style=Style.NORMAL)[0][0] # 姓的全拼
name_initial = pinyin(name[1:], style=Style.FIRST_LETTER) # 名的首字母
initials = surname_pinyin + ''.join(n[0] for n in name_initial)
return full_pinyin, initials
# 应用函数并创建新的列
df[['full_pinyin', 'initials']] = df['name'].apply(get_full_pinyin_and_initials).apply(pd.Series)
# 定义查找姓名的函数
def find_name_by_pinyin(input_pinyin):
# 查找与输入拼音匹配的姓名
matched_names = df[df['initials'].str.contains(input_pinyin, na=False) |
df['full_pinyin'].str.contains(input_pinyin, na=False)]
return matched_names
# 示例:查找拼音
input_pinyin = "zhangs" # 你想要查找的拼音
result = find_name_by_pinyin(input_pinyin)
# 打印结果
print(result)
以上就是Python+pypinyin实现将中文姓名拼音转换与搜索的详细内容,更多关于Python pypinyin拼音转换与搜的资料请关注脚本之家其它相关文章!
