arrays - 是否有用于模糊查找的 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。
很抱歉这篇长文,但如果有人对模糊查找有任何好的建议或可以提出替代解决方案,我将不胜感激。
解决方案
这些评论并不是我想要的,但它们确实为我提供了一些灵感,让我想出了一个创可贴的解决方案。
我最初的数组公式需要完全匹配,但问题是公司后缀和备用名称太多了,所以我研究了模糊查找。
我目前的回答是放弃模糊查找建议,而是专注于将原始数据字符串(即公司名称)编辑为更简化的子字符串。抓住一些漂浮的代码,我想出了一个组合的自定义公式,它为 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 中的原始数组公式返回相同的值。当然,我还为初始字符串的任何尾随/前导/额外空格实现了修剪和清理行,但这对于第二行可能是不必要的。
如果有人能想出更好的主意,请告诉。就目前而言,我只是在修补一个经验最少的脚本。
推荐阅读
- ios - 在 Swift 5 中使用动态值初始化属性包装器
- scala - 在 spark sql 上查找 total_sale 连续下降
- javascript - 不能在 Javascript 文件中使用绝对 URL?
- reactjs - 我可以在另一个单水疗容器中放置一个单水疗容器吗?
- mysql - 如何将 show partition 查询与 select 语句结合使用以获取带有表名的最新分区
- controller - 如何当前门户用户组odoo 12
- python - 基于 Dataframe 中的值的颜色条形图
- angular - 有没有办法在 Angular 的子组件级别中找出其父组件的身份/类型?
- postgresql - 使用单列计算排名而不使用 rank 或 rownums 函数
- html - Angular Kendo DatePicker:选择没有年份的月份和日期