文字比較演算法 計算文字的相似度

2021-09-08 17:20:17 字數 1472 閱讀 7650

原文:

在給定的字串a和字串b,ld(a,b)表示編輯距離,lcs(a,b)表示最長公共子串的長度。

如何來度量它們之間的相似度呢?

不妨設s(a,b)來表示字串a和字串b的相似度。那麼,比較合理的相似度應該滿足下列性質。

性質一:0≤s(a,b)≤100%,0表示完全不相似,100%表示完全相等

性質二:s(a,b)=s(b,a)

目前,網上介紹的各種相似度的計算,都有各自的不盡合理的地方。

計算公式一:s(a,b)=1/(ld(a,b)+1)

能完美的滿足性質二。

當ld(a,b)=0時,s(a,b)=100%,不過無論ld(a,b)取任何值,s(a,b)>0,不能滿足性質一。

計算公式二:s(a,b)=1-ld(a,b)/len(a)

當len(b)>len(a)時,s(a,b)<0。不滿足性質一。

有人會說,當s(a,b)<0時,強制指定s(a,b)=0就解決問題了。

問題是,s(a,b)=1-ld(a,b)/len(a),而s(b,a)=1-ld(b,a)/len(b)。當len(a)≠len(b)時,s(a,b)≠s(b,a)。不滿足性質二

還有乙個例子可以說明問題

a="bc",b="cd",c="ef"

s(a,b)=1-ld(a,b)/len(a)=1-2/2=0

s(a,c)=1-ld(a,c)/len(a)=1-2/2=0

a和b的相似度與a和c的相似度是一樣的。不過很明顯的是b比c更接近a

計算公式三:s(a,b)=lcs(a,b)/len(a)

這個公式能完美的滿足的性質一

不過當len(a)≠len(b)時,s(a,b)≠s(b,a)。不滿足性質二

用乙個例子說明問題

a="bc",b="bcd",c="bcef"

s(a,b)=lcs(a,b)/len(a)=2/2=100%

s(a,c)=lcs(a,c)/len(a)=2/2=100%

a和b的相似度與a和c的相似度是一樣的。不過很明顯的是b比c更接近a

上面是網上能找到的三個計算公式,從上面的分析來看都有各自的侷限性。

我們看乙個例子:

a=ggatcga,b=gaattcagtta,ld(a,b)=5,lcs(a,b)=6

他們的匹配為:

a:gg

a_tc

_g__a

b:gaa

ttca

gtta可以看出上面藍色的部分表示的是lcs部分,黑色表示的是ld部分。

因此,給出乙個新的公式

s(a,b)=lcs(a,b)/(ld(a,b)+lcs(a,b))

這個公式能解決上述三個公式的種種不足。

而ld(a,b)+lcs(a,b)表示兩個字串a、b的最佳匹配字串的長度。這個是唯一的。

還有注意的是ld(a,b)+lcs(a,b)和max(len(a),len(b))這兩個並不完全相等。

文字比較演算法 計算文字的相似度

在 文字比較演算法 ld演算法 中,介紹了編輯距離的計算。在 文字比較演算法 needleman wunsch演算法 中,介紹了最長公共子串的計算。在給定的字串a和字串b,ld a,b 表示編輯距離,lcs a,b 表示最長公共子串的長度。如何來度量它們之間的相似度呢?不妨設s a,b 來表示字串a...

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

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

使用余弦相似度演算法計算文字相似度

在求相似度的時候經常會有以下一些方法,1.基於詞向量 2.基於字元的 3.基於概率統計的 4.基於詞嵌入模型的 在求文字相似度的時候經常會使用余弦相似度來求,下面來記錄一下余弦相似度的原理。余弦相似度量 計算個體間的相似度。相似度越小,距離越大。相似度越大,距離越小。假設有3個物品,item1,it...