全部Python个拼音(普通话拼音)排列组合
All Python Permutations and Combinations of Pinyin (Mandarin Romanization)
我想做一个单调拼音列表combinations/permutations。
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
我想做一个单调拼音列表combinations/permutations。
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