Google表格 - 匹配公司名称

时间:2018-01-28 03:09:14

标签: database google-sheets

我有2个数据库,都有公司名称,但格式不同。我已经能够使用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世纪福克斯美国公司与二十一世纪福克斯公司

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

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

目前,我所做的是使用REGEXTRACT提取类似的单词,以找到21世纪福克斯和Twenty-F​​irst Century Fox中的Century Fox之类的字符串之间的匹配,并尝试使用查询匹配这两个数据集。但是当我像这样写

时,我的查询结果会出现NA
=query(E:E,"Select E where E contains '"&L2&"'",0 )

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

2 个答案:

答案 0 :(得分:0)

L2:

UPDATE `new_wp`.`wp_users` SET `user_registered` = (SELECT `added` FROM `old_script`.`members` WHERE `member_id` IN (SELECT `meta_value` FROM `new_wp`.`wp_usermeta` WHERE `meta_key` = '_member_id'))

M2:

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

N2:

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

拖动填充。

注意:

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

  • 对于给定的样本,此公式以合理的精度工作。

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

  • N列给出了VLOOKUP生成结果的置信度。优选地,任何低于45%的东西都应该手动重新检查。

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

答案 1 :(得分:0)

如果您发现自己在这里,请在Flookup中搜索Google表格。它应该做您想要的。

使用此功能:FLOOKUP(lookupValue, tableArray, lookupCol, indexNum, threshold, rank)。参数详细信息为:

  1. lookupValue:您要查找的值
  2. tableArray:您要搜索的表
  3. lookupCol:您要搜索的列
  4. indexNum:要从中返回数据的列
  5. threshold:相似度百分比,低于该百分比时不应返回数据
  6. rank:第n个最佳匹配项(例如,如果第一个不符合您的喜好)

*您可以在官方网站上找到更多信息(示例等)。

这是一块画布;你是画家。相应地使用它