文字相似度 小說去重

2021-08-29 02:32:24 字數 984 閱讀 6698

之前寫了爬蟲爬取**,總檔案大概70g。但如果換****進行爬取會重複爬取同樣的**,產生不必要的空間浪費。

由於不同**對**命名不同,例如:**名 斗羅大陸.txt,在**網a命名為斗羅大陸,**b《斗羅大陸》,**c 斗羅大陸全集什麼的。

如果從**名來判斷會有很多麻煩,並且有的******名和**內容嚴重不符,因此根據**名來判斷被否決。

隨著研究的深入,發現一種可行方法。一篇文章由詞組成,那麼不同文章的詞有很大概率是不同的。如果以詞的分布來判斷兩篇文章是否相同是可行的。

第一步,首先將文章變為詞語,首先借助了分詞器。網上有開源**,功能是將字串分為字串陣列,單個字串就是乙個詞。使用的分詞器為 mahonia,github位址為使用簡單、易上手。

第二步,將字串陣列轉換為map[string]int結構,其記錄對應詞出現的次數。到了這一步基本已經弄完,只需要選取合適的計算方法即可。

首先選擇了 修正余弦相似度(adjusted cosine similarity),經過微調對map中所有次數-5,提高準確率。不計微調數與權重,比如: **a中 我:5次 斗羅:3次 **:2次. **b: 我:6次,**:3次, 長劍:2次,那麼其餘弦相似為83.428%

開頭為**名,a為平均相似度,c為余弦相似度,j為jaccard相似度。

從測試結果看 jaccard相似度很好的修正了相似度。

斗羅大陸iii龍王傳說1.txt 全職高手(蝴蝶).txt a:0.635022 c:0.885465 j:0.384580

斗羅大陸與全職高手為兩本不同**,其字數都為500萬字左右,隨著字數的上公升所用到的詞語也基本相同,導致余弦相似度高達88.54%,但jaccard相似度對次數出現的頻率比較敏感,因此jaccard相似度只為38.45%。其平均值為63.5因此可以判斷為兩本不同**。

如果需要對幾萬本**互相進行對比,按目前這個演算法首先獲取所有**的詞語頻率表儲存起來。這一階段需耗時95%以上的時間,然後再根據**的大小進行排除,大小差距太大則跳過,然後進行相似度計算。

文字相似度

這種相似度計算方式相對簡單,原理也易於理解,就是計算單詞集合之間的交集和並集大小的比例,該值越大,表示兩個文字越相似。在涉及到大規模平行計算時,該方法效率上有一定的優勢。jaccard 相似度公式 舉例 句子a 我喜歡看電視,不喜歡看電影。句子b 我不喜歡看電視,也不喜歡看電影。分詞去噪後 a 我,...

計算文字相似度 文字相似度演算法之 simhash

文字相似度演算法種類繁多,今天先介紹一種常見的網頁去重演算法simhash。1 什麼是simhash 2 simhash步驟 人工智慧,1 大資料,2 科技,3 網際網路,4 機器學習,5 人工智慧 00101 大資料 11001 科技 00110 網際網路 10101 機器學習 01011 has...

計算文字相似度

計算文字相似度 推薦2收藏 簡單講解 文字相似度計算在資訊檢索 資料探勘 機器翻譯 文件複製檢測等領域有著廣泛的應用。比如 控制,我們假設你開發了乙個微博 並且已經把世界上罵人的句子都已經收錄進了資料庫,那麼當乙個使用者發微博時會先跟罵人句子的資料庫進行比較,如果符合裡面的句子就不讓使用者發出。通常...