文字編輯距離演算法實現(文字相似度比較)

2021-09-25 19:45:50 字數 1468 閱讀 7216

演算法簡介:

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

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

編輯距離的演算法是首先由**科學家levenshtein提出的,故又叫levenshtein distance。

/**

* time:2019/8/2

* author:jimmy wang

* email:[email protected]

* blog:

* description:

*/public class stringutils

if (m == 0)

d = new int[n + 1][m + 1];

// 初始化第一列

for (i = 0; i <= n; i++)

// 初始化第一行

for (j = 0; j <= m; j++)

for (i = 1; i <= n; i++) else

// 左邊+1,上邊+1, 左上角+temp取最小

d[i][j] = min(d[i - 1][j] + 1, d[i][j - 1] + 1, d[i - 1][j - 1] + temp);}}

return d[n][m];

}/**

* 獲取最小的值

*/private static int min(int one, int two, int three)

/*** 獲取兩字串的相似度

*/public static float getsimilarityratio(string str, string target)

public static void main(string args)

}

演算法原理:

該演算法的解決是基於動態規劃的思想,具體如下: 

設 s 的長度為 n,t 的長度為 m。如果 n = 0,則返回 m 並退出;如果 m=0,則返回 n 並退出。否則構建乙個陣列 d[0..m, 0..n]。 

將第0行初始化為 0..n,第0列初始化為0..m。 

依次檢查 s 的每個字母(i=1..n)。 

依次檢查 t 的每個字母(j=1..m)。 

如果 s[i]=t[j],則 cost=0;如果 s[i]!=t[j],則 cost=1。將 d[i,j] 設定為以下三個值中的最小值: 

緊鄰當前格上方的格的值加一,即 d[i-1,j]+1 

緊鄰當前格左方的格的值加一,即 d[i,j-1]+1 

當前格左上方的格的值加cost,即 d[i-1,j-1]+cost 

重複3-6步直到迴圈結束。d[n,m]即為萊茵斯坦距離。

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

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

文字相似度計算 編輯距離

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

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

最近因為在做短文本字串相似度比較的事情,重溫了一下編輯距離演算法及其應用。編輯距離,又稱levenshtein距離,是指兩個字串之間,由乙個轉成另乙個所需的最少編輯操作次數。許可的編輯操作包括將乙個字元替換成另乙個字元,插入乙個字元,刪除乙個字元。例如將kitten一字轉成sitting kitte...