You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Excel中Fuzzy Lookup字符串匹配假阳性问题及替代方案咨询

Fuzzy Lookup假阳性问题原因及Excel替代匹配方法

问题原因

  1. 匹配键列配置错误:在Fuzzy Lookup向导中,若未正确选择Table1的Column A与Table2的Column B作为匹配键列(比如误选同一表的重复列、非目标列),会导致算法错误计算相似度,出现全量相同得分的异常。
  2. 重复值触发的匹配逻辑异常:Table1的Column A全为Flower.com重复值,Fuzzy Lookup默认多对多匹配模式下,可能错误地将最高得分的匹配结果(Flower.com vs Flower)复制到所有行,而非逐行计算每一对字符串的真实相似度。
  3. 阈值功能误解:Fuzzy Lookup的阈值仅用于过滤显示符合得分要求的结果,不会改变相似度得分的计算逻辑,因此调整0-0.8的阈值后得分无变化是正常现象。

Excel中其他字符串匹配方法

1. 自定义VBA函数计算编辑距离(精准相似度)

通过VBA实现Levenshtein编辑距离算法,可准确计算两个字符串的相似度:

Function Levenshtein(rng1 As String, rng2 As String) As Integer
    Dim arr1() As Byte, arr2() As Byte
    Dim i As Integer, j As Integer, m As Integer, n As Integer
    arr1 = StrConv(rng1, vbFromUnicode)
    arr2 = StrConv(rng2, vbFromUnicode)
    m = UBound(arr1): n = UBound(arr2)
    Dim d() As Integer: ReDim d(0 To m, 0 To n)
    For i = 0 To m: d(i, 0) = i: Next
    For j = 0 To n: d(0, j) = j: Next
    For i = 1 To m
        For j = 1 To n
            If arr1(i) = arr2(j) Then
                d(i, j) = d(i - 1, j - 1)
            Else
                d(i, j) = 1 + Application.WorksheetFunction.Min(d(i - 1, j), d(i, j - 1), d(i - 1, j - 1))
            End If
        Next j
    Next i
    Levenshtein = d(m, n)
End Function

添加函数后,在单元格中输入公式计算相似度:

=1 - Levenshtein(A2,B2)/MAX(LEN(A2),LEN(B2))

该公式会输出符合预期的得分:Flower.com与Flower接近0.98,与snacks/food接近0。

2. Power Query模糊匹配(可视化、严谨逻辑)

Power Query的模糊匹配逻辑更稳定,步骤如下:

  • 将Table1和Table2分别导入Power Query
  • 选中Table1,点击「合并查询」,选择Table2,匹配列选Column A和Column B,连接类型选「模糊匹配」
  • 点击「高级选项」,设置相似度阈值(如0.8),选择匹配算法(推荐「编辑距离」)
  • 展开合并后的列,即可得到正确的匹配结果与相似度得分,不会出现重复得分的异常。

3. 原生函数简单模糊匹配(仅判断包含关系)

若只需判断B列字符串是否包含在A列中,可使用:

=IF(ISNUMBER(SEARCH(B2,A2)),1 - (LEN(A2)-LEN(B2))/LEN(A2),0)

该公式会基于字符串长度占比返回匹配得分,适合简单场景。

内容的提问来源于stack exchange,提问作者Chitwan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 09:52:46