【问题标题】:Fuzzy Matching Based on Previous Matches in Access/ExcelAccess/Excel 中基于先前匹配的模糊匹配
【发布时间】:2018-05-02 15:09:09
【问题描述】:

我有一个包含 20-30000 个用于工作的公司发货地点的 Excel 列表。有两个字段,一个包含运送到位置的名称,另一个是我创建的用于将它们组合在一起的字段,因为没有唯一标识符。例如:

杰克运动 #345 千斤顶运动 763 射线船奥兰多佛罗里达州 雷艇佛罗里达 杰克运动仓库

在我的领域中,我为上面创建了一个通用名称,例如 Jacks Sporting Goods 和 Rays Boats。

每个月都会添加几百个新的送货地点,需要与列表的其余部分进行匹配,并发现之前匹配的任何错误。

寻找一种基于所有先前匹配和已经进行的变体的模糊匹配的方法。因此,它不会尝试匹配我的 Rays Boats,而是查看第一列中 Rays Boats 的所有变体,并根据之前出现的数百种不同方式找到新的匹配项。

我正在构建一个使用此文件的 Access 数据库,并希望将其集成到 Access 中,但如果我需要先通过 excel 运行它,我会这样做。

有什么建议吗?我试过微软的免费模糊匹配工具,但是没有办法使用 VBA 来自动化这个过程......

【问题讨论】:

    标签: excel ms-access match fuzzy-search fuzzy


    【解决方案1】:

    唯一能做的就是使用通配符(即*符号)进行查询

    在数据源不完善的项目中,我已经多次这样做了。它需要一些商业知识才能知道多少应该是字面意思而不是狂野。文字太多,你会错过比赛。字面量太少,你会得到很多误报。

    有时必须分步进行 - 并为人工设置一个复选框,然后在该过程中检查有效/无效。

    【讨论】:

      【解决方案2】:

      如果您让用户在 MS Access 表单中输入姓名并希望实时查询姓名,最有效的方法是使用通配符查询:

      SELECT field_to_query 
      FROM table_name
      WHERE field_to_query LIKE "*text to search for*";
      

      如果响应性不是优先级(即,您只需要事后匹配条目),您还可以结合使用 regular expressions 和替换函数来创建 stemming function

      您甚至可以创建一个简化的TF-IDF 方法来比较每个位置与每个新输入的位置。为此,您将拆分所有名称中的所有单词,同时跟踪哪个名称包含哪些单词。通过计算给定单词在某个位置出现的次数除以该位置中有多少单词来计算词频 (TF)。通过将位置数除以包含单词的位置数来计算逆文档频率 (IDF)。然后使用计算出的 TF-IDF 分数来识别最接近的匹配。这绝对是最复杂和最慢的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-19
        • 1970-01-01
        • 2014-08-23
        • 1970-01-01
        相关资源
        最近更新 更多