Answers:
最接近的就像Jan提到的,Levenstein的距离(也通常称为编辑距离)。
在信息论和计算机科学中,Levenshtein距离是用于度量两个序列之间差异的字符串量度。非正式地,两个单词之间的Levenshtein距离是将一个单词转换为另一个单词所需的最小单字符编辑(即,插入,删除或替换)次数。
这是用于识别相似单词的非常常用的度量。Nltk已经有一个用于编辑距离度量的实现,可以通过以下方式调用它:
import nltk
nltk.edit_distance("humpty", "dumpty")
上面的代码将返回1
,因为两个单词之间只有一个字母不同。
除了此处的良好响应之外,您还可以尝试使用difflib python库中的SequenceMatcher。
https://docs.python.org/2/library/difflib.html
import difflib
a = 'Thanks for calling America Expansion'
b = 'Thanks for calling American Express'
seq = difflib.SequenceMatcher(None,a,b)
d = seq.ratio()*100
print(d)
### OUTPUT: 87.323943
现在考虑以下代码:
a = 'Thanks for calling American Expansion'
b = 'Thanks for calling American Express'
seq = difflib.SequenceMatcher(None,a,b)
d = seq.ratio()*100
print(d)
### OUTPUT: 88.88888
现在,您可以比较d值以评估相似性。
如果字典不太大,通常的方法是采用Levenshtein距离,该距离基本上是计算从一个单词到另一个单词必须进行的更改。更改包括更改字符,删除字符或添加字符。维基百科的一个例子:
lev(小猫,坐着)= 3
这是Wikibooks上的一些Python工具。
但是,计算这些距离的算法并不便宜。如果您需要大规模执行此操作,则有多种方法可以在二元语法向量上使用余弦相似度,如果您需要一次查找大量单词的匹配项,则可以更快,更轻松地进行分布。但是,它们仅是该距离的近似值。