python - 拼音的所有 Python 排列组合(普通话罗马化)
问题描述
我正在寻找一个无声拼音组合/排列的列表。
import pandas as pd
data = pd.read_csv('chinese_tones.txt', sep=" ", header=None)
data.columns = ["pinyin", "character"]
data['pinyin'] = data['pinyin'].str.replace('\d+', '')
当前数据格式为:
| pinyin| character|
|------|----|---|---|---|
| cang | 仓 | | | |
| cang | 藏 | | | |
| cao | 操 | | | |
| cao | 曹 | | | |
| cao | 草 | | | |
预期的结果将是一个类似的列表:
cangcang
cangcao
caocang
caocao
我可以删除列表并清理自己。我只是想在两个拼音的每个顺序中包含每个组合。
解决方案
您可以drop_duplicates
,然后使用outer
加法来获取所有组合。
import numpy as np
import pandas as pd
s = df['pinyin'].drop_duplicates().to_numpy()
pd.Series(np.add.outer(s, s).ravel())
#0 cangcang
#1 cangcao
#2 caocang
#3 caocao
#dtype: object
If you want to add back the original words just add `s` back to this outer addition.
pd.Series(s.tolist() + np.add.outer(s, s).ravel().tolist())
#0 cang
#1 cao
#2 cangcang
#3 cangcao
#4 caocang
#5 caocao
#dtype: object
如果您还想拥有单个单词,那么我们可以通过合并完成类似的事情,而不是下拉到 numpy。drop_duplicates
再次分配一个临时键来完成整个合并,然后添加字符串。
s = df[['pinyin']].drop_duplicates().assign(key=1)
res = s.merge(s, on='key').drop(columns='key')
res['combined'] = res['pinyin_x'] + res['pinyin_y']
# pinyin_x pinyin_y combined
#0 cang cang cangcang
#1 cang cao cangcao
#2 cao cang caocang
#3 cao cao caocao
推荐阅读
- javascript - document.title 元素在刷新时消失
- spring - 如何在 Angular 8 中调用 Rest API Post 方法。出现 CORS 错误
- javascript - 如何解决 CSS 没有反映在 Air-Table 的 iframe 上的问题?
- amazon-web-services - 使用 AWS Amplify 将 React Native 应用程序发布到云
- curl - 使用 curl 将 post 请求发送到 mlflow api 到多条记录
- nuxt.js - Nuxt.Js 在 Azure 上部署没有 node_modules 文件夹
- java - 如何在不将活动切换到android中的默认呼叫应用程序的情况下拨打电话?
- azure - Azure - 无法获得“网络配置文件”
- android - CameraX 预览未显示在 PreviewView 中
- distance - 测量两个概率分布之间的重叠