1

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

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

  1. “这是将存储在数据库中的文本,并将生成其哈希”
  2. “这是文本,将存储在数据库中,并将生成其哈希值。”

注意细微的差别。

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

一种明显的解决方案是使用 Leveinstein 距离或 difflib 遍历所有已添加的文本字段,以从 MySQL 表中精确匹配。

但这不是以性能为导向的。是否有与文本内容相关的良好散列算法?即为非常相似的文本生成的两个散列本身将非常相似。

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

4

2 回答 2

3

听起来您正在寻找对位置敏感的散列。除了Wikipedia 文章之外,在此站点上运行搜索以获得一些指示。

于 2013-04-10T07:05:30.683 回答
1

我非常怀疑您正在寻找的任何东西是否存在,因此我提出了一个更简单的解决方案:

想出一个简单的算法来规范你的文本,例如:

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

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

于 2013-04-10T07:03:19.210 回答