为了陪孩子玩成语接龙,于是想找出那些一击必杀的成语,类似‘一个顶俩’【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参数是旋转返回结果音调位置、声母韵母首字母还是全部等等。总之,pypinyin的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