算法 – 字符串相似度得分/散列

有没有一种方法来计算类似字符串的一般“相似性得分”?在一种方式,我不是比较两个字符串在一起,而是我得到一些数字(哈希)每个字符串,以后可以告诉我两个字符串是或不相似。两个相似的字符串应该有类似的(close)哈希。

让我们考虑这些字符串和分数作为示例:

Hello world                1000
Hello world!               1010
Hello earth                1125
Foo bar                    3250
FooBarbar                  3750
Foo Bar!                   3300
Foo world!                 2350

你可以看到Hello world!和Hello世界是相似的,他们的得分彼此接近。

这样,找到与给定字符串最相似的字符串将通过从其他得分中减去给定的字符串得分,然后排序其绝对值。

我相信你正在寻找的是称为Locality Sensitive Hash.而大多数散列算法设计使得输入的小变化导致输出的大变化,这些散列尝试相反:输入的小变化生成比例小的输出变化。

如其他人所提到的,存在将多维映射强制为2维映射的固有问题。它类似于创建一个地球的平面地图…你永远不能准确地表示一个球体在平坦的表面上。最好的办法是找到一个LSH,它为你使用的任何功能进行了优化,以确定字符串是否“相似”。

翻译自:https://stackoverflow.com/questions/4323977/string-similarity-score-hash

转载注明原文:算法 – 字符串相似度得分/散列