比較兩篇文章的相似性方法

2021-07-02 04:41:15 字數 1590 閱讀 5644

對於這個題目,開始毫無頭緒,後來經過查閱資料現在講方法總結如下:

1、利用餘弦定理

我們知道向量a,b之間的夾角可用餘弦定理求得:

如果夾角的余弦值越小,那麼夾角也越大。如果2個向量相等,那麼其值為1。利用此我們可以用來比較文章的相似性。

首先使用乙個向量來描述一篇文章,對於一篇文章中的實詞,我們可以計算出它們的單文字詞彙頻率/逆文字頻率值(tf/idf)。不難想象,和新聞主題有關的那些實詞頻率高,tf/idf 值很大。我們按照這些實詞在詞彙表的位置對它們的 tf/idf 值排序。比如,詞彙表有六萬四千個詞,分別為

單詞編號 漢字詞

------------------

1 阿2 啊

3 阿斗

4 阿姨

...789 服裝

....

64000 做作

在一篇新聞中,這 64,000 個詞的 tf/idf 值分別為

單詞編號 tf/idf 值

**********====

1 02 0.0034

3 04 0.00052

5 0...

789 0.034

...64000 0.075

如果單詞表中的某個文章中沒有出現,對應的值為零,那麼這 64,000 個數,組成乙個64,000維的向量。我們就用這個向量來代表這篇新聞,並成為文章的特徵向量。如果兩篇文章的特徵向量相近,則對應的新聞內容相似,它們應當歸在一類,反之亦然。

2、利用simhash演算法

simhash演算法的輸入是乙個向量,輸出是乙個f位的簽名值。為了陳述方便,假設輸入的是乙個文件的特徵集合,每個特徵有一定的權重。比如特徵可以是文件中的詞,其權重可以是這個詞出現的次數。simhash演算法如下:

1,將乙個f維的向量v初始化為0;f位的二進位制數s初始化為0;

2,對每乙個特徵:用傳統的hash演算法對該特徵產生乙個f位的簽名b。對i=1到f:

如果b的第i位為1,則v的第i個元素加上該特徵的權重;

否則,v的第i個元素減去該特徵的權重。  

3,如果v的第i個元素大於0,則s的第i位為1,否則為0;

4,輸出s作為簽名。

通過計算兩篇文章的簽名的海明距離得出相似度。

如圖:以上的所有演算法我們都只關注文章的全域性資訊,忽略了文章的區域性資訊。

海明距離:

對於向量u,v,海明距離為2個向量相異的位數

其中u_i,v_i表示第i維值。

當然還有一些其他的好方法。本文部分內容來自德問,謝謝相關作者的回答。

余弦相似性的應用 找出相似文章

為了找出相似的文章,需要用到 余弦相似性 cosine similiarity 下面,我舉乙個例子來說明,什麼是 余弦相似性 為了簡單起見,我們先從句子著手。table 句子a 我喜歡看電視,不喜歡看電影。句子b 我不喜歡看電視,也不喜歡看電影。table 請問怎樣才能計算上面兩句話的相似程度?基本...

v8 使用的兩篇文章

指令碼所需的類和方法已經裝備完畢,接下來就可以做我們的速度測試了。下面的測試速度是在我的電腦上,core2 t7100,1g記憶體上10次測試取平均的結果,編譯環境為vc2005 express,release方式。單位為秒。從圖上可以直觀地看出,v8的速度要比spidermonkey快,尤其是指令...

有關「理想」與「現實」的兩篇文章

我這個人比較遲鈍,今天才想到去翻看這兩篇恐怕所有熱心blog事業的人都看過的文章 第一篇是孟巖先生的 放棄理想,未必能成就現實 第二篇是李建忠先生的 認清現實,才能找回理想 以下是我的感想部分 躊躇滿志,然後是在行業內迷失方向不得不 接受現實。然後分析原因,得出的結論是因為 軟體太好復用,以至於弱勢...