我有一首诗,我希望Python代码只打印那些彼此押韵的单词。
到目前为止,我能够:
wordpunct_tokenize()
cmudict.entries()
生成另一个列表,其中元素作为最后一个单词及其发音。 我坚持下一步。我该如何尝试匹配这些发音?总而言之,我的主要任务是找出两个给定的单词是否押韵。如果是押韵,则返回True
,否则False
。
答案 0 :(得分:11)
Pronouncing
library做得很好。没有黑客攻击,快速加载,并且基于CMU发音词典,所以它是可靠的。
https://pypi.python.org/pypi/pronouncing
>>> import pronouncing
>>> pronouncing.rhymes("climbing")
['diming', 'liming', 'priming', 'rhyming', 'timing']
答案 1 :(得分:9)
Here我找到了一种使用NLTK找到给定单词的押韵的方法:
def rhyme(inp, level):
entries = nltk.corpus.cmudict.entries()
syllables = [(word, syl) for word, syl in entries if word == inp]
rhymes = []
for (word, syllable) in syllables:
rhymes += [word for word, pron in entries if pron[-level:] == syllable[-level:]]
return set(rhymes)
其中inp
是一个单词而level
表示韵文应该如何好。
所以你可以使用这个功能并检查两个单词押韵你是否可以检查一个是否在其他允许的押韵中:
def doTheyRhyme(word1, word2):
# first, we don't want to report 'glue' and 'unglue' as rhyming words
# those kind of rhymes are LAME
if word1.find(word2) == len(word1) - len(word2):
return False
if word2.find(word1) == len(word2) - len(word1):
return False
return word1 in rhyme(word2, 1)
答案 2 :(得分:2)
使用soundex或双metaphone来查明它们是否押韵。 NLTK似乎没有实现这些,但快速谷歌搜索显示了一些实现。