是否有可用于查找相似(不一定相等)字符串的哈希函数?

Is there a hashing function that can be used in finding similar (not necessarily equal) strings?

我需要的是一个在固定数据大小上运行的散列函数,显然是出于非安全目的。它需要将相似的字符串映射到相似或相等的哈希值,换句话说,字符串中的微小变化不应该对哈希值产生任何变化或变化很小。

例如:我的名字是约翰我的名字是乔恩应该具有相同或非常相似的哈希值。 我的名字是约翰你的名字是利亚姆应该会产生一些相似的散列。 我叫约翰我住在美国 应该给出完全不同的哈希值。 等等!

是否有用于类似目的的散列函数?

听起来您正在寻找 Levenshtein 距离(参见 http://en.wikipedia.org/wiki/Levenshtein_distance)。

在各种语言中有大量的实现。

没有可靠的方法可以做到这一点。这是由于鸽巢原理;两个短字符串可以 "close" 的方式比两个长字符串少得多。

但是,有 模糊哈希 的概念,这可能会让您了解其中的一部分。

我认为在这种情况下 Jacard 指数可能是 helpful.The Jaccard 指数是衡量两个集合相似程度的简单方法。它只是集合的交集大小与集合并集大小的比率。

有一个博客在讨论 Jaccard Similarity Index for measuring Document Similarity,我发现它更接近您的需求。