1. 把文檔A分詞造成分詞向量L 2. 使用K個hash函數,而後每一個hash將L裏面的分詞分別進行hash,而後獲得K個被hash過的集合 3. 分別獲得K個集合中的最小hash,而後組成一個長度爲K的hash集合 4. 最後用Jaccard index求出兩篇文檔的類似度
1. 把文檔A分詞造成分詞向量L,L中的每個元素都包涵一個分詞C以及一個分詞的權重W 2. 對L中的每個元素的分詞C進行hash,獲得C1,而後組成一個新的向量L1 3. 初始化一個長度大於C1長度的向量V,全部元素初始化爲0 4. 分別判斷L1中的每個元素C1的第i位,若是C1i是1,那麼Vi加上w,不然Vi減去w 5. 最後判斷V中的每一項,若是第i項大於0,那麼第i項變成1,不然變成0 6. 兩篇文檔a,b分別獲得aV,bV 6. 最後求出aV和bV的海明距離,通常距離不大於3的狀況下說明兩篇文檔是類似的
一、分詞,把須要判斷文本分詞造成這個文章的特徵單詞。最後造成去掉噪音詞的單詞序列併爲每一個詞加上權重,咱們假設權重分爲5個級別(1~5)。好比:「 美國「51區」僱員稱內部有9架飛碟,曾看見灰色外星人 」 ==> 分詞後爲 「 美國(4) 51區(5) 僱員(3) 稱(1) 內部(2) 有(1) 9架(3) 飛碟(5) 曾(1) 看見(3) 灰色(4) 外星人(5)」,括號裏是表明單詞在整個句子裏重要程度,數字越大越重要。算法
二、hash,經過hash算法把每一個詞變成hash值,好比「美國」經過hash算法計算爲 100101,「51區」經過hash算法計算爲 101011。這樣咱們的字符串就變成了一串串數字,還記得文章開頭說過的嗎,要把文章變爲數字計算才能提升類似度計算性能,如今是降維過程進行時。函數
三、加權,經過 2步驟的hash生成結果,須要按照單詞的權重造成加權數字串,好比「美國」的hash值爲「100101」,經過加權計算爲「4 -4 -4 4 -4 4」;「51區」的hash值爲「101011」,經過加權計算爲 「 5 -5 5 -5 5 5」。性能
四、合併,把上面各個單詞算出來的序列值累加,變成只有一個序列串。好比 「美國」的 「4 -4 -4 4 -4 4」,「51區」的 「 5 -5 5 -5 5 5」, 把每一位進行累加, 「4+5 -4+-5 -4+5 4+-5 -4+5 4+5」 ==》 「9 -9 1 -1 1 9」。這裏做爲示例只算了兩個單詞的,真實計算須要把全部單詞的序列串累加。code
五、降維,把4步算出來的 「9 -9 1 -1 1 9」 變成 0 1 串,造成咱們最終的simhash簽名。 若是每一位大於0 記爲 1,小於0 記爲 0。最後算出結果爲:「1 0 1 0 1 1」。blog
整個過程圖爲:文檔