python 两个冒号是什么成语_python查询双押词

作为一个妄想成为rapper的porgrammer,

写歌词想不出双押可是个matter,

我又不想每次点开我的browser,

不亲自做点什么哪配当coder!

之前我们学习过jieba分词库,用于中文分词。可是押韵看的是拼音,jieba分词显然不好用了,但是别担心,python还有个xpinyin库,可以将中文转换成拼音,只需要先pip install,再导入即可:

from xpinyin import Pinyin

我的思路是这样的:输入要查询的词语后,利用xpinyin库分离出拼音(通常押韵可以简略地看做后面的元音相同),然后我们便通过正则表达式过滤掉拼音开头的辅音,留下的便是韵脚。将这个韵脚字符串与事先准备好的txt格式的词库(网上随意下载)进行遍历比较,两个字的韵脚均相同,即为要寻找的双押词,把词语输出即可。

下面是一些关键步骤的代码:

由于我下载的词库格式有问题,词语之间没有分隔,所以我先用jieba分词把词语分开:

word_lst = [] #用于存储划分后的词语

for line in open('ch_dict.txt',errors='ignore'):

item = line.strip('\n\r').split('\t') #制表格切分

tags = jieba.analyse.extract_tags(item[0]) #jieba分词

for t in tags:

word_lst.append(t)

将输入的词语转换成拼音并提取韵脚:

p = Pinyin()

s0=str(input())

s0=p.get_pinyin(s0).split('-') #转换后的拼音是“xx-xx”格式的,因此通过“-”将拼音分割

#提取韵脚

s_first=re.findall(r".*[b,c,d,f,h,j,k,l,m,p,q,r,s,t,w,x,y,z](.*).*",s0[0])

s_last=re.findall(r".*[b,c,d,f,h,j,k,l,m,p,q,r,s,t,w,x,y,z](.*).*",s0[1])

然后遍历word_lst,用同样的方法提取韵脚,与s_first、s_last比较,但此时应注意,由于词库里有超过两个字的词,所以为了查找双押,应该改变字符串的索引位置:

s1=p.get_pinyin(str(word_lst[i])).split('-') #将词库的每个词转换成拼音

正则表达式分别取s1[-1]和s1[-2],即最后两个字

遍历过程中进行判断,将符合条件的词语输出:

if s_first==s1_first and s_last==s1_last and str(word_lst[i]) not in s:

print(str(word_lst[i]))

s.append(str(word_lst[i])) #s用于判断词语是否重复,初始化为空列表

写完收工,接下来写歌去吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值