為了陪孩子玩成語接龍,于是想找出那些一擊必殺的成語,類似‘一個頂倆’【yí, gè,dǐng',li?!窟@種。
在網上搜索了下,從漢典網等網站上可以查詢成語。另外,Github也有查詢成語的API,不過為了方便,還是決定自己動手。
pypinyin與xpinyin包
Python實現漢字轉拼音,常用的包是pypinyin 0.37.0和xpinyin 0.5.6兩個。
另外,SnowNLP: Simplified Chinese Text Processing和小明 NLP也是有漢字轉拼音功能的,但這兩個包不是專注于漢字轉拼音,因此相對而言比起前面提到的pypinyin和xpinyin,在拼音這一項上要弱許多,比如無法給出拼音的音調,有些不是很生僻的成語也不能給出拼音(如下圖),所以只重點去試了前面提到的兩個包。
默認參數
總的來說,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'的結果出現。
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 | ㄙ ㄏ ㄏ ㄔ |
pypinyin的load_phrases_dict和load_single_dict命令
前面已經提到pypinyin的結果正確率更高,但這并不意味著pypinyin返回的結果就百分百一定正確。在將接龍成語轉拼音時也發現,極少情況下,xpinyin返回了正確結果,pypinyin的結果反而有誤。對于這些被發現的錯誤拼音,可以通過** 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 |
類似痛定思痛、防不勝防、數不勝數、微乎其微、忍無可忍、惺惺惜惺惺……這樣的首尾兩字均相同的成語也沒有收入了。個人覺得這種只是屬于死循環,而不是死胡同的必殺。
另外盛行的‘一個頂倆’沒包括在上面,因為我收集到的成語詞典中沒有這一條。
參考資料
- pypinyin 0.37.0 文檔
- xpinyin 0.5.6
- SnowNLP: Simplified Chinese Text Processing
- 小明 NLP — 輕量級中文自然語言處理工具
- 利用python實現漢字轉拼音的2種方法
- Python中文分詞工具大合集:安裝、使用和測試
- chinese-poetry: 最全中文詩歌古典文集數據庫
- 【Python】使用python實現漢字轉拼音(2018.12更新)
- 漢典網
- Github: pwxcoo-chinese-xinhua