我有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-First Century Fox中的Century Fox之类的字符串之间的匹配,并尝试使用查询匹配这两个数据集。但是当我像这样写
时,我的查询结果会出现NA=query(E:E,"Select E where E contains '"&L2&"'",0 )
L2是包含字符串Century Fox的单元格
答案 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)
。参数详细信息为:
lookupValue
:您要查找的值tableArray
:您要搜索的表lookupCol
:您要搜索的列indexNum
:要从中返回数据的列threshold
:相似度百分比,低于该百分比时不应返回数据rank
:第n个最佳匹配项(例如,如果第一个不符合您的喜好)*您可以在官方网站上找到更多信息(示例等)。
这是一块画布;你是画家。相应地使用它