介绍一个基于simhash作海量文章排重的库:simhashpy
2019獨角獸企業重金招聘Python工程師標準>>>
基于simhash的海量文章排重的實踐
簡單介紹
simhash是一種能計算文檔相似度的hash算法。通過simhash能將一篇文章映射成64bit,再比較兩篇文章的64bit的海明距離,就能知道文章的相似程序。若兩篇文章的海明距離<=3,可認為這兩篇文章很相近,可認為它們是重復的文章。
這篇博客有詳細的介紹
simhash-py
要更準確的對文章進行排重,需要找到好的simhash算法。目前我知道的有python-hashes,simhash-py。兩個庫通過簡單的修改,再加上中文分詞庫,可以比較好的對中文文章計算hash。simhash-py可使用我fork的版本以支持中文文章的simhash (通過里面的hash_token或hash_tokenpy兩個函數實現對切詞之后的中文文章進行simhash計算)。
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。
轉載于:https://my.oschina.net/mickelfeng/blog/968260
總結
以上是生活随笔為你收集整理的介绍一个基于simhash作海量文章排重的库:simhashpy的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ansible 下lineinfile详
- 下一篇: 环美亚二十年装修师傅分享,甲醛的八种来源