我目前正在根据CMU发音词典生成一个与输入词押韵的单词列表,我设法将所有单词排列到一个字典中,它们的键是表示它们值的字符串列表。然而,由于一些押韵的基础上的最后一个元音,我有点困在寻找如何处理的情况下,包含一个以上的单词
def dotheyrhyme(filename,word):
rhymes = {}
list = []
with open(filename) as f:
text = f.readlines()[56:]
for line in text:
splitline = line.split(" ")
rhymes[str(splitline[0])] = "".join(splitline[1:])
f.close()
comparer = rhymes[word.upper()].rstrip().split(" ")
return comparer
我计划使用comparer变量作为基线,并且相信反转这个变量也是一个很好的方法,但是我迷失了或者过度思考如何比较后面的最后一个元音和字母是否相同并相应地追加?在
示例:
^{pr2}$与…押韵
{'AND': 'AH0' 'N' 'D'}
但这两个不押韵
{'YELLOW': 'Y' 'EH1' 'L' 'OW0'}
以及
{HELLO: 'HH' 'AH0' 'L' 'OW1'}
但是我想不出什么方法来抵消长度的变化和多个元音。在
谢谢你的帮助!在
你得从头开始比较。有一些特殊的算法和数据结构可以帮助处理像您这样的情况—您可以检查Aho-Corasick algorithm。在
但在简单的情况下,你需要将这些单词按相反的顺序进行比较,并找到高于某个阈值的常见子串,将这些单词称为押韵,例如:
算法的作用
rhymes
字典中获取声音列表(为了清晰起见,我建议在押韵测试函数之外进行)。在zip
创建一个成对(或元组)列表。在找到最后一个元音需要有一组元音。在那之后,你只需要反向迭代列表。在
如果你对其他想法持开放态度,你也可以看看这个库,它可以为你找到押韵:https://pypi.org/project/pronouncing/
相关问题 更多 >
编程相关推荐