有没有一种方法可以计算字符串的一般“相似性得分”?在某种程度上,我不是将两个字符串放在一起比较,而是为每个字符串获取一些数字(散列),稍后可以告诉我两个字符串相似或不相似。两个相似的字符串应具有相似(接近)的哈希值。
让我们以这些字符串和分数为例:
Hello world 1000
Hello world! 1010
Hello earth 1125
Foo bar 3250
FooBarbar 3750
Foo Bar! 3300
Foo world! 2350
可以看到Hello world!和Hello world很相似,分数也很接近。
这样,找到与给定字符串最相似的字符串将通过从其他分数中减去给定字符串分数然后对它们的绝对值排序来完成。
最佳答案
我相信您正在寻找的是一个 Locality Sensitive Hash .虽然大多数哈希算法的设计使得输入的微小变化会导致输出发生巨大变化,但这些哈希算法却恰恰相反:输入的微小变化会按比例产生输出的微小变化。
正如其他人所提到的,将多维映射强制转换为二维映射存在固有问题。这类似于创建地球的平面 map ……您永远无法在平面上准确地表示球体。您能做的最好的事情就是找到一个 LSH,该 LSH 针对您用来确定字符串是否“相似”的任何功能进行了优化。
关于algorithm - 字符串相似度分数/哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4323977/