原文:
在給定的字串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...