我正在寻找一个带2个字符串的算法,它会给我一个“相似因子”。
基本上,我的输入可能拼写错误,字母转换等,我必须在可能的值列表中找到最接近的匹配项。
这不适用于在数据库中搜索。我将有一个内存列表,其中包含500个左右的字符串,所有字符串都不超过30个字符,因此它可能相对较慢。
我知道这存在,我以前见过它,但我记不起它的名字了。
编辑:感谢指出Levenshtein和汉明。 现在,我应该实施哪一个?它们基本上测量不同的东西,两者都可以用于我想要的东西,但我不确定哪一个更合适。
我已经阅读了算法,汉明似乎显然更快。既然都不会检测到两个被转置的角色(即乔丹和乔丹),我相信这将是一个常见的错误,这对我想要的更准确? 有人可以告诉我一些关于权衡的事情吗?
答案 0 :(得分:35)
好的,所以标准算法是:
1)Hamming distance 只适用于相同长度的字符串,但非常有效。基本上它只是计算不同字符的数量。对自然语言文本的模糊搜索没有用。
2)Levenstein distance。 Levenstein距离根据将一个弦转换为另一个弦所需的“操作”的数量来测量距离。这些操作包括插入,删除和替换。计算Levenstein距离的标准方法是使用动态规划。
3)Generalized Levenstein/(Damerau–Levenshtein distance) 该距离还考虑了单词中字符的转置,并且可能是最适合手动输入文本的模糊匹配的编辑距离。计算距离的算法比Levenstein距离更复杂(检测换位并不容易)。最常见的实现是bitap算法的修改(如grep)。
一般情况下,你可能想要考虑在某种基于k-d树的最近邻搜索中实现的第三个选项的实现
答案 1 :(得分:4)
Damerau-Levenshtein distance类似于Levenshtein距离,但也包括两个字符的转置。维基百科页面(链接)包括伪代码,它应该是相当简单的实现。
答案 2 :(得分:3)
答案 3 :(得分:2)
您正在寻找Levenshtein distance