algorithm - 字符串相似度分数/哈希

标签 algorithm hash similarity

有没有一种方法可以计算字符串的一般“相似性得分”?在某种程度上,我不是将两个字符串放在一起比较,而是为每个字符串获取一些数字(散列),稍后可以告诉我两个字符串相似或不相似。两个相似的字符串应具有相似(接近)的哈希值。

让我们以这些字符串和分数为例:

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/

相关文章:

algorithm - BF - 生成伪随机数

ruby - 在 Ruby 中处理染色体数据

python - 获得相似的词不再适用于 spacy

machine-learning - 我可以使用SVM进行相似度匹配吗

Mysql - "Best Match"搜索算法

algorithm - 计算哪些字符串将具有相同的散列

php - 如何将多维数组转换为一维数组?

perl - perl 中的 SHA256 摘要

ruby - => 和 : in Ruby? 是什么

java - 余弦相似度