良好的哈希算法,接近原始文本输入,减少雪崩效应?

时间:2013-04-10 07:00:31

标签: python mysql string-matching

我们需要在MySQL表中存储一个文本字段(比如2000个字符)及其唯一的哈希值(比如SHA1)。 为了测试MySQL表中已存在的文本,我们生成文本的SHA1,并查找它是否存在于唯一字段hash中。

现在让我们假设有两个文本:

  1. “这是将存储在数据库中的文本,其哈希将生成”
  2. “这是文本,将存储在数据库中,并生成其哈希。”
  3. 请注意细微差别。

    假设1已经添加到数据库中,2的检查将不起作用,因为它们的SHA1哈希值将完全不同。

    一个显而易见的解决方案是使用Leveinstein距离或difflib迭代所有已添加的文本字段,以精确匹配MySQL表中的匹配。

    但这不是以绩效为导向的。 是否存在与文本内容相关的良好哈希算法?即为非常相似的文本生成的两个哈希本身非常相似。

    这样在将它们添加到MySQL表之前检测可能的重复项会更容易。

2 个答案:

答案 0 :(得分:3)

听起来你正在寻找对局部敏感的散列。除了Wikipedia article之外,在此网站上运行搜索以获得一些指示。

答案 1 :(得分:1)

我非常怀疑你所寻找的任何东西,所以我提出了一个更简单的解决方案:

提出一种简单的文本规范化算法,例如:

  • 规范化空白
  • 删除标点符号

然后,计算的散列并将其存储在单独的列(normalizedHash)中,或将ID存储到规范化散列表中。然后,您可以通过标准化内容比较两个不同的条目。