天天看點

談熱文榜的自動去重

泛digg式的熱文系統需要有重複内容檢測機制。

通常的重複内容是同一個站點下的同一個story,隻不過連結不同罷了(這在國内論壇很常見,文章的連結有好多種變換,實際上指向的都是同一個文章)。此時用文本相似性計算(document similarity algorithm)即可解決。

當你送出給digg一個連結時,它就已經開始了重複檢測,在你填寫标題和描述之前。如果它懷疑你可能送出了一個重複文章,那麼它會立刻提示你,如下所示:

談熱文榜的自動去重

可見,人主觀上認為的内容重複,和機器模拟判定(複雜的算法也可以很好逼近,比如論文抄襲檢測系統,但對于digg來說,肯定要求算得快且準),還是有些距離的。

國内總是有特殊情況。

比如轉貼滿天飛。而且多半是轉載到大站或名博的文章被推薦被分享的幾率遠遠大于原創站點。

比如國人架設的wordpress的rss feed,總是先輸出一個中文編碼(就是把博文标題urlencode了)的連結,然後同一篇文章隔一會兒又輸出一個英文連結。于是經常兩個連結都有人推薦和分享。

比如新浪部落格,很多人(包括名博們)經常反複編輯同一篇文章,導緻編輯器把同一篇文章儲存為n多份,導緻同一篇博文一發就是三五篇,連結還都不同,崩潰啊。

比如cnbeta,轉貼第三方的文章後,輸出的rss是摘要輸出。此時,大家往往分享的是它。這帶來兩個問題:一,摘要很短,不足以與原文判定是否重複;二,cnbeta投遞者往往會修改原文标題,要麼加幾個字,要麼加助詞或符号(估計是seo的需要)。

比如solidot,以點評夾帶原文摘錄的方式釋出。也是同樣的問題:文字内容很短,還加了編輯的文字,更加影響相似性計算;标題往往與原文不同。

比如一些名博轉載别人文章時,總會在最前面加上自己的點評,這樣就略微影響文本相似性計算。

後來确實有很多人反映這個問題,同一篇文章很有可能重複上榜三、四次,比如谷奧釋出一次,cnbeta轉載一次,solidot點評一次,keso’s view一次,煎蛋轉載一次等等。

現在的重複内容檢測邏輯是:

首先對文章内容較長的,是基于shingle的重複檢測辦法;

其次對文章很短的,比如cnbeta摘要輸出的rss内容,比如solidot,比如南方報業旗下的rss内容,先提取标簽,然後計算文章的标簽相似度。

這兩種辦法算起來很快,但未必總能檢測出來重複,繼續積累吧。

繼續閱讀