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

很久沒有認真寫博客了,乘最近有空,於是想寫寫項目總結,只分享思路,沒有具體代碼,因爲代碼實在又長又臭,很多都是互相配合,單獨分享某些代碼完全沒啥用的,所以分享一下思路,希望對有類似需求的同學能有所啓發就行了。

 

項目背景與需求:

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

 

溝通解決方案:

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

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

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

2,通過分析研究,發現用戶上傳的大部分的文檔,通過分析文檔的前300字左右的重複度大致就可以認定是否重複,計算出重複率了。

 通過第一步分析最相關的文檔集合,每個文檔的前300個字與目標文檔的前300個字,分表建立字表,然後兩個字表做相似度計算,用百分比顯示相似百分比,便於審覈時使用。

 

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

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

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

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

2,爲什麼不直接使用搜索相關度來計算重複率,再次通過建立字表,分析重複率,不是多此一舉嗎?

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章