介紹一個基於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

相關文章
相關標籤/搜索