我们需要在MySQL表中存储一个文本字段(比如2000个字符)及其唯一的哈希值(比如SHA1)。
为了测试MySQL表中已存在的文本,我们生成文本的SHA1,并查找它是否存在于唯一字段hash
中。
现在让我们假设有两个文本:
请注意细微差别。
假设1已经添加到数据库中,2的检查将不起作用,因为它们的SHA1哈希值将完全不同。
一个显而易见的解决方案是使用Leveinstein距离或difflib迭代所有已添加的文本字段,以精确匹配MySQL表中的匹配。
但这不是以绩效为导向的。 是否存在与文本内容相关的良好哈希算法?即为非常相似的文本生成的两个哈希本身非常相似。
这样在将它们添加到MySQL表之前检测可能的重复项会更容易。
答案 0 :(得分:3)
听起来你正在寻找对局部敏感的散列。除了Wikipedia article之外,在此网站上运行搜索以获得一些指示。
答案 1 :(得分:1)
我非常怀疑你所寻找的任何东西,所以我提出了一个更简单的解决方案:
提出一种简单的文本规范化算法,例如:
然后,计算的散列并将其存储在单独的列(normalizedHash
)中,或将ID存储到规范化散列表中。然后,您可以通过标准化内容比较两个不同的条目。