字符串相似度算法

Private Function Min(ParamArray Num()) As Integer
    Dim tN As Integer, i As Integer
    If UBound(Num) = -1 Then Min = -999: Exit Function
    tN = Num(0)
    For i = 1 To UBound(Num)
        If Num(i) < tN Then tN = Num(i)
    Next
    Min = tN
End Function

Public Function CacuDistance(ByVal s1 As String, ByVal s2 As String) As Integer
    Dim i As Integer, b1$(), b2$(), n1 As Integer, n2 As Integer, j As Integer
    Dim tP1 As Integer, tP2 As Integer, tA() As Integer, tN1 As Integer, tN2 As Integer, tN3 As Integer
    
    n1 = Len(s1)
    n2 = Len(s2)
    
    ReDim b1(n1 - 1)
    For i = 1 To n1
        b1(i - 1) = Mid$(s1, i, 1)
    Next
    
    ReDim b2(n2 - 1)
    For i = 1 To n2
        b2(i - 1) = Mid$(s2, i, 1)
    Next
    
    If n1 = 0 Then CacuDistance = n2: Exit Function
    If n2 = 0 Then CacuDistance = n2: Exit Function
    
    j = Min(n1, n2) - 1
    
    tP1 = -1
    tP2 = -1

    For i = 0 To j
        If b1(i) <> b2(i) Then
            tP1 = i
            Exit For
        End If
    Next

    If tP1 = -1 Then CacuDistance = Abs(n1 - n2): Exit Function

    For i = 0 To j - tP1
        If b1(n1 - i - 1) <> b2(n2 - i - 1) Then
            tP2 = i
            Exit For
        End If
    Next

    If tP2 = -1 Then CacuDistance = Abs(n1 - n2): Exit Function

    ReDim tA(n1 - tP1 - tP2)
    
    For i = 0 To UBound(tA)
        tA(i) = i
    Next

    For i = 0 To n2 - tP1 - tP2 - 1
        tN1 = tA(0)
        tN2 = tN1 + 1
        For j = 1 To UBound(tA)
            If b1(n1 - tP2 - j) = b2(n2 - tP2 - i - 1) Then
                tN3 = tN1
            Else
                tN3 = Min(tA(j), tN1, tN2) + 1
            End If
            tA(j - 1) = tN2
            tN2 = tN3
            tN1 = tA(j)
        Next
        tA(UBound(tA)) = tN2
    Next

    CacuDistance = tA(UBound(tA))
End Function

字符串相似度算法是用来比较两个字符串之间的相似程度的算法。常用的字符串相似度计算方法有编辑距离算法、余弦相似度算法、Jaccard相似度算法等。其中,编辑距离算法是一种常用的字符串相似度计算方法,它通过计算两个字符串之间的最小编辑距离来衡量它们的相似程度。编辑距离指的是将一个字符串转换成另一个字符串所需的最少操作次数,包括插入、删除、替换三种操作。 编辑距离算法的实现可以采用动态规划的方法,具体步骤如下: 1. 初始化一个二维数组,数组的行数为第一个字符串的长度加1,列数为第二个字符串的长度加1。 2. 将第一行和第一列的值分别初始化为0到列数和0到行数。 3. 从第二行和第二列开始,遍历整个二维数组,计算每个位置的值。具体计算方法如下: - 如果第一个字符串的当前字符等于第二个字符串的当前字符,则该位置的值等于左上角位置的值。 - 否则,该位置的值等于左上角、左边、上边三个位置中的最小值加1。 4. 遍历完整个二维数组后,右下角的值即为两个字符串之间的最小编辑距离。 除了编辑距离算法,余弦相似度算法和Jaccard相似度算法也是常用的字符串相似度计算方法。余弦相似度算法通过计算两个向量之间的夹角余弦值来衡量它们的相似程度,适用于文本分类、信息检索等领域。Jaccard相似度算法则通过计算两个集合的交集与并集之间的比值来衡量它们的相似程度,适用于推荐系统、社交网络等领域。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值