Levenshtein近似字符串匹配

介绍

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值