介绍一个基于simhash做海量文章排重的库:simhashpy

基于simhash的海量文章排重的实践

简单介绍

simhash是一种能计算文档类似度的hash算法。经过simhash能将一篇文章映射成64bit,再比较两篇文章的64bit的海明距离,就能知道文章的类似程序。若两篇文章的海明距离<=3,可认为这两篇文章很相近,可认为它们是重复的文章。python

这篇博客有详细的介绍git

simhash-py

要更准确的对文章进行排重,须要找到好的simhash算法。目前我知道的有python-hashes,simhash-py。两个库经过简单的修改,再加上中文分词库,能够比较好的对中文文章计算hash。simhash-py可以使用我fork的版本以支持中文文章的simhash (经过里面的hash_token或hash_tokenpy两个函数实现对切词以后的中文文章进行simhash计算)。github

simhash算法

simhash算法最简单实现的库应该是python-hashes库了。使用过程中发现,对于排重的使用目的来讲,这个库的simhash算法有缺点是:只考虑到文章存在哪些词,没有考虑到词的顺序。不过相应的优势是,能够实现海量文章类似度计算。文章类似度计算忽略词的顺序以后效果更好。算法

simhash-py内部实现了simhash算法。它里面的simhash使用了cyclic hash算法,这个算法考虑到N(能够在3~5)个词之间的顺序。考虑到词的顺序的hash算法在排重过程中会更准确,不过这个我也没有特别好的测试:)函数

simhash加快搜索

若看过本文推荐的simhash的原理讲解那篇文章,发现能够经过“shard”方式加快simhash值的搜索,从而能快速的知道是否存在重复的文章。而simhash-py库经过C++的Judy库实现了这一点。测试

simhash集群处理

既然能够经过“shard”方式,那么很容易把这个思路拓展到集群上。因此相应的,simhashpy的做者实现了simhash-cluster。.net

过程中有疑问可加我开源项目交流QQ群:27498_3126 欢迎对数据处理有兴趣的同窗多多交流。blog

相关文章
相关标签/搜索