Python漢字轉拼音——用pypinyin與xpinyin找出成語接龍的殺手锏

How to Train Your Dragon(來自《馴龍高手》劇照)

為了陪孩子玩成語接龍,于是想找出那些一擊必殺的成語,類似‘一個頂倆’【yí, gè,dǐng',li?!窟@種。
在網上搜索了下,從漢典網等網站上可以查詢成語。另外,Github也有查詢成語的API,不過為了方便,還是決定自己動手。

pypinyin與xpinyin包

Python實現漢字轉拼音,常用的包是pypinyin 0.37.0xpinyin 0.5.6兩個。
另外,SnowNLP: Simplified Chinese Text Processing小明 NLP也是有漢字轉拼音功能的,但這兩個包不是專注于漢字轉拼音,因此相對而言比起前面提到的pypinyin和xpinyin,在拼音這一項上要弱許多,比如無法給出拼音的音調,有些不是很生僻的成語也不能給出拼音(如下圖),所以只重點去試了前面提到的兩個包。

xmnlp測試

snownlp測試

默認參數

總的來說,pypinyin的功能更加全面。先來看默認參數下的轉拼音結果。pypinyin提供了‘slug、pinyin’和‘lazy_pinyin’三個函數,區別在于是否返回結果是否默認帶音調、結果是字符串還是列表以及分隔符等區別。xpinyin則是‘get_pinyin’這一個函數,但可以通過參數來返回帶音調拼音、改變分隔符等。

from pypinyin import pinyin, lazy_pinyin, slug
from xpinyin import Pinyin

from pypinyin import load_phrases_dict,load_single_dict, Style

word = '魑魅魍魎'
print('pypinyin默認參數結果:')
print('\t',pinyin(word))
print('\t',lazy_pinyin(word))
print('\t',slug(word))
print('xpinyin默認參數結果:')
print('\t',Pinyin().get_pinyin(word))

默認參數

本人是更習慣返回帶音調的、空格符分隔的字符串結果,因此用的pypinyin包中的slug()命令更多一些,自動參數 * style=Style.TONE *(拼音帶音調)和 separator=' '(空格分隔)。

slug(word, separator=' ',  style=Style.TONE)

為了對比兩個包的漢字轉拼音結果,用《生僻字》歌詞來測試的結果如下:

《生僻字》歌詞結果比較

結果來看,明顯pypinyin的對于多音字(比如陟罰臧否中的‘否’字、奉為圭臬中的‘為’字)。xpinyin對于生僻字無法給出結果(如??字)、或是識別錯誤(如犄角旮旯中的‘旮旯’兩字、腌臜孑孓一句中的‘腌臜’兩字)。

pypinyin的heteronym參數與style參數

pypinyin作為漢字轉拼音的首選python包,其中heteronym參數與style參數值得注意下。
heteronym參數是多音字模式開關參數,測試下來,我的理解設置** heteronym = True ** 后,可能在有些情況下(是pypinyin無法判斷時)會將多音字所有可能的讀音都列出來,如下所示,比如'好了'兩字。但如果pypinyin能夠判斷時,heteronym參數對結果無影響,比如'小時了了,大未必佳'中的'了了'二字,pypinyin并不會返回'le le'的結果出現。

heteronym參數

style參數是旋轉返回結果音調位置、聲母韻母首字母還是全部等等??傊琾ypinyin的style參數更為靈活,可以根據需要返回想要的結果。

style選項 參數值 返回結果
常規 Style.NORMAL su hai han chao
拼音帶音調 Style.TONE sū hǎi hán cháo
音調數字位于聲母韻母之間 Style.TONE2 su1 ha3i ha2n cha2o
音調數字位于韻母之后 Style.TONE3 su1 hai3 han2 chao2
聲母 Style.INITIALS s h h ch
首字母 Style.FIRST_LETTER s h h c
韻母 Style.FINALS u ai an ao
韻母帶音調 Style.FINALS_TONE ū ǎi án áo
韻母,音調數字位于韻母首字母之間 Style.FINALS_TONE2 u1 a3i a2n a2o
韻母,音調數字位于最后 Style.FINALS_TONE3 u1 ai3 an2 ao2
注音符 Style.BOPOMOFO ㄙㄨ ㄏㄞˇ ㄏㄢˊ ㄔㄠˊ
聲母注音符 Style.BOPOMOFO_FIRST ㄙ ㄏ ㄏ ㄔ
style參數

