介绍
Levenshtein距离算法是一种算法,用于计算使用字符的添加,删除和替换将一个字符串转换为另一个字符串所需的最小编辑次数。
用途该功能最常见的用途是近似字符串匹配。 由于该函数返回将一个字符串转换为另一个字符串所需的最少编辑次数,因此用户可以设置一个阈值,在该阈值处,一个字符串被视为与另一个字符串匹配。
码下面的函数接受两个字符串作为输入,并返回一个整数,该整数表示将字符串1转换为字符串2所需的最少编辑次数。
由于计算时间为O(n * m),因此应警惕在很长的字符串上使用它。
此算法的常见修改是允许字符转置。 Damerau-Levenshtein距离算法允许相邻字符的换位。
Function Levenshtein(str1 As String, str2 As String) As Integer
Dim arrLev, intLen1 As Integer, intLen2 As Integer, i As Integer
Dim j As Integer, arrStr1, arrStr2, intMini, As Integer
intLen1 = Len(str1)
ReDim arrStr1(intLen1 + 1)
intLen2 = Len(str2)
ReDim arrStr2(intLen2 + 1)
ReDim arrLev(intLen1 + 1, intLen2 + 1)
arrLev(0, 0) = 0
For i = 1 To intLen1
arrLev(i, 0) = i
arrStr1(i) = Mid(str1, i, 1)
Next
For j = 1 To intLen2
arrLev(0, j) = j
arrStr2(j) = Mid(str2, j, 1)
Next
For j = 1 To intLen2
For i = 1 To intLen1
If arrStr1(i) = arrStr2(j) Then
arrLev(i, j) = arrLev(i-1, j-1)
Else
intMini = arrLev(i-1, j) 'deletion
If intMini > arrLev(i, j-1) Then intMini = arrLev(i, j-1) 'insertion
If intMini > arrLev(i-1, j-1) Then intMini = arrLev(i-1, j-1) 'deletion
arrLev(i, j) = intMini + 1
End If
Next
Next
Levenshtein = arrLev(intLen1, intLen2)
End Function
From: https://bytes.com/topic/access/insights/909002-levenshtein-approximate-string-matching