levenshtein 距離 python實現

2021-08-20 13:11:47 字數 1560 閱讀 4557

參考了部落格

import numpy as np

"""此為編輯距離,就是str1轉化為str2的編輯距離

採用的就是動態規劃思想

舉例說明,我們以 str1="leensh",str2="levensh"為例,首先得到的結果為:

l  e  v  e  n  s  h

[[0. 1. 2. 3. 4. 5. 6. 7.]

l [1. 0. 1. 2. 3. 4. 5. 6.]

e [2. 1. 0. 1. 2. 3. 4. 5.]

e [3. 2. 1. 1. 1. 2. 3. 4.]

n [4. 3. 2. 2. 2. 1. 2. 3.]

s [5. 4. 3. 3. 3. 2. 1. 2.]

h [6. 5. 4. 4. 4. 3. 2. 1.]]

首先第乙個字元完全一致,所以矩陣[1,1]為0,不需要更改,如果[1,2],[1,3],...[1,7]都做改變,距離一次累加,相當於,不管以後的字元,只管

str1只有乙個字元l的情況下,變成str2的方法,需要把後邊全部變化成str2對應的字串,所以【1,2】,..,[1,7]依次累計,同理

當第二行,[2,1],認為str2,只有l的時候,由於第乙個字元相同,所以str2變成str1只需當前1個過程,【2,2】為0,由於前兩個字元相同,同理[2,3],...

[2,7],當在第3行時,【3,3】為1,但是[3,4]為什麼也為1,這個是關鍵,變成[3,4],有三個可能,[2,4],[3,3],[2,3],由於最小積累在,[3,3],[2,3]對應的

待匹配字串分別為lev ,lev,,但是[3,3]進入到[3,4],需要新增e,這樣總代價變成了[3,3]+1=2,而[2,3]當前字串為lev,我們提供的【2,3】變成第3行

新增了乙個e所以,與待匹配e相同,沒有變化,所以總代價還是1,而[3,3]已經把給的e變成了v,所以到第4步,需要重新新增e,所以代價為2,依次剩餘字串相同

所以總代價為1,他只需新增了乙個

"""def distance_str(str1,str2):

dp=np.zeros((len(str1)+1,len(str2)+1))

m=len(str1)

n=len(str2)

for k in range(1,m+1):

dp[k][0]=k

for k in range(1,n+1):

dp[0][k]=k

for k in range(1,m+1):

for j in range(1,n+1):

dp[k][j]=min(dp[k-1][j],dp[k][j-1])+1 #這裡表示上邊和下邊的數值最小數值

if str1[k-1]==str2[j-1]:

dp[k][j]=min(dp[k][j],dp[k-1][j-1])

else:

dp[k][j]=min(dp[k][j],dp[k-1][j-1]+1)

print(dp)

if __name__ == '__main__':

str1="leensh"

str2="levensh"

編輯距離演算法(Levenshtein)

編輯距離定義 編輯距離,又稱levenshtein距離,是指兩個字串之間,由乙個轉成另乙個所需的最少編輯操作次數。例如將eeba轉變成abac eba 刪除第乙個e aba 將剩下的e替換成a abac 在末尾插入c 所以eeba和abac的編輯距離就是3 俄羅斯科學家vladimir levens...

Levenshtein 計算編輯距離

levenshtein 距離,又稱編輯距離,指的是兩個字串之間,由乙個轉換成另乙個所需的最少編輯操作次數。編輯操作包括將乙個字元替換成另乙個字元,插入乙個字元,刪除乙個字元。即 插入 刪除 替換 1 首先安裝python levenshtein庫,安裝完使用import levenshtein匯入該...

levenshtein字串編輯距離演算法

指的是字串a向字串b轉換的最小步數。比如字串 abc 轉換成 a 最少需要刪除 b c 兩個字元。字串操作有三種,乙個是新增插入,乙個是刪除,乙個是替換。該演算法最早由 levenshtein提出。從a字串向b字串轉換,最重要的是考慮不要重複操作,比如 abd 轉換成 abcd 只需要插入乙個 c ...