将不同版本的人名识别为同一个人

时间:2012-05-04 16:17:35

标签: excel excel-formula string-matching

我在电子表格的A栏中为同一个人提供了以下信息

ALAN K HURTZ
ALAN K HURTZ, ATTY
ALAN K. HURTZ
ALAN K. HURTZ, ATTY
ALAN K. HURTZ, ATTY.
ALAN HURTZ
ALAN HURTZ NDER
ALAN HURTZ ORPD
ALAN HURTZ, ATTY
ALAN HURTZ, ATTY.
ALAN HURTZ, ESQ
ALAN HURTZ, ESQ.
ALAN P. HURTZ, ATTY.

在另一个电子表格中,我有这一行:

A           B         C         D       E        F

Hurtz       Alan      K.        ALIAS   91065    1451894

我需要能够向sheet1列B添加此值:1451894(来自sheet2的列F) 对于每条记录。我对VLOOKUP或MATCH没有任何好运。

有关如何比较这些值的任何建议吗?

1 个答案:

答案 0 :(得分:1)

此挑战不适合Excel,部分原因是SEARCHFIND只能从左到右工作,只能找到第一个实例。但是,您不能希望从任何自动化解决方案中获得完美的结果,并且可能准备接受一个相对简单的差异近似 - 即您可以选择在编码上花费多少精力而不是人工审核

首先,我建议从第二个工作表创建一个Lookup表,其中first_name,initial,last_name和first_name,last_name都指向ColumnF中的值。在第一种情况下,您可能希望将类似“inc Initial”的内容连接到ColumnF值,以指示比没有匹配的初始值更接近匹配。

然后我建议将第一张工作表的ColumnA复制到ColumnB并从ColumnB删除ESQ(至少对于没有启动ESQ的姓氏!)。在美国,大约有40,000人的姓氏以“Esq”开头,但作为一个单独的问题处理这些问题可能比放弃能够“忽视”Esquires的便利性更容易。

我建议分别在ColumnsC:N中输入以下内容(假设Row1是数据标签):=FIND(" ",B2) =IF(ISERROR(FIND(",",B2)),0,FIND(",",B2)) =LEN(B2) =LEFT(B2,C2) =IF(C2>0,MID(B2,C2+1,E2-C2+1),0) =LEFT(G2,1) =IF(ISERROR(FIND(" ",G2)),0,FIND(" ",G2)) =MID(G2,I2+1,E2-C2) =IF(ISERROR(FIND(",",J2)),IF(ISERROR(FIND(".",J2)),0,FIND(".",J2)),FIND(",",J2)) =IF(K2=0,J2,LEFT(J2,K2-1)) =IF(I2>0,F2&H2&" "&L2,F2&L2) =VLOOKUP(M2,array,2,FALSE)其中'array'是Sheet2中的Lookup表。

在你的13个样本中,你应该给8个'匹配',其中5个包括中间首字母的匹配。如果不够好,那么只需在右侧的列中添加更多公式,直到达到您的权衡点(例如,虽然您的第13个示例是上述5个中的一个不匹配,但如果在单独的列中,则会执行此操作你没有将'P'连接起来,因为它在这样的其他列中匹配的迹象表明它与其他8列不匹配)。你可以像对待ESQ一样对待ATTY,尽管在美国有超过10万人有这个姓氏。

或者你可以提供赏金或尝试freelancer.com,我希望你能找到很多人为一小笔钱而感到高兴,提供的代码不仅更具选择性,而且可能会给你一个'得分'表示任何“匹配”的可能性。