2011-04-13 83 views
10

我正在做一些网络爬行类型的东西,我正在寻找网页中的某些术语,并在页面上查找它们的位置,然后将其缓存以供以后使用。我希望能够定期检查页面是否有任何重大更改。简单地把当前的日期和时间放在页面上就可以挫败像md5这样的东西。是否有一种容忍细微差别的哈希算法?

是否有任何哈希算法适用于这样的事情?

+6

不,这就是所有哈希算法的重点,当输入只改变一点时,它们会改变很多。 – halfdan 2011-04-13 22:13:23

+1

@halfdan - [Wikipedia will not beagree with you](http://en.wikipedia.org/wiki/Hash_function#Finding_similar_records)。太糟糕了,他们没有提到任何算法,但声学指纹识别除此之外。 – 2011-04-13 22:43:50

+0

[Hashing Similarity]的可能重复(http://stackoverflow.com/questions/4834301/hashing-similarity) – 2011-04-13 23:45:11

回答

-4

我很遗憾地说,但哈希算法正是。 Theres没有能力容忍微小的差异。你应该采取另一种方法。

+1

好的,也许它不会被称为哈希算法。但这听起来并不像我想要的那样混乱。只有它是否应该被称为哈希算法。 – 2011-04-13 22:32:45

+0

我刚刚回答你的问题。你问:“是否有一种容忍细微差别的哈希算法?”我说没有。也许你应该问另一件事。 – 2011-04-14 00:10:06

3

这可能是一个使用Levenshtein distance metric的好地方,它可以量化将一个序列转换为另一个序列所需的编辑量。

这种方法的缺点是您需要保留每个页面的全文,以便以后可以进行比较。另一方面,使用基于散列的方法,您只需存储某种小型计算值,而不需要先前的全文进行比较。

您也可以尝试某种混合方法 - 让散列算法告诉您已做出任何更改,并将其用作触发器以检索文档的存档副本以进行更严格的(Levenshtein)比较。

1

http://www.phash.org/做了这样的图像。 jist:拍摄图像,模糊图像,将其转换为灰度图,进行离散余弦变换,然后查看结果的左上象限(重要信息在哪里)。然后为每个小于平均值的值记录一个0,为每个值记录一个大于平均值的值。对于小的变化,结果相当不错。

Min-Hashing是另一种可能性。在文本中查找功能并将其记录为值。将所有这些值连接起来构成一个哈希字符串。

对于上述两者,请使用有利位置树,以便搜索近点。

相关问题