我正在使用Daitch-Mokotoff soundexing和Damerau-Levenshtein来查明用户条目和应用程序中的值是否“相同”。
Levenshtein距离应该被用作绝对值吗?如果我有一个20个字母的单词,那么4的距离就不那么糟了。如果这个单词有4个字母......
我现在正在做的是取距离/长度来获得更好地反映单词百分比变化的距离。
这是一种有效/经证实的方法吗?或者它是愚蠢的?
答案 0 :(得分:7)
Levenshtein距离应该是多少 用作绝对值?
这似乎取决于您的要求。 (澄清一点:Levenshtein距离是绝对值,但正如OP所指出的那样,原始值可能不如给定应用程序那么有用,因为它会考虑到单词的长度这是因为我们对距离本身的相似性更感兴趣。)
我正在使用Daitch-Mokotoff soundexing和Damerau-Levenshtein来 找出用户条目和值 在申请中是“相同的”。
听起来您正在尝试确定用户是否希望他们的条目与给定的数据值相同?
你在进行拼写检查吗?或者将无效输入符合一组已知值? 你的首要任务是什么?
您最终可能会以一种方式使用Levenshtein距离来确定是否应在建议列表中提供单词;以及另一种确定如何订购建议清单的方法。
在我看来,如果我正确地推断出你的目的,你想要测量的核心事物是相似性,而不是两个字符串之间的差异。因此,您可以使用Jaro or Jaro-Winkler distance,它会考虑字符串的长度和共同的字符数:
两个给出的Jaro距离dj 字符串s1和s2是
(m / |s1| + m / |s2| + (m - t) / m) / 3
其中:
- m是匹配字符数
- t是换位次数
Jaro-Winkler距离使用前缀 比例 p 更有利 对与之匹配的字符串的评分 开始设置前缀长度 l 。
答案 1 :(得分:0)
levenshtein距离是两个单词之间的相对值。比较LD与长度无关,例如
cat - > scat = 1(75%相似??)
差异 - >差异= 1(90%相似??)
这两个词的lev距离都是1,即它们相差一个字符,但是当与它们的长度相比时,第二组看起来“更”相似。
我使用soundexing对具有相同lev距离的单词进行排名,例如
cat
和fat
都有一个相对于kat
的LD,但是当使用soundex时,这个词更可能是kat而不是胖(假设这个词是拼写错误的,没有错误输入!)
所以简短的回答就是使用lev距离来确定相似性。