我想从一个文本(在我的例子中是html)中制作一种哈希键,它与其他类似文本的哈希匹配/比较
ex匹配文本:
到目前为止,我一直在考虑删除数字和标签,但是仍然会留下随机字样。
那有什么剂量吗?
我有对服务器的root权限,所以我可以添加任何必要的UDF,如果需要,我可以用c或其他语言进行处理。
理想的是像generateSimilarHash(text)
这样的函数和另一个函数compareSimilarHashes(hash1,hash2)
,它将返回匹配文本的过程。
像compare(text1,text2)这样的函数不能像我的情况一样工作,因为我有很多页面需要比较(目前大约20 mil)
欢迎任何建议!
我正在引用维基百科上描述的hash function
:
哈希函数是映射大数据的任何算法或子例程 可变长度集到固定长度的较小数据集。
我的情况下不需要固定长度部分。
答案 0 :(得分:0)
听起来你需要利用像diff这样的程序。
如果您只是想比较文本,则哈希不是要走的路,因为输入的微小差异会导致输出的总差异和完全差异。 (因此它们被用于编码密码和安全文本的原因)。角色差异程序非常复杂,除非你真的对它们的工作方式感兴趣并且正在尝试自己编写,我会使用像sdiff这样的解决方案来获得百分比。
答案 1 :(得分:0)
你可以使用某种Levenshtein距离算法。这适用于小块文本,但我相信类似的东西可以应用于大块文本。
参考:http://en.m.wikibooks.org/wiki/Algorithm_implementation/Strings/Levenshtein_distance
答案 2 :(得分:0)
我发现网页中的标记顺序可以创建一个非常独特的模式,即使部分 text / css / 脚本也是如此改变。所以我创建了一个由标签顺序生成的字符串(例如:html head meta title body div table tr td span bold...
=>“hhmtbdttsb...
”)然后我只是在这些字符串之间进行完全匹配。我甚至可以应用Levenshtein距离算法并获得准确的结果。
如果我没有html,我会使用标点符号/结束行进行拆分或类似的事情。