1. 百度主流相關性演算法有哪些你知道多少
一般是谷歌能走到哪一步,網路也會跟到哪一步。除了PR值的演算法,是基於李彥宏。 這里介紹的主流演算法是—— Simhash演算法 1、主流演算法——Simhash演算法 我們一般判斷文本與文本之間的相關性是很容易的。你演算法的效率,直接決定了你的使用性。 通過此演算法能夠了解網頁間的相關性對比和搜索引擎達到去重的效果。網路和谷歌都有基於此原理。這個大家可以網路一下具體解釋。 2、相關性演算法的對比程度 我們了解演算法,是為了獲得更多的權重。在應用上,我們主要在以下幾個方面。 第一:外鏈的有效性方面。比如,你是旅遊類站點,那麼你做的友鏈都是旅遊類。那麼有些企業站很難找到相關的。那麼可以找,本地的,同行業的。但是我們心裡清楚,相關性的總比不相關性的好。那麼找本地的、同行業的大家都沒有底,但是不管你是找同行業的還是本地的,其實沒有那麼大的影響。 第二,站內相關性。比如說內鏈,現在內鏈的列表都是隨機推薦的。隨機推薦的效果是最差的。隨機推薦的越多,質量就最低,也是網路這次演算法調整的內容之一,那麼那些網站是最多的?醫療站,幾乎是所有行業裡面最普遍的。隨機生成 這里,老師將會讓你徹底改變關於相關性的看法。一個是外鏈相關性方面,一個是內鏈相關性方面,一定要看仔細了。 3.外鏈方面的相關性方面 分兩個層次的應用。這里講兩個基礎的兩個概念,一個是谷歌PR值演算法和網路的超文本鏈接演算法,是怎麼來識別權威性的?我們在一個行業為什麼要進行權威性的識別?在任何團隊裡面都有自己的領袖,這個是一個自然現象。因為權威性的指導,能夠給信息帶來信用度。對信用的評級是有一定的層級的。因為搜索引擎是一個信息平台,那麼對信息就必須有一個權威性指導。所以搜索引擎就必須有兩個識別,一個是樞紐,一個是權威性。那麼什麼是樞紐?中心的意思。 權威性的建立,是有一些樞紐組成的。一個權威性站點,是接收了很多樞紐的指向的。樞紐是鏈接,但是鏈接不一定是樞紐。這個就是ICO標簽。如果你想成為權威性網站,那麼你要做的應該是不同行業的鏈接。如果你做的都是同行業的鏈接,你就成為不了權威性網站。 權威是指整個互聯網的權威,還是某個行業?權威可不可以跨行?旅遊行業的權威網站可不可以對酒店行業網站投票?我們所說的 高權重站點,針對的是行業,不是跨行業。 我們聽說一個高權重網站,我們都去發外鏈,以為可以帶來大量權重,其實錯了。他只能給他的那個行業的網站帶來權重。 樞紐鏈接是對不同的權威網站進行指向的。這個鏈接的導出頁面(樞紐),是對不同行業進行導向的。 如果你的網站都是同行業的,那麼你不是樞紐,也不可能稱為權威。做外鏈,請找樞紐 了解搜索引擎的相關性演算法了嗎?
2. 自己動手寫網路爬蟲的作品目錄
電子書|自己動手寫網路爬蟲,免費下載
鏈接: https://pan..com/s/1VuP30TzuJLThBUaghwFXdA
《自己動手寫網路爬蟲》是2010年10月1日由清華大學出版社出版的圖書,作者是羅剛。本書在介紹基本原理的同時,注重輔以具體代碼實現來幫助讀者加深理解。
3. simhash如何進行文本查重
有1億個不重復的64位的01字元串,任意給出一個64位的01字元串f,如何快速從中找出與f漢明距離小於3的字元串?
大規模網頁的近似查重
主要翻譯自WWW07的Detecting Near-Duplicates for Web Crawling
WWW上存在大量內容近似相同的網頁,對搜索引擎而言,去除近似相同的網頁可以提高檢索效率、降低存儲開銷。
當爬蟲在抓取網頁時必須很快能在海量文本集中快速找出是否有重復的網頁。
論文主要2個貢獻:
1. 展示了simhash可以用以海量文本查重
2. 提出了一個在實際應用中可行的演算法。
兩篇文本相似度普遍的定義是比較向量化之後兩個詞袋中詞的交集程度,有cosine,jaccard等等
如果直接使用這種計算方式,時間空間復雜度都太高,因此有了simhash這種降維技術,
但是如何從傳統的向量相似度能用simhash來近似,論文沒提,應該是有很長一段推導要走的。
Simhash演算法
一篇文本提取出內容以後,經過基本的預處理,比如去除停詞,詞根還原,甚至chunking,最後可以得到一個向量。
對每一個term進行hash演算法轉換,得到長度f位的hash碼,每一位上1-0值進行正負權值轉換,例如f1位是1時,權值設為 +weight, fk位為0時,權值設為-weight。
講文本中所有的term轉換出的weight向量按f對應位累加最後得到一個f位的權值數組,位為正的置1,位為負的置0,那麼文本就轉變成一個f位的新1-0數組,也就是一個新的hash碼。
Simhash具有兩個「沖突的性質」:
1. 它是一個hash方法
2. 相似的文本具有相似的hash值,如果兩個文本的simhash越接近,也就是漢明距離越小,文本就越相似。
因此海量文本中查重的任務轉換位如何在海量simhash中快速確定是否存在漢明距離小的指紋。
也就是:在n個f-bit的指紋中,查詢漢明距離小於k的指紋。
在文章的實驗中(見最後),simhash採用64位的哈希函數。在80億網頁規模下漢明距離=3剛好合適。
因此任務的f-bit=64 , k=3 , n= 8*10^11
任務清晰,首先看一下兩種很直觀的方法:
1. 對輸入指紋,枚舉出所有漢明距離小於3的simhash指紋,對每個指紋在80億排序指紋中查詢。
(這種方法需要進行C(64,3)=41664次的simhash指紋,再為每個進行一次查詢)
2. 輸入指紋不變,對應集合相應位置變。也就是集合上任意3位組合的位置進行變化,實際上就是提前准備41664個排序可能,需要龐大的空間。輸入在這群集合並行去搜....
提出的方法介於兩者之間,合理的空間和時間的折中。
• 假設我們有一個已經排序的容量為2d,f-bit指紋集。看每個指紋的高d位。該高低位具有以下性質:盡管有很多的2d位組合存在,但高d位中有隻有少量重復的。
• 現在找一個接近於d的數字d』,由於整個表是排好序的,所以一趟搜索就能找出高d』位與目標指紋F相同的指紋集合f』。因為d』和d很接近,所以找出的集合f』也不會很大。
• 最後在集合f』中查找和F之間海明距離為k的指紋也就很快了。
• 總的思想:先要把檢索的集合縮小,然後在小集合中檢索f-d』位的海明距離
要是一時半會看不懂,那就從新回顧一下那兩種極端的辦法:
方法2,前61位上精確匹配,後面就不需要比較了
方法1,前0位上精確匹配,那就要在後面,也就是所有,上比較
那麼折中的想法是 前d- bits相同,留下3bit在(64-d)bit小范圍搜索,可行否?
d-bits的表示範圍有2^d,總量N個指紋,平均 每個表示後面只有N/(2^d)個
快速定位到前綴是d的位置以後,直接比較N/(2^k)個指紋。
如此只能保證前d位精確的那部分N/(2^d)指紋沒有遺漏漢明距離>3的
因此要保證64bits上所有部分都安全,全部才沒有遺漏。
方法2其實就是把所有的d=61 部分(也就是64選61)都包含了。
按照例子,80億網頁有2^34個,那麼理論上34位就能表示完80億不重復的指紋。
我們假設最前的34位的表示完了80億指紋,假設指紋在前30位是一樣的,那麼後面4位還可以表示24個,只需要逐一比較這16個指紋是否於待測指紋漢明距離小於3。
假設:對任意34位中的30位都可以這么做。
因此在一次完整的查找中,限定前q位精確匹配(假設這些指紋已經是q位有序的,可以採用二分查找,如果指紋量非常大,且分布均勻,甚至可以採用內插搜索),之後的2d-q個指紋剩下64-q位需要比較漢明距離小於3。
於是問題就轉變為如何切割64位的q。
將64位平分成若干份,例如4份ABCD,每份16位。
假設這些指紋已經按A部分排序好了,我們先按A的16位精確匹配到一個區間,這個區間的後BCD位檢查漢明距離是否小於3。
同樣的假設,其次我們按B的16位精確匹配到另一個區間,這個區間的所有指紋需要在ACD位上比較漢明距離是否小於3。
同理還有C和D
所以這里我們需要將全部的指紋T復制4份,T1 T2 T3 T4, T1按A排序,T2按B排序… 4份可以並行進行查詢,最後把結果合並。這樣即使最壞的情況:3個位分別落在其中3個區域ABC,ACD,BCD,ABD…都不會被漏掉。
只精確匹配16位,還需要逐一比較的指紋量依然龐大,可能達到2d-16個,我們也可以精確匹配更多的。
例如:將64位平分成4份ABCD,每份16位,在BCD的48位上,我們再分成4份,WXZY,每份12位,漢明距離的3位可以散落在任意三塊,那麼A與WXZY任意一份合起來做精確的28位…剩下3份用來檢查漢明距離。同理B,C,D也可以這樣,那麼T需要復制16次,ABCD與WXYZ的組合做精確匹配,每次精確匹配後還需要逐一比較的個數降低到2d-28個。不同的組合方式也就是時間和空間上的權衡。
最壞情況是其中3份可能有1位漢明距離差異為1。
演算法的描述如下:
1)先復制原表T為Tt份:T1,T2,….Tt
2)每個Ti都關聯一個pi和一個πi,其中pi是一個整數,πi是一個置換函數,負責把pi個bit位換到高位上。
3)應用置換函數πi到相應的Ti表上,然後對Ti進行排序
4)然後對每一個Ti和要匹配的指紋F、海明距離k做如下運算:
a) 然後使用F』的高pi位檢索,找出Ti中高pi位相同的集合
b) 在檢索出的集合中比較f-pi位,找出海明距離小於等於k的指紋
5)最後合並所有Ti中檢索出的結果
由於文本已經壓縮成8個位元組了,因此其實Simhash近似查重精度並不高:
4. 搜索引擎是如何判斷你文章是否採集的
內容一樣,字元出現的次數一樣
1、認定為原創文章的必要條件
假如這個網站沒有被收錄,這篇文章會認為是原創嗎? 當然不會!因為它根本不可能出現在搜索引擎的資料庫里!
那麼,如何讓它被認定成為原創內容呢?
第一個條件,網站必須有被搜索引擎收錄。假如這個網站被收錄了,但是不經常更新呢? 很簡單,如果不經常更新,發表的文章到被蜘蛛搜索到並收錄的時候也會認為是原創的。
2、轉載與採集後原創的認定
如果這篇文章被轉載了呢? 如果文章被轉載,那麼看轉載這篇文章的站更新周期與首次發表這篇文章的站的更新周期哪個更快。
不太明白更新周期?舉個例子說明:比如在A站發表,B站轉載,如果蜘蛛先訪問了A站,發現了文章,再來到B站發現了文章,很明顯的,原創權重歸A站。
那麼採集的情況是否符合這種情況? 當然,採集的情況一樣。如果B採集A,但B收錄比A早,B就可能變成原創!
3、蜘蛛的訪問時間
如果蜘蛛先訪問了B站呢? 當然權重給B站,一般的情況下都會這樣!
如果B站轉載的文章帶了A站的原文章頁面鏈接呢? 這就很明白了,剛收錄的時候,如果排名,兩條結果一起出現,有可能還是B站的排名好一點。 當然,文章轉載次數多了以後,A站的鏈接越多,對A站的文章越有好處,排名會慢慢變成A站在前面。
如果另外轉載的文章帶的是B站頁面的鏈接呢? 這種情況就搞笑了,給搜索引擎開了個玩笑,但它們如果判斷不好,就變成了一個鏈接流行度的比賽了。不過,如果都有很多外部鏈接,並且相差不大,那麼判斷的規則應該回到原點,誰先被收錄誰就是原創。
4、網頁快照生成的日期
搜索結果中網頁快照日期顯示時間最早的,一般就是原創了吧! 不一定,這個說法要在一個更新周期之內,比如說文章發表後一周內,快照時間越早的地址將越有被認可為原創的可能。 但如果文章都發表了幾個月了,說不定搜索引擎已經重新獲取過快照了,快照的日期就變了!
還有其它的可能嗎? 有,比如網路收錄,他可能會有一個收錄的資料庫,經過過濾後,收錄的內容才會到搜索結果里來。在這個期間就有一些問題了,比如A站首次發表,B站轉載。蜘蛛先訪問A站再訪問B站。而後可能先把B站的結果放出來了,而A站還在資料庫里。
所以說搜索引擎沒有收錄並不表示搜索引擎蜘蛛沒有訪問過這些內容,也許在搜索引擎的庫存里已經有記錄了,只是你查的時間沒有放出來而已,就像25號才放出來的內容,但是快照是20號的,這就是搜索引擎的庫存內容,同時這也是檢驗原創的核心時間點。
這種情況一般出現在新站與老站之間,A站發表,B站轉載,但A站在搜索引擎的信任度並不高的時候。不過只要是A站先被訪問到的,原創權還是A站的,這是最難分出來的情況,因為我們不知道蜘蛛先訪問哪個站,除非你知道兩個站的網站空間日誌內容,能看到搜索引擎對兩個頁面的訪問時間。
5、文章的偽原創
偽原創也會被認為是原創?大多數時候是這樣的,搜索引擎蜘蛛智力,你不要給予很高的期望,它就相當於三歲的小孩子,不能明確辨別這些內容是否一樣,因為它的思維太程式化了。如果你把文章的標題修改過,把文章的段落、結構、順序等修改過,甚至是兩篇或多篇內容差不多的文章混合在一起加工過,那麼搜索引擎的蜘蛛就很難判斷這篇文章是否被收錄,或許它可以判斷出有部分內容是相似或重復的,但是它不能因為這些細微的相似,而將這篇經過「深加工」的偽原創文章判斷為是轉載!當然,搜索引擎程式設計中有一個相似度的東西,比如文字內容相似度超過百分之幾就會被認為是轉載。
5. simhash 怎麼把關鍵字變為二進制
原理
simhash值的生成圖解如下
大概花三分鍾看懂這個圖就差不多怎麼實現這個simhash演算法了。特別簡單。谷歌出品嘛,簡單實用。
演算法過程大概如下:
將Doc進行關鍵詞抽取(其中包括分詞和計算權重),抽取出n個(關鍵詞,權重)對, 即圖中的(feature, weight)們。 記為 feature_weight_pairs = [fw1, fw2 … fwn],其中 fwn = (feature_n,weight_n`)。
hash_weight_pairs = [ (hash(feature), weight) for feature, weight infeature_weight_pairs ] 生成圖中的(hash,weight)們, 此時假設hash生成的位數bits_count = 6(如圖);
然後對 hash_weight_pairs 進行位的縱向累加,如果該位是1,則+weight,如果是0,則-weight,最後生成bits_count個數字,如圖所示是[13, 108, -22, -5, -32, 55], 這里產生的值和hash函數所用的演算法相關。
[13,108,-22,-5,-32,55] -> 110001這個就很簡單啦,正1負0。
到此,如何從一個doc到一個simhash值的過程已經講明白了。 但是還有一個重要的部分沒講,
『simhash值的海明距離計算』
二進制串A 和 二進制串B 的海明距離 就是
6. 搜索引擎如何判斷網頁文章的重復度
搜索引擎分詞的方法:
1)正向最大匹配法(由左到右的方向);
2)逆向最大匹配法(由右到左的方向);
3)最少切分(使每一句中切出的詞數最小);
利用分詞方法,把文章中的詞切出來,然後對比,就可以分析出重復度,舉個例子:
逆向最大匹配法
我在小明家吃飯
用逆向最大匹配法來切詞,切的結果為:飯 吃飯 家吃飯 明家吃飯 小明家吃飯 在小明家吃飯 我在小明家吃飯
詞切出來後,拿這個詞去對照,很容易計算出重復度
其他方法可以以此類推,一般都是方法結合使用的。
7. simhash怎樣降低時間復雜度
有1億個不重復的64位的01字元串,任意給出一個64位的01字元串f,如何快速從中找出與f漢明距離小於3的字元串?
大規模網頁的近似查重
主要翻譯自WWW07的 Detecting Near-Duplicates for Web Crawling
WWW上存在大量內容近似相同的網頁,對搜索引擎而言,去除近似相同的網頁可以提高檢索效率、降低存儲開銷。
當爬蟲在抓取網頁時必須很快能在海量文本集中快速找出是否有重復的網頁。
論文主要2個貢獻:
1. 展示了simhash可以用以海量文本查重
2. 提出了一個在實際應用中可行的演算法。
Simhash演算法
一篇文本提取出內容以後,經過基本的預處理,比如去除停詞,詞根還原,甚至chunking,最後可以得到一個向量。
對每一個term進行hash演算法轉換,得到長度f位的hash碼,每一位上1-0值進行正負權值轉換,例如f1位是1時,權值設為 +weight, fk位為0時,權值設為 -weight。
講文本中所有的term轉換出的weight向量按f對應位累加 最後得到一個f位的權值數組,位為正的置1,位為負的置0,那麼文本就轉變成一個f位的新1-0數組,也就是一個新的hash碼。
Simhash具有兩個「沖突的性質」:
1. 它是一個hash方法
2. 相似的文本具有相似的hash值,如果兩個文本的simhash越接近,也就是漢明距離越小,文本就越相似。
因此海量文本中查重的任務轉換位如何在海量simhash中快速確定是否存在漢明距離小的指紋。
也就是:在n個f-bit的指紋中,查詢漢明距離小於k的指紋。
在文章的實驗中(見最後),simhash採用64位的哈希函數。在80億網頁規模下漢明距離=3剛好合適。
因此任務的f-bit=64 , k=3 , n= 8*10^11
任務清晰,首先看一下兩種很直觀的方法:
1. 枚舉出所有漢明距離小於3的simhash指紋,對每個指紋在80億排序指紋中查詢。
(這種方法需要進行C(64,3)=41664詞的simhash指紋,再為每個進行一次查詢)
2. 所有接近的指紋排序到一起,這至多有41664排序可能,需要龐大的空間。
提出的方法介於兩者之間,合理的空間和時間的折中。
• 假設我們有一個已經排序的容量為2d,f-bit指紋集。看每個指紋的高d位。該高低位具有以下性質:盡管有很多的2d位組合存在,但高d位中有隻有少量重復的。
• 現在找一個接近於d的數字d』,由於整個表是排好序的,所以一趟搜索就能找出高d』位與目標指紋F相同的指紋集合f』。因為d』和d很接近,所以找出的集合f』也不會很大。
• 最後在集合f』中查找 和F之間海明距離為k的指紋也就很快了。
• 總的思想:先要把檢索的集合縮小,然後在小集合中檢索f-d』位的海明距離
按照例子,80億網頁 有2^34 個,那麼理論上34位就能表示完80億不重復的指紋。
我們假設最前的34位的表示完了80億指紋,假設指紋在前30位是一樣的,那麼後面4位還可以表示24個, 只需要逐一比較這16個指紋是否於待測指紋漢明距離小於3。
假設:對任意34位中的30位都可以這么做。
因此在一次完整的查找中,限定前q位精確匹配(假設這些指紋已經是q位有序的,可以採用二分查找,如果指紋量非常大,且分布均勻,甚至可以採用內插搜索),之後的2d-q個指紋剩下64-q位需要比較漢明距離小於3。
於是問題就轉變為如何切割64位的q。
將64位平分成若干份,例如4份ABCD,每份16位。
假設這些指紋已經按A部分排序好了,我們先按A的16位精確匹配到一個區間,這個區間的後BCD位檢查漢明距離是否小於3。
同樣的假設,其次我們按B的16位精確匹配到另一個區間,這個區間的所有指紋需要在ACD位上比較漢明距離是否小於3。
同理還有C和D
所以這里我們需要將全部的指紋T復制4份, T1 T2 T3 T4, T1按A排序,T2按B排序… 4份可以並行進行查詢,最後把結果合並。這樣即使最壞的情況:3個位分別落在其中3個區域ABC,ACD,BCD,ABD…都不會被漏掉。
只精確匹配16位,還需要逐一比較的指紋量依然龐大,可能達到2d-16個,我們也可以精確匹配更多的。
例如:將64位平分成4份ABCD,每份16位,在BCD的48位上,我們再分成4份,WXZY,每份12位, 漢明距離的3位可以散落在任意三塊,那麼A與WXZY任意一份合起來做精確的28位…剩下3份用來檢查漢明距離。 同理B,C,D也可以這樣,那麼T需要復制16次,ABCD與WXYZ的組合做精確匹配,每次精確匹配後還需要逐一比較的個數降低到2d-28個。不同的組合方式也就是時間和空間上的權衡。
最壞情況是其中3份可能有1位漢明距離差異為1。
演算法的描述如下:
1)先復制原表T為Tt份:T1,T2,….Tt
2)每個Ti都關聯一個pi和一個πi,其中pi是一個整數, πi是一個置換函數,負責把pi個bit位換到高位上。
3)應用置換函數πi到相應的Ti表上,然後對Ti進行排序
4)然後對每一個Ti和要匹配的指紋F、海明距離k做如下運算:
a) 然後使用F』的高pi位檢索,找出Ti中高pi位相同的集合
b) 在檢索出的集合中比較f-pi位,找出海明距離小於等於k的指紋5)最後合並所有Ti中檢索出的結果
8. 如何計算網站網頁相似度
據統計,網頁上的大部分相同的頁面佔29%,而主體內容完全相同的佔22%,這些重復網頁有的是沒有一點改動的拷貝,有的在內容上稍作修改,比如同一文章的不同版本,一個新一點,一個老一點,有的則僅僅是網頁的格式不同(如 HTML, Postscript),文獻[Models and Algorithms for Duplicate Document Detection 1999年]將內容重復歸結為以下四個類型:
1.如果2篇文檔內容和格式上毫無差別,則這種重復叫做full-layout plicate。
2.如果2篇文檔內容相同,但是格式不同,則叫做full-content plicates
3.如果2篇文檔有部分重要的內容相同,並且格式相同,則稱為partial-layout plicates
4.如果2篇文檔有部分重要的內容相同,但是格式不同,則稱為partial-content plicates
網頁去重的任務就是去掉網頁中主題內容重復的部分。它和網頁凈化(noise rection),反作弊(antispam) 是搜索引擎的3大門神
去重在我看來起碼有四好處:減少存儲;增強檢索效率;增強用戶的體驗;死鏈的另一種解決方案。
目前從網路的搜索結果來看,去重工作做的不是很完善,一方面可能是技術難度(precision和recall都超過90%還是很難的);另一方面可能是重復的界定,比如轉載算不算重復?所以另一項附屬的工作是對個人可寫的頁面(PWP)進行特殊的處理,那麼隨之而來的工作就是識別PWP頁面。^_^這里就不扯遠呢。
問題如何解決?
網頁的deplication,我們的演算法應該是從最簡單的開始,最樸素的演算法當然是
對文檔進行兩兩比較,如果A和B比較,如果相似就去掉其中一個
然而這個樸素的演算法,存在幾個沒有解決的問題:
0.要解決問題是什麼?full-layout?full-content?partial-layout還是partial-content?
1. 怎麼度量A 和 B的相似程度
2. 去掉A還是去掉B,如果A ~B(~表相似,!~表示不相似),B~C 但是 A!~C,去掉B的話,C就去不掉。另一個更深入的問題是,演算法的復雜度是多少?假設文檔數為n,文檔平均長度為m,如果相似度計算復雜度為m的某一個復雜度函數:T=T(m),文檔兩兩比較的復雜度是O(n^2),合起來是O(n^2 * T(m)) . 這個復雜度是相當高的,想搜索引擎這樣處理海量數據的系統,這樣的復雜度是完全不能接受的,所有,另外三個問題是:
3. 如何降低相似度計算的復雜化度
4. 如何減少文檔比較的復雜度
5. 超大數據集該如何處理
第0個問題是,我們要解決的關鍵,不同的問題有不同的解決方法,從網頁的角度來看,結構的重復並不能代表是重復,比如產品展示頁面,不同的產品展示頁面就有相同的文檔結構。內容來看,復制網站會拷貝其他網站的主要內容,然後加些廣告或做些修改。所以,解決的問題是,partial-content deplication,那麼首先要抽取網頁的主體內容。演算法變成:
抽取文檔主體內容,兩兩比較內容的相似性,如果A和B相似,去掉其中一個
其次,問題2依賴於問題1的相似度度量,如果度量函數具有傳遞性,那麼問題2就不存在了,如果沒有傳遞性,我們的方法是什麼呢?哦,那就找一個關系,把相似關系傳遞開嘛,簡單,聚類嘛,我們的框架可以改成:
抽取文檔主體內容,兩兩比較內容的相似性,如果A和B相似,把他們聚類在一起,最後一個類里保留一個page
最後,歸納為幾個步驟
第一步:識別頁面的主題內容,網頁凈化的一部分,以後討論
第二步:計算相似度
第三步:聚類演算法,計算出文檔那些文檔是相似的,歸類。
核心的問題是,「如何計算相似度?」這里很容易想到的是
1. 計算內容的編輯距離edit distance(方法很有名,但是復雜度太高)
2. 把內容分成一個個的token,然後用集合的jaccard度量(好主意,但是頁面內容太多,能不能減少啊?)
好吧,但是,當然可以減少集合的個數呢,采樣,抽取滿足性質的token就可以啦,如滿足 mod m =0 的token,比如有實詞?比如stopwords。真是絕妙的注意.在把所有的idea放一起前,突然靈光一現,啊哈,
3. 計算內容的信息指紋,參考google研究員吳軍的數學之美系列。
把他們放在一起:
第一步:識別頁面的主題內容,網頁凈化的一部分,以後討論
第二步:提取頁面的特徵。將文章切分為重合和或不重合的幾個結合,hash out
第三步:用相似度度量來計算集合的相似性,包括用信息指紋,Jaccard集合相似度量,random projection等。
第四步:聚類演算法,計算出文檔那些文檔是相似的,歸類。
方法分類:
按照利用的信息,現有方法可以分為以下三類
1.只是利用內容計算相似
2.結合內容和鏈接關系計算相似
3.結合內容,鏈接關系以及url文字進行相似計算
一般為內容重復的去重,實際上有些網頁是
按照特徵提取的粒度現有方法可以分為以下三類
1.按照單詞這個級別的粒度進行特徵提取.
2.按照SHINGLE這個級別的粒度進行特徵提取.SHNGLE是若干個連續出現的單詞,級別處於文檔和單詞之間,比文檔粒度小,比單詞粒度大.
3.按照整個文檔這個級別的粒度進行特徵提取
演算法-具體見真知
1. I-Match
2. Shingling
3. Locality Sensitive Hashing.(SimHash)
4. SpotSigs
5. Combined
9. simhash中如何抽取文本關鍵字及權重
傳統的Hash演算法只負責將原始內容盡量均勻隨機地映射為一個簽名值,原理上僅相當於偽隨機數產生演算法。傳統的hash演算法產生的兩個簽名,如果原始內容在一定概率下是相等的;如果不相等,除了說明原始內容不相等外,不再提供任何信息,因為即使原始內容只相差一個位元組,所產生的簽名也很可能差別很大。所以傳統的Hash是無法在簽名的維度上來衡量原內容的相似度,而SimHash本身屬於一種局部敏感哈希演算法,它產生的hash簽名在一定程度上可以表徵原內容的相似度。