由於實驗室和網際網路基本沒啥關係,也就從來沒有關注過資料探勘相關的東西。在實際工作中,第一次接觸到匹配和聚類等工作,雖然用一些簡單的匹配演算法可以做小資料的聚類,但資料量達到一定的時候就束手無策了。google的**「detecting near-duplicates for web crawling」--------simhash。所以,趁著週末把這方面的東西看了看,做個筆記。
google採用這種演算法來解決萬億級別的網頁的去重任務。
simhash演算法的主要思想是降維,將高維的特徵向量對映成乙個低維的特徵向量,通過兩個向量的hamming distance來確定文章是否重複或者高度近似。
步驟:
對於給定的一段語句,進行分詞,得到有效的特徵向量
為每乙個特徵向量設定乙個權值
對每乙個特徵向量計算hash值,為01組成的n-bit簽名
所有特徵向量進行加權(1則為正,0則為負),然後累加
對於n-bit簽名的累加結果,如果》0置1,否則置0
得到該語句的simhash值
根據不同語句simhash的海明距離就來判斷相似程度
解析的不好,看一下大神畫的圖,你就會懂了
simhash用於比較大文字,比如500字以上效果都還蠻好,距離小於3的基本都是相似,誤判率也比較低。
這樣的話,小文字呢?如何解決?
該部落格給出乙個思路是,將短文本抽象出有序關鍵字,計算此有序字串的simhash值,尋找simhash相等的集合,縮小的搜尋範圍。還提到了並查集和bloom filter。
本作品採用cococo點點
演算法之 字串匹配演算法
一說到兩個字串匹配,我們很自然就會想到用兩層迴圈來匹配,用這種方式就可以實現乙個字串是否包含另乙個字串了,這種演算法我們稱為 bf演算法。bf演算法,即暴力 brute force 演算法,是普通的模式匹配演算法,bf演算法的思想就是將目標串 s 的第乙個字元與模式串 t 的第乙個字元進行匹配,若相...
字串匹配演算法 字串匹配演算法總覽
字串匹配在文字處理裡非常重要,我們採用簡潔的python 把以下演算法一一實現並講解。樸素演算法 algorithm rabin karp 演算法 有限自動機演算法 finite automation knuth morris pratt 演算法 kmp algorithm boyer moore ...
字串匹配演算法之BF vs KMP
最笨的方法bf,暴力匹配,無需多說,最難理解的是kmp演算法,費了好大勁才弄明白。要理解kmp演算法,其實最關鍵的是生成標明下次匹配位置的next陣列。其意義是,如果當前匹配到模式字串的第j個字元是失配,則只需要將j重置為next j 後,繼續向後匹配即可。next j 的值表示p 0.j 1 中最...