Google 工作表 - 匹配公司名称

Google Sheets - Matching Company Names

我有两个数据库,都有公司名称,但格式不同。我已经能够使用 vlookup 进行精确匹配。我想提取不同写法的公司,但它们实际上是同一家公司并提取数据。

下面是我手头的一小部分数据库

Database 1

Column A
1-800-Flowers.com Inc
Abbott Laboratories (Abbott)
21st Century Fox America Inc (formerly News America Inc)

Column B
1234(data I need to grab)
4567
8910

Database 2

Column C                                             
1-800 CONTACTS INC                                 
1-800-FLOWERS.COM                                   
ABBOTT LABORATORIES                                 
TWENTY-FIRST CENTURY FOX INC                        

Column D
ABCD(DataI can ignore as the company doesn't exist in database 1)
EFGH (Data I need as it matches from Database 1)
IJK
LMNO

从上面的数据库可以看出,数据库 1 与数据库 2 的匹配词类似 21 世纪福克斯美国公司 vs 21 世纪福克斯公司

在我的数据库 1 中,我有大约 4000 多个值,而在数据库 2 中,我有 10,000 个值。是否有代码可以比较两个数据库之间的相似词并从 B 列和 D 列中提取我需要的数据?

我试过查询,但它没有按照我想要的方式工作。 This is my shareable link.

目前,我所做的是使用 REGEXTRACT 提取相似的单词,以在 21st Century Fox 和 Twenty-F​​irst Century Fox 中的 Century Fox 等字符串之间找到匹配项,并尝试使用查询来匹配两个数据集.但是,当我这样写时,我的查询结果出现了 NA

=query(E:E,"Select E where E contains '"&L2&"'",0 )

L2 是包含字符串 Century Fox 的单元格

L2:

=ARRAYFORMULA(INDEX($E:$E,MATCH(MAX(ARRAY_CONSTRAIN(MMULT(LEN(IFERROR(VLOOKUP(SPLIT($E:$E," "),transpose(SPLIT(A2," ")),1,0))),ROW(A:A)^0),ROW(E68),7)),ARRAY_CONSTRAIN(MMULT(LEN(IFERROR(VLOOKUP(SPLIT($E:$E," "),transpose(SPLIT(A2," ")),1,0))),ROW(A:A)^0),ROW(E68),7),0)))

M2:

=ARRAYFORMULA(INDEX($E:$F,MATCH(MAX(ARRAY_CONSTRAIN(MMULT(LEN(IFERROR(VLOOKUP(SPLIT($E:$E," "),transpose(SPLIT(A2," ")),1,0))),ROW(A:A)^0),ROW(E68),7)),ARRAY_CONSTRAIN(MMULT(LEN(IFERROR(VLOOKUP(SPLIT($E:$E," "),transpose(SPLIT(A2," ")),1,0))),ROW(A:A)^0),ROW(E68),7),0),2))

N2:

=ARRAYFORMULA(TEXT(MAX(ARRAY_CONSTRAIN(MMULT(LEN(IFERROR(VLOOKUP(SPLIT($E:$E," "),transpose(SPLIT(A2," ")),1,0))),ROW(A:A)^0),ROW(E68),7))/LEN(A2),"0%"))

向下拖动填充。

备注:

  • 公式是资源密集型的。 Apps 脚本可能是更好的选择。

  • 对于给定的样本,此公式具有合理的精确度。

  • 7 是在所有 E 列(或数据库 2 的 C 列)中找到的每个单元格的最大单词数。这是在上面的公式中硬编码的。这应该使用辅助列找到。 Z2:COUNTA (SPLIT(A2," ")) 向下拖动填充。和 AA2:=MAX(Z2:Z)

  • N 列给出了对 VLOOKUP 生成结果的置信度。最好手动重新检查任何低于 45% 的值。

  • 工作原理:所有 E 列 (db2) 按单词拆分,每个单词在 A 列 (db1) 的每个条目中查看。如果一组单词与 E 列中的多个条目匹配,则取匹配单词长度的最大值作为可能的匹配项。字母方法而不是单词方法可能会提供更好的精度,但在给定的示例中似乎没有必要。