【发布时间】:2014-12-15 23:28:48
【问题描述】:
我正在使用卡内基梅隆大学发音词典在 Python 中检测韵律,并且想知道:如何估计两个单词之间的音素相似度?换句话说,是否有一种算法可以识别“手”和“计划”比“手”和“薯条”更接近押韵的事实?
一些上下文:起初,如果两个单词的主要重读音节和所有后续音节相同,我愿意说两个词押韵(c06d,如果你想在 Python 中复制):
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"]
我可以看到手和计划听起来非常相似。我可以自己估计这种相似性,但我想我应该问:是否有复杂的算法可以将数学值与这种程度的声音(或听觉)相似性联系起来?也就是说,可以使用哪些算法或程序包来数学化两个单词之间的音素相似度?我知道这是一个很大的问题,但如果其他人可以就这个问题提供任何建议,我将不胜感激。
【问题讨论】:
-
您是否在寻找类似 Soundex 算法 (en.wikipedia.org/wiki/Soundex) 的东西?
-
我不能代表反对者发言,但给出接近投票的原因是您的问题看起来像是asking for recommendations。您可能想改写它以更清楚地问“我如何做 X?”而不是“我应该使用哪个工具来做 X?”
-
我认为这些问题是同义词(做某事意味着/需要一种方法来做那件事),但如果有帮助,我会很乐意重新措辞...
-
@acfrancis Soundex 看起来很有趣,但它似乎更像是一种散列算法,而不是一种可以估计两个单词之间音素相似度的方法
-
是的,我认为你是对的。不幸的是,我不知道任何其他语音算法。 Levenshtein 距离会告诉您两个单词在写作方面有多相似,但不是基于它们的发音。
标签: python algorithm nlp linguistics phoneme