pypinyin的load_phrases_dict和load_single_dict命令

前面已經提到pypinyin的結果正確率更高,但這并不意味著pypinyin返回的結果就百分百一定正確。在將接龍成語轉拼音時也發現,極少情況下,xpinyin返回了正確結果,pypinyin的結果反而有誤。對于這些被發現的錯誤拼音,可以通過** load_phrases_dict **生成自定義詞典來修正。


load_phrases_dict自定義詞典

此外** load_single_dict ** 可以調整對于多音字其結果中的出現順序:
比如以其人之道,還治其人之身一句中的‘還’字,默認情況下pypinyin是先轉換為‘huai’的讀音。

多音字的識別順序

正如結果所示,多音字的順序并不需要特別操心,pypinyin多數情況下對于成語、詞組之類都可以自動識別并給出正確的拼音。
pypinyin還給出了輕聲的音調等參數設置,感興趣的可以去看pypinyin 0.37.0 文檔
值得一提的是,拼音的輕聲確實是在成語接龍中稍微比較令人頭疼的問題之一。比方對方說‘唐突西子’我接龍‘子虛烏有’,在我看來是完全可以的,但在pypinyin給出的拼音結果來看,這兩個成語中的'zi'一個是輕聲一個是三聲,是不同的兩個讀音。而且實際上,我收集到的成語庫中,根本就找不到以輕聲的‘zi’開頭的成語。所以如果讓程序自動去查找接龍的成語的話,可能就不得不要考慮輕聲聲調的問題。
所以簡單起見,干脆還是用load_phrases_dict 自定義詞典將pypinyin認為的輕聲都給改為原來的讀音最是直截了當。

成語接龍殺手锏

成語來源包括網上下載到的TXT(PDF、Epub)文件,包括前述Github上的JSON文件等。中間過程不贅述了,無非是按照文件中的格式,正則表達式提取出成語(以及拼音),整理清洗后共計31063個條目。

中華成語大詞典

折騰了一番,利用pypinyin將成語轉拼音,再用pandas查詢的結果。
不考慮輕聲的拼音,整理出的成語接龍必殺技如下:

