【问题标题】:How do I fuzzy match just adjacent cells?如何模糊匹配相邻的单元格?
【发布时间】:2016-02-22 20:47:25
【问题描述】:

我在对应的两列中有一行 10,000 个名称,每列 10,000 个。 A 列中的每个单元格对应于 B 列中的相邻单元格。我想做一个模糊匹配并获得所有这些单元格与相邻单元格的兼容性分数。我不希望它搜索整个列而不是整个列,只搜索相邻的单元格,我似乎无法使用 Fuzzy Match Excel 插件来完成,想法?

例子:

Column A:       Column B:        Value:
Apple           Aplle            80%
Banana          Banana           100%
Orange          Ornge            85%   

【问题讨论】:

  • 您希望如何计算第三列中的值??
  • 嗨,我只是想要一个关于名称相似程度的置信度分数?有些可能完全匹配,有些可能完全不同。完全像模糊匹配工具,但我不认为我可以将其设置为只执行相邻单元格,它只计算列与列。谢谢!
  • 这将与公式相当复杂;非 vba 解决方案可能需要一些辅助列,这些辅助列的数量等于要比较的最大字母数。我怀疑这就是你要找的。问题是您希望 Apple 在将“p”更改为“l”时仅显示 1 个字母,但您希望 Orange 在缺少字母时仅显示 1 个字母 [我相信这些只是 Levenshtein 距离]。如果只是逐个字母比较的话,使用 Excel 公式很难证明 Orange 不是 4 个字母不同。

标签: excel excel-formula fuzzy-search fuzzy-comparison


【解决方案1】:

好吧,我不了解 Fuzzy Match Addin,但您可以使用 UDF 完成与您的要求类似的操作。

基于您的示例数据的类似内容

Function FuzzyComparision(String1 As String, String2 As String) As Double
Dim intStringLength As Integer
Dim dblScore As Double
Dim dblUnitScore As Double
Dim intCounter As Integer

intStringLength = WorksheetFunction.Max(Len(String1), Len(String2))
dblUnitScore = 1 / intStringLength
dblScore = 0#

For intCounter = 1 To intStringLength
    If Mid(UCase(String1), intCounter, 1) = Mid(UCase(String2), intCounter, 1) Then
        dblScore = dblScore + dblUnitScore
    Else
        If Len(String1) <> Len(String2) And intCounter < intStringLength Then
            If Mid(UCase(String1), intCounter + 1, 1) = Mid(UCase(String2), intCounter, 1) Then
                dblScore = dblScore + dblUnitScore
            End If
        End If
    End If
Next

FuzzyComparision = dblScore
End Function

当然可以根据需要进一步即兴比较。 让我知道这是否有帮助

编辑:正如培根级指出的那样(感谢您的观察),对于缺少字母,这不会按预期工作。我已经稍微调整了函数以进行不区分大小写的比较并补偿丢失的字母,如示例所示。

即使它有效,效用取决于可接受的分数偏差 +/-。 OP 可能会有所启发。

【讨论】:

  • 效果很好。 +1 质量和努力。
  • 这真的适用于从其中一个单词中删除字母的情况吗?见他上面的“橙色”——它表明只有 1 个字母预计会从 100% 中“删除”。在你的方法下,不是从缺少的字母开始算4个不同吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-06
  • 2016-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-09
  • 1970-01-01
相关资源
最近更新 更多