1

我想从一个文本(在我的例子中是html)中制作一种哈希键,它可以匹配/比较其他类似文本的哈希

匹配文本的前:

  • “2012/10/01 这是我的网页 #1”+ 100k_of_same_text + random_words_1 + ..
  • “2012/10/02 这是我的网页 #2”+ 100k_of_same_text + random_words_2 + ..
  • ...
  • “2012/10/02 这是我的网页 #2”+ 100k_of_same_text + random_words_3 + ..

到目前为止,我已经考虑过删除数字和标签,但这仍然会留下随机单词。

有什么东西可以剂量吗?

我对服务器具有 root 访问权限,因此我可以添加任何必要的 UDF,如果需要,我可以用 c 或其他语言进行处理。

理想的情况是一个类似的函数generateSimilarHash(text)和一个compareSimilarHashes(hash1,hash2)返回匹配文本的概率的函数。

像 compare(text1,text2) 这样的任何函数都不会像我的情况那样工作,因为我有很多页面要比较(目前约 2000 万)

欢迎任何建议!


更新:

我指的hash function是维基百科上描述的:

哈希函数是将可变长度的大型数据集映射到固定长度的较小数据集的任何算法或子程序。

在我的情况下,固定长度部分不是必需的。

4

3 回答 3

0

听起来您需要使用 diff 之类的程序。

如果您只是想比较文本,那么哈希不是可行的方法,因为输入的细微差异会导致输出的完全差异和完全差异。(因此它们用于编码密码和保护文本的原因)。字符差异程序非常复杂,除非您真的对它们的工作方式感兴趣并尝试编写自己的程序,否则我只会使用此处显示的解决方案,使用 sdiff 来获取百分比。

GNU Diff 的百分比值

于 2013-02-07T21:14:50.517 回答
0

您可以使用某种 Levenshtein 距离算法。这适用于小块文本,但我很确定类似的东西可以应用于大块文本。

参考:http ://en.m.wikibooks.org/wiki/Algorithm_implementation/Strings/Levenshtein_distance

于 2013-02-07T21:19:49.620 回答
0

我发现网页中的标签顺序可以创建一个非常独特的模式,即使部分文本/ css /脚本发生变化,它也保持不变。所以我制作了一个由标签顺序生成的字符串(例如:html head meta title body div table tr td span bold...=>“ hhmtbdttsb...”),然后我只是在这些字符串之间进行完全匹配。我什至可以应用 Levenshtein 距离算法并获得准确的结果。

如果我没有 html,我会使用标点符号/结束行进行拆分,或类似的东西。

于 2013-02-18T12:46:41.943 回答