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

2022-08-17 12:33:09 字數 1912 閱讀 4834

編輯距離,又稱levenshtein距離(萊文斯坦距離也叫做edit distance),是指兩個字串之間,由乙個轉成另乙個所需的最少編輯操作次數,如果它們的距離越大,說明它們越是不同。許可的編輯操作包括將乙個字元替換成另乙個字元,插入乙個字元,刪除乙個字元。

在概念中,我們可以看出一些重點那就是,編輯操作只有三種。插入,刪除,替換這三種操作,我們有兩個字串,將其中乙個字串經過上面的這三種操作之後,得到兩個完全相同的字串付出的代價是什麼就是我們要討論和計算的。

例如:

如果str1=」ivan」,str2=」ivan」,那麼經過計算後等於 0。沒有經過轉換。相似度=1-0/math.max(str1.length,str2.length)=1

如果str1=」ivan1」,str2=」ivan2」,那麼經過計算後等於1。str1的」1」轉換」2」,轉換了乙個字元,所以距離是1,相似度=1-1/math.max(str1.length,str2.length)=0.8

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

if i == 0 且 j == 0,edit(i, j) = 0

if i == 0 且 j > 0,edit(i, j) = j

if i > 0 且j == 0,edit(i, j) = i

if i ≥ 1 且 j ≥ 1 ,edit(i, j) == min,當第乙個字串的第i個字元不等於第二個字串的第j個字元時,f(i, j) = 1;否則,f(i, j) = 0。

例如計算:

ofailing和osailn這兩個字串的相似度。根據上面公式。

計算edit(1, 1),edit(0, 1) + 1 == 2,edit(1, 0) + 1 == 2,edit(0, 0) + f(1, 1) == 0 + 1 == 1,min(edit(0, 1),edit(1, 0),edit(0, 0) + f(1, 1))==1,因此edit(1, 1) == 1。 依次類推:

edit(2, 1) + 1 == 3,edit(1, 2) + 1 == 3,edit(1, 1) + f(2, 2) == 1 + 0 == 1,其中s1[2] == 'a' 而 s2[1] == 'f'『,兩者不相同,所以交換相鄰字元的操作不計入比較最小數中計算。以此計算,得出最後矩陣為:

狀態轉移,從edit(i, j) 三個方向轉來

edit(i-1, j) + 1, edit(i, j-1) + 1 表示插入或刪除乙個字元

edit(i-1, j-1) + f(i, j) f(i,j)=0 表示不替換 f(i,j)=1表示替換1次

public int mindistance(string word1, string word2) 

for (int j = 0; j <= word2.length(); j++)

for (int i = 0; i < word1.length(); i++) else }}

return arr[word1.length()][word2.length()];

}

這篇文章的第三部分機器學習方法中,在抽取標題時,會計算被h[1-6]標籤修飾的字串和metatitle之間最相似的乙個字元,作為標題。

具體的**也有展示,也有講解。

文字相似度計算 編輯距離

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

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

演算法簡介 levenshtein distance,又稱編輯距離,指的是兩個字串之間,由乙個轉換成另乙個所需的最少編輯操作次數。許可的編輯操作包括將乙個字元替換成另乙個字元,插入乙個字元,刪除乙個字元。編輯距離的演算法是首先由 科學家levenshtein提出的,故又叫levenshtein di...

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

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