短文本相似度 編輯距離演算法及其應用

2021-10-18 07:31:04 字數 1340 閱讀 4801

最近因為在做短文本字串相似度比較的事情,重溫了一下編輯距離演算法及其應用。

編輯距離,又稱levenshtein距離,是指兩個字串之間,由乙個轉成另乙個所需的最少編輯操作次數。

許可的編輯操作包括將乙個字元替換成另乙個字元,插入乙個字元,刪除乙個字元。

例如將kitten一字轉成sitting:

kitten(k→s)

sitten(e→i)

sittin(+g)

sitting

俄羅斯科學家vladimir levenshtein在2023年提出這個概念。

演算法過程:

str1或str2的長度為0返回另乙個字串的長度。 if(str1.length==0) return str2.length; if(str2.length==0) return str1.length;

初始化(n+1)*(m+1)的矩陣d,並讓第一行和列的值從0開始增長;

掃瞄兩字串(n*m級的),如果:str1[i] == str2[j],用temp記錄它,為0。否則temp記為1。然後在矩陣d[i,j]賦於d[i-1,j]+1 、d[i,j-1]+1、d[i-1,j-1]+temp三者的最小值;

掃瞄完後,返回矩陣的最後乙個值d[n][m]即是它們的距離。

計算相似度公式:1-它們的距離/兩個字串長度的最大值。

通過演算法過程偽碼我們不難發現,演算法其實是一種動態規劃。因此理論上使用暴力演算法一遍一遍地掃瞄字串也可以解出,但邏輯過於複雜,動態規劃思想很好地解決了這個問題。

package tools;

public class editdistance

public int edit()

for (int j = 0; j <= max2; j++)

for (int i = 1; i <= max1; i++)

} return array[max2][max1];

} public int levenshtein(int i, int j, char si, char sj)

return result;

} public int min(int a, int b, int c)

// 計算相似度

public float similarity()

public static void main(string args)

}

測試結果

3

0.7

編輯距離演算法求文字相似度

編輯距離,又稱levenshtein距離 萊文斯坦距離也叫做edit distance 是指兩個字串之間,由乙個轉成另乙個所需的最少編輯操作次數,如果它們的距離越大,說明它們越是不同。許可的編輯操作包括將乙個字元替換成另乙個字元,插入乙個字元,刪除乙個字元。在概念中,我們可以看出一些重點那就是,編輯...

短文本相似度計算

短文本的相似度計算方法可以分為兩大類 基於深度學習的方法和基於非深度學習的方法。科研方面基本都是從深度學習方面入手,但個人覺得想把單語言的短文本相似度計算給做出花來比較難,相對而言基於深度學習的跨語言相似度計算稍微好點。工程方面多半不用深度學習的方法,主要是獲取帶標記的語比較難的 除非公司花錢找人標...

文字相似度計算 編輯距離

一 概念 編輯距離 編輯距離,又稱levenshtein距離,是指兩個字串之間,由乙個轉成另乙個所需的最少編輯操作次數。許可的編輯操作包括將乙個字元替換成另乙個字元,插入乙個字元,刪除乙個字元。如 將sailn一字轉成failing sailn failn s f 插入,刪除 sailn faili...