項目總結:如何實現網站內容查重,助力內容審覈,提升網站運營效率?

好久沒有認真寫博客了,乘最近有空,因而想寫寫項目總結,只分享思路,沒有具體代碼,由於代碼實在又長又臭,不少都是互相配合,單獨分享某些代碼徹底沒啥用的,因此分享一下思路,但願對有相似需求的同窗能有所啓發就好了。網站

 

項目背景與需求:設計

年前承接了一個小項目,客戶是一個文庫網站的運營方,數據量已有一百多萬了,爲了合規化經營,網站運營方須要天天由人工審覈用戶發佈的文檔,但在運營過程當中發現用戶會不斷重複上傳已存在的文檔(通常標題會不一樣,沒法經過只分析標題判斷),這個比例還很多,不只僅形成網站內容重複,還增長了很多的審覈成本,因而想到可否經過技術的方式查重,把重複度太高的內容直接過濾掉,這樣就節省了大量的人工審覈成本。排序

 

溝通解決方案:開發

爲了兼顧運行效率和開發成本,由於預算有限,通過溝通,初步肯定了這樣一個簡化處理方案:文檔

1,客戶網站已有搭建基於全文檢索技術的站內搜索系統,這個平臺能夠加以利用。博客

 因而查重第一步肯定爲:因爲查重不可能每篇文章與上百萬文章作比對,這樣效率過低了,根本沒法使用,考慮到現有基於Lucene的站內搜索,搜索效率比較高,經過站內搜索初步篩出重複度高的前N個文檔,實現方式就是每一句話去搜索一次,而後獲得一個匹配度由高到低的文檔集合,爲下一步作精確比對作準備。效率

2,經過分析研究,發現用戶上傳的大部分的文檔,經過分析文檔的前300字左右的重複度大體就能夠認定是否重複,計算出重複率了。基礎

 經過第一步分析最相關的文檔集合,每一個文檔的前300個字與目標文檔的前300個字,分表創建字表,而後兩個字表作類似度計算,用百分比顯示類似百分比,便於審覈時使用。搜索

 

實現過程遇到的問題與解決思路:方法

1,經過站內搜索結果篩選目標集合,如何計算重複率的高低?

解決思路:基於Lucene的站內搜索,搜索結果會返回一個相關度的值,這個值的高低能夠簡單地理解爲與這個關鍵詞(這裏是一個句子)的匹配度(爲何說能夠簡單理解爲,而不能徹底等同,後面會解說),創建一個鍵值對<文檔ID,相關度總和>,每一次搜索結果,把這個相關度值新增或累加到這個鍵值對,排序後,就能從一百萬多文檔裏找出疑似重複率最高的10個文檔了。

存在問題:這種方法有可能會出現,相關度高的未必是文字重複率高的,長句子出現機率不高,但特別是一些短的句子,誤差特別大,因此實現過程當中,由當初設計的一句一句去搜索,改成固定的每次30個字去搜索,若是隻分析300個字,那判斷一篇文檔,恰好需搜索10次。

2,爲何不直接使用搜索相關度來計算重複率,再次經過創建字表,分析重複率,不是畫蛇添足嗎?

簡單的說,搜索的基礎理論是基於tf/idf,簡單地說,個別字詞的重複會影響最終的相關度的計算,相關度高有必定比例的重複是必然的,但不表明必定是重複率最高的,反之亦然,因此經過字表來進一步分析重複率更加準確,固然咱們最先是經過創建詞表來分析,由於比較的樣本不大(只有300個字),發現分詞的準確率對分析結果影響比較大,反而使用字表更加簡單,效率更高,準確率反而更加理想,因此說,沒有實踐就沒有發言權,理論能夠指導行動,但最後效果好壞是判斷理論是否好用的惟一標準啊。

相關文章
相關標籤/搜索