答案 0 :(得分:4)
在回答您的问题之前,请务必记住:
现在,我已回复了您提出的关于Github问题的问题here。
作为参考,这里有一些示例代码,您可以使用它们在散列后打印最终的近似重复文档。
# assuming that you have a dictionary with document id as the key and the document as the value:
# documents = { doc_id: doc } you can do:
from simhash import simhash
def split_hash(str, num):
return [ str[start:start+num] for start in range(0, len(str), num) ]
hashes = {}
for doc_id, doc in documents.items():
hash = simhash(doc)
# you can either use the whole hash for higher precision or split into chunks for higher recall
hash_chunks = split_hash(hash, 4)
for chunk in hash_chunks:
if chunk not in hashes:
hashes[chunk] = []
hashes[chunk].append(doc_id)
# now you can print the duplicate documents:
for hash, doc_list in hashes:
if doc_list > 1:
print("Duplicates documents: ", doc_list)
如果不清楚,请告诉我。
答案 1 :(得分:0)
进一步了解备忘录的答案,如果要检测> = 70%的相似性,则不能使用simhash。 Simhash仅允许检测到很小的汉明距离,一次最多可检测到约6或7位的差异,具体取决于您的主体大小。对于70%的相似性,您必须允许19位的差异,这在任何正常情况下都是不可能的。 您应该改用minhash。
如果您有兴趣,这里有一个广泛的explanation of simhash。