成語 拼音 成語 拼音
放蕩形骸 fàng dàng xíng hái 言簡意該 yán jiǎn yì gāi
春夢無痕 chūn mèng wú hén 弄兵潢池 nòng bīng huáng shi
唐臨晉帖 táng lín jìn tiē 七拼八湊 qī pīn bā còu
發蒙解縛 fā méng jiě fu 張牙舞爪 zhāng yá wǔ zhǎo
作好作歹 zuò hǎo zuò dǎi 衣食稅租 yī shí shuì zū
完美無疵 wán měi wú cī 敲骨榨髓 qiāo gǔ zhà suǐ
鋸牙鉤爪 jù yá gōu zhǎo 心潮澎湃 xīn cháo pēng pài
同源異派 tóng yuán yì pài 云期雨約 yún qī yǔ yuē
撮科打閧 cuō kē dǎ hòng 成龍配套 chéng lóng pèi tào
膏梁紈裦 gāo liáng wán fóu 無理取鬧 wú lǐ qǔ nào
插圈弄套 chā quān nòng tào 長篇大套 cháng piān dà tào
服服貼貼 fú fú tiē tiē 老蚌珠胎 lǎo bàng zhū tāi
牙簽玉軸 yá qiān yù zhóu 牙簽犀軸 yá qiān xī zhóu
狼艱狽蹶 láng jiān bèi juě 東挪西湊 dōng nuó xī còu
做好做歹 zuò hǎo zuò dǎi 七擔八挪 qī dān bā nuó
桑間之約 sāng jiān zhī yuē 血肉模糊 xuè ròu mó hu
惡跡昭著 è jì zhāo zhe 彰明昭著 zhāng míng zhāo zhe
一針見血 yī zhēn jiàn xiě 敵王所愾 dí wáng suǒ kài
百年之約 bǎi nián zhī yuē 不尷不尬 bù gān bù gà
為非作歹 wéi fēi zuò dǎi 輕描淡寫 qīng miáo dàn xiě
叢輕折軸 cóng qīng zhé zhóu 孽根禍胎 niè gēn huò tāi
打悶葫蘆 dǎ mèn hú lu 膏粱紈袴 gāo liáng wán kù
與時消息 yǔ shí xiāo xi 火耕水耨 huǒ gēng shuǐ nòu
唯唯否否 wěi wěi fǒu fǒu 甕中捉鱉 wèng zhōng zhuō biē
豐神綽約 fēng shén chuò yuē 握粟出卜 wò sù chū bo
生搬硬套 shēng bān yìng tào 心驚膽顫 xīn jīng dǎn chàn
龍血鳳髓 lóng xuè fèng suǐ 懷著鬼胎 huái zhe guǐ tāi
隱隱約約 yǐn yǐn yuē yuē 言簡意賅 yán jiǎn yì gāi
人民城郭 rén mín chéng guō 牙簽萬軸 yá qiān wàn zhóu
失馬塞翁 shī mǎ sài wēng 車馬輻輳 chē mǎ fú còu
鶯期燕約 yīng qī yàn yuē 相忘形骸 xiāng wàng xíng hái
殺人如蒿 shā rén rú hāo 秉鈞當軸 bǐng jūn dāng zhóu
不落俗套 bù luò sú tào 依樣葫蘆 yī yàng hú lu
雕心鷹爪 diāo xīn yīng zhǎo 換骨脫胎 huàn gǔ tuō tāi
東補西湊 dōng bǔ xī còu 鷹心雁爪 yīng xīn yàn zhǎo
索垢尋疵 suǒ gòu xún cī 等米下鍋 děng mǐ xià guō
捶骨瀝髓 chuí gǔ lì suǐ 金屋嬌娘 jīn wū jiāo niáng
刀槍入庫 dāo qiāng rù kù 伐毛換髓 fá máo huàn suǐ
深入骨髓 shēn rù gǔ suǐ 力有未逮 lì yǒu wèi dǎi
深刺腧髓 shēn cì shù suǐ 病入骨髓 bìng rù gǔ suǐ
語簡意賅 yǔ jiǎn yì gāi 心懷鬼胎 xīn huái guǐ tāi
敲膏吸髓 qiāo gāo xī suǐ 榆木疙瘩 yú mù gē da
倒廩傾囷 dǎo lǐn qīng qūn 洶涌澎湃 xiōng yǒng péng pài
吹唇唱吼 chuī chún chàng hǒu 敲骨吸髓 qiāo gǔ xī suǐ
膏粱紈裦 gāo liáng wán fóu 半間不界 bàn gān bù gà
洶涌彭湃 xiōng yǒng péng pài 魚封雁帖 yú fēng yàn tiē
說好說歹 shuō hǎo shuō dǎi 賞善罰否 shǎng shàn fá fǒu
大醇小疵 dà chún xiǎo cī 東鱗西爪 dōng lín xī zhǎo
泣血稽顙 qì xuè jī sǎng 黏吝繳繞 nián lìn jiǎo rào
披毛求疵 pī máo qiú cī 鼓鼓囊囊 gǔ gǔ nāng nāng
證龜成鱉 zhèng guī chéng biē 鐘鼎人家 zhōng dǐng rén jia
尺二冤家 chǐ èr yuān jia 四方輻輳 sì fāng fú còu
易子析骸 yì zi xī hái 阿家阿翁 ā gū ā wēng
同仇敵愾 tóng chóu dí kài 踉踉蹌蹌 liàng liàng qiàng qiàng
指囷相贈 zhǐ què xiāng zèng 將蝦釣鱉 jiāng xiā diào biē
撓喉捩嗓 náo hóu liè sǎng 辭簡義賅 cí jiǎn yì gāi
濁骨凡胎 zhuó gǔ fán tāi 麗藻春葩 lì zǎo chūn pā
雪泥鴻爪 xuě ní hóng zhǎo 壞裳為褲 huài shang wéi kù
牙簽錦軸 yá qiān jǐn zhóu 若敖鬼餒 ruò áo guǐ něi
夾槍帶棍 jiā qiāng dài gùn 肉眼凡胎 ròu yǎn fán tāi
魂飛膽顫 hún fēi dǎn chàn 半間半界 bàn gān bàn gà
魂驚膽顫 hún jīng dǎn chàn 龍游曲沼 lóng yóu qū zhǎo
榆木圪垯 yú mù gē da 翠圍珠繞 cuì wéi zhū rào
救過不給 jiù guò bù gěi 剝膚及髓 bō fū jí suǐ
吹毛索疵 chuī máo suǒ cī 雪鴻指爪 xuě hóng zhǐ zhǎo
花枝招顫 huā zhī zhāo chàn 雷驚電繞 léi jīng diàn rào
一鱗片爪 yī lín piàn zhǎo 伐毛洗髓 fá máo xǐ suǐ
鴻泥雪爪 hóng ní xuě zhǎo 洶涌渒湃 xiōng yǒng pài pài
先斬后奏 xiān zhǎn hòu zòu 抽抽噎噎 chōu chōu yē yē
羹藜含糗 gēng lí hán qiǔ 八音迭奏 bā yīn dié zòu
魚釜塵甑 yú fǔ chén zèng 嫌好道歹 xián hǎo dào dǎi
群輕折軸 qún qīng zhé zhóu 吹花嚼蕊 chuī huā jiáo ruǐ
余音繚繞 yú yīn liáo rào 一推兩搡 yī tuī liǎng sǎng
插架萬軸 chā jià wàn zhóu 幽期密約 yōu qī mì yuē
青鞋布襪 qīng xié bù wà 人涉卬否 rén shè áng fǒu
飾垢掩疵 shì gòu yǎn cī 東游西逛 dōng yóu xī guàng
一鱗半爪 yī lín bàn zhǎo 東拼西湊 dōng pīn xī còu
枉曲直湊 wǎng qǔ zhí còu 不識好歹 bù shí hǎo dǎi
片鱗半爪 piàn lín bàn zhǎo 不知好歹 bù zhī hǎo dǎi
批毛求疵 pī máo qiú cī 油頭光棍 yóu tóu guāng gùn
駢首就逮 pián shǒu jiù dǎi 鴻篇巨著 hóng piān jù zhe
珠圍翠繞 zhū wéi cuì rào 刀耕火耨 dāo gēng huǒ nòu
深耕易耨 shēn gēng yì nòu 四肢百骸 sì zhī bǎi hái
應名點卯 yìng míng diǎn mǎo 鸞鳴鳳奏 luán míng fèng zòu
豐姿綽約 fēng zī chuò yuē 河東獅吼 hé dōng shī hǒu
椎膚剝髓 chuí fū bō suǐ 敲骨取髓 qiāo gǔ qǔ suǐ
土木形骸 tǔ mù xíng hái 自出機軸 zì chū jī zhóu
一鱗一爪 yī lín yī zhǎo 淪肌浹髓 lún jī jiā suǐ
秉鈞持軸 bǐng jūn chí zhóu 裊裊娜娜 niǎo niǎo nuó nuó
同心敵愾 tóng xīn dí kài 龍肝鳳髓 lóng gān fèng suǐ
刮垢磨痕 guā gòu mó hén 鼓吻奮爪 gǔ wěn fèn zhǎo
黃鍾瓦缶 huáng zhōng wǎ fǒu 不間不界 bù gān bù gà
阿姑阿翁 ā gū ā wēng 不置可否 bù zhì kě fǒu
龍肝豹胎 lóng gān bào tāi 不越雷池 bù yuè léi shi
子丑寅卯 zi chǒu yín mǎo 娉婷裊娜 pīng tíng niǎo nuó
撮科打哄 cuō kē dǎ hòng 不哼不哈 bù hēng bù hā
沒頭蒼蠅 méi tóu cāng ying 錦囊玉軸 jǐn náng yù zhóu
饑寒交湊 jī hán jiāo còu 甕中之鱉 wèng zhōng zhī biē
雕心雁爪 diāo xīn yàn zhǎo 戳心灌髓 chuō xīn guàn suǐ
拉幫結派 lā bāng jié pài 進退可否 jìn tuì kě fǒu
痛入骨髓 tòng rù gǔ suǐ 放浪形骸 fàng làng xíng hái
進可替否 jìn kě tì fǒu 恨入骨髓 hèn rù gǔ suǐ
大大咧咧 dà dà liē liē 鴻飛雪爪 hóng fēi xuě zhǎo
十捉九著 shí zhuō jiǔ zhe 韓盧逐逡 hán lú zhú qūn
門不夜扃 mén bù yè jiōng 行眠立盹 xíng mián lì dǔn
整本大套 zhěng běn dà tào 淪浹肌髓 lún jiā jī suǐ
以規為瑱 yǐ guī wéi tiàn 空頭支票 kōng tóu zhī piào
雪中鴻爪 xuě zhōng hóng zhǎo 羹藜唅糗 gēng lí hán qiǔ
背盟敗約 bèi méng bài yuē 鑿骨搗髓 záo gǔ dǎo suǐ
無所可否 wú suǒ kě fǒu 祝哽祝噎 zhù gěng zhù yē
澡垢索疵 zǎo gòu suǒ cī 獻可替否 xiàn kě tì fǒu
不猧不魀 bù wō bù gà 厲行節約 lì xíng jié yuē
麟肝鳳髓 lín gān fèng suǐ 蹈矩循彟 dǎo jǔ xún yuē
霧鱗云爪 wù lín yún zhǎo 三好兩歹 sān hǎo liǎng dǎi
吹葉嚼蕊 chuī yè jiáo ruǐ 獻替可否 xiàn tì kě fǒu
飛鴻雪爪 fēi hóng xuě zhǎo 重生爺娘 chóng shēng yé niáng
陳言老套 chén yán lǎo tào 露鈔雪纂 lù chāo xuě zuǎn
修鱗養爪 xiū lín yǎng zhǎo 怨入骨髓 yuàn rù gǔ suǐ
由博返約 yóu bó fǎn yuē 龍鳴獅吼 lóng míng shī hǒu
浮花浪蕊 fú huā làng ruǐ 換骨奪胎 huàn gǔ duó tāi
龍蟠虎繞 lóng pán hǔ rào 吹毛求疵 chuī máo qiú cī
敲骨剝髓 qiāo gǔ bāo suǐ 說好嫌歹 shuō hǎo xián dǎi
就棍打腿 jiù gùn dǎ tuǐ 婆婆媽媽 pó po mā mā
握拳透爪 wò quán tòu zhǎo 劣跡昭著 liè jì zhāo zhe
口諧辭給 kǒu xié cí gěi 剔抽禿刷 tī chōu tū shuā
風姿綽約 fēng zī chuò yuē 滴水不羼 dī shuǐ bù chàn
瑤草琪葩 yáo cǎo qí pā 祝鯁祝噎 zhù gěng zhù yē
東閃西挪 dōng shǎn xī nuó 匡其不逮 kuāng qí bù dǎi
浹淪肌髓 jiā lún jī suǐ 義正辭約 yì zhèng cí yuē
桑中之約 sāng zhōng zhī yuē 犬牙鷹爪 quǎn yá yīng zhǎo
四體百骸 sì tǐ bǎi hái 根連株逮 gēn lián zhū dǎi

類似痛定思痛、防不勝防、數不勝數、微乎其微、忍無可忍、惺惺惜惺惺……這樣的首尾兩字均相同的成語也沒有收入了。個人覺得這種只是屬于死循環,而不是死胡同的必殺。
另外盛行的‘一個頂倆’沒包括在上面,因為我收集到的成語詞典中沒有這一條。

參考資料
  1. pypinyin 0.37.0 文檔
  2. xpinyin 0.5.6
  3. SnowNLP: Simplified Chinese Text Processing
  4. 小明 NLP — 輕量級中文自然語言處理工具
  5. 利用python實現漢字轉拼音的2種方法
  6. Python中文分詞工具大合集:安裝、使用和測試
  7. chinese-poetry: 最全中文詩歌古典文集數據庫
  8. 【Python】使用python實現漢字轉拼音(2018.12更新)
  9. 漢典網
  10. Github: pwxcoo-chinese-xinhua
image.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,797評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,179評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 175,628評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,642評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,444評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,948評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,040評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,185評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,717評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,602評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,794評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,316評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,045評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,418評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,671評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,414評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,750評論 2 370