首页 > 解决方案 > 是否有用于模糊查找的 Google Apps 脚本?

问题描述

我有一个很少更新的电子表格上的公司列表。我称它为List A。

我还有一个不断更新的每周公司列表(列表 B),其中的条目应该与列表 A 中的某些条目相匹配。

现实情况是,从列表 B 的公司名称中提取的数据由于各种业务缩写(例如 The Company、Company Ltd.、Company Accountants Limited)而经常不一致。有时,这些公司使用不同的商品名称或有各种拼写错误。

我最初非常不明智的反应是构建一个雇主别名表,第一列是真正的雇主名称,以下列为别名,如下所示:[ https://i.stack.imgur.com/2cmYv .png]

左侧是示例表,最右侧是我使用以下数组公式模板的列:

=ArrayFormula(INDEX(A30:A33,MATCH(1,MMULT(--(B30:E33=H30),TRANSPOSE(COLUMN(B30:E33)^0)),0)))

不久之后,我意识到我需要为每个精确匹配变体(Ltd.、Ltd 和 Limited)创建一个新条目,因此我研究了模糊查找。Alan 的 Fuzzy Matching UDF给我留下了深刻的印象,但我的需求很大程度上倾向于使用 Google 电子表格而不是 VBA。

很抱歉这篇长文,但如果有人对模糊查找有任何好的建议或可以提出替代解决方案,我将不胜感激。

标签: arrayssortinggoogle-apps-scriptgoogle-sheetsfuzzy-logic

解决方案


这些评论并不是我想要的,但它们确实为我提供了一些灵感,让我想出了一个创可贴的解决方案。

我最初的数组公式需要完全匹配,但问题是公司后缀和备用名称太多了,所以我研究了模糊查找。

我目前的回答是放弃模糊查找建议,而是专注于将原始数据字符串(即公司名称)编辑为更简化的子字符串。抓住一些漂浮的代码,我想出了一个组合的自定义公式,它为 GApps 脚本实现了两行代码:

 var companysuffixremoval = str.toString().replace(/limited|ltd|group|holdings|plc|llp|sons|the/ig, "");

 var alphanumericalmin = str.replace(/[^A-Za-z0-9]/g,"")

第一行只是我从字符串中删除流行的公司后缀和“the”的想法。

第二行是删除所有非字母数字字符,以及任何空格和句点。

这确保了“第一有限公司”。并且“First Company Ltd”变为“FirstCompany”,它应该可以从 OP 中的原始数组公式返回相同的值。当然,我还为初始字符串的任何尾随/前导/额外空格实现了修剪和清理行,但这对于第二行可能是不必要的。

如果有人能想出更好的主意,请告诉。就目前而言,我只是在修补一个经验最少的脚本。


推荐阅读