我正在使用卡内基梅隆大学发音词典在 Python 中检测押韵,并且想知道:如何估计两个单词之间的音素相似度?换句话说,是否有一种算法可以识别“手”和“计划”比“手”和“薯条”更接近押韵的事实?
一些背景:起初,如果两个单词的主要重读音节和所有后续音节相同,我愿意说两个单词押韵(如果你想在 Python 中复制,则为 c06d ):
def create_cmu_sound_dict():
final_sound_dict = {}
with open('resources/c06d/c06d') as cmu_dict:
cmu_dict = cmu_dict.read().split("\n")
for i in cmu_dict:
i_s = i.split()
if len(i_s) > 1:
word = i_s[0]
syllables = i_s[1:]
final_sound = ""
final_sound_switch = 0
for j in syllables:
if "1" in j:
final_sound_switch = 1
final_sound += j
elif final_sound_switch == 1:
final_sound += j
final_sound_dict[word.lower()] = final_sound
return final_sound_dict
如果我再跑
print cmu_final_sound_dict["hands"]
print cmu_final_sound_dict["plans"]
我可以看到手和计划听起来非常相似。我可以自己估计这种相似性,但我想我应该问:是否有复杂的算法可以将数学值与这种程度的声音(或听觉)相似性联系起来?也就是说,可以使用哪些算法或程序包来数学化两个单词之间的音素相似度?我意识到这是一个很大的问题,但如果其他人可以就这个问题提供任何建议,我将不胜感激。