联系方式

联系方式

所以我有一些带有姓名、地​​址和邮政编码的表格,但没有附加记录数据;我有一个包含所有内容但包含更多信息的表格,并且当它们不 100% 匹配时,我需要一种合并表格的方法。

如果它们不相同,我该如何匹配它们?我是 SQL 新手,但我知道它们大部分不会匹配,而且我不可能是唯一遇到这个问题的人。然而,事实证明,要做到这一点的软件很困难。

编写软件来实现这一点甚至比一开始就这样做更糟糕。

我知道我可以在 Excel 中做到这一点;有点,但由于我拥有的记录数量超过一百万,这证明很困难。

答案1

我曾经在一家数据库营销公司工作(抱歉给您发了垃圾邮件)。我们的工作是确定“Robert Jones 671 Kimbrough SPFD MO 65802”是否与“Bobbie Joanes 671 Kimbrough St. Sprinfield MO 65809”相同。如果我们无法匹配,我们就会冒着向潜在客户发送重复邮件的风险,这会让我们的客户看起来很愚蠢,同时也浪费了他们的钱。

我们的方法是将问题分解为更小的领域,并应用不同的标准来回答大概B. 匹配规则太严格,您将无法发现重复项。匹配规则太宽松,您将失去潜在客户。

我们有三个实体可以匹配的域:姓名、联系方式、关系。只有当我们在两个域之间匹配时才允许匹配。

联系方式

联系方式是邮件、电子邮件或电话。

地址

第一步是标准化提供的地址。最终目标是获取您输入的地址并将其更正为美国邮政服务标准。在前面的例子中,两个地址都可能收到邮件,但只是因为邮递员了解发件人的意图。真正的地址将是

671 S KIMBROUGH AVE 斯普林菲尔德 MO 65806-3342

一旦你有了一致的地址,那么地址匹配就更容易解决了。你仍然需要担心那些无法更正的地址,以及多租户位置(Suite 200、Apt B 等)的规则,但这是你需要与企业主一起制定的微调的一部分。哦,尽管 +4 位数字对于送货很方便,但不要让它们影响你的地址匹配逻辑。这些比 5 位邮政编码更容易改变。

另外要记住的是,人们会搬家,因此如果您需要当前地址数据,您可以获取过去 X 个时间段的地址转发信息 (NCOA - 全国地址变更)。当您搬家时,地址转发文件仅在一段固定时间内有效,任何在此时间段之后向您发送邮件的人都会收到退回发件人的邮件,而不会收到此地址的退回邮件。在发送邮件之前对邮件进行 NCOA 处理可确保您拥有当前地址,即使转发已过期。

我们的方法是将标准化地址(第 1 行 + 邮政编码)进行哈希处理,然后将其用作比较键。

电话

关于电话,唯一棘手的事情是它们是否与区号相关联。我们存储它们时没有分隔符或格式,任何扩展名都单独存储。这归结为 7 位或 10 位电话号码。如果我们有地址,有软件可以通常补填区号。随着区号的分裂,通常会有一个宽限期,在此期间一个位置可以由 2 个(或更多)区号提供服务。

电子邮件

一般来说,电子邮件地址要么匹配,要么不匹配。当我们真的迫切地想要匹配时,我们会清理数据。这包括查看域名并确保它们存在,如果不存在,则添加顶级域名。如果我们看到 joan@aol,那么可以肯定他们指的是 @aol.com。另一个可以用来提高电子邮件匹配度的技巧是当他们在地址中使用 + 时。一些提供商(如谷歌)允许[电子邮件保护]发送到基本地址。我发现这是将电子邮件地址与我注册的特定网站相关联的有用方法。如果垃圾邮件开始流入该帐户,那么我就知道我可以攻击谁了。但是,出于匹配目的,您可能能够丢弃从 + 到 @ 的内容

名字

“名字有什么意义?我们用其他任何拼法称呼的琼斯可能是同一个人”

威廉·马茨皮尔

我们发现,我们需要对姓名进行两种不同类型的匹配。企业或实体名称和个人姓名。美国姓名可能有一个前缀(Mr、Mrs、Dr、Fr、Sen、Sgt 等)、一个名字、一个中间名、一个第二个中间名或父姓、一个姓氏/母姓、世代(Jr、Sr、IV)、专业/荣誉/学术(MBA、JD、PhD、esq 等)。这不是很有趣吗?

只要数据被捕获到各个部分,通常就不会那么糟糕。否则,如果您假设可以根据空格进行拆分以确定姓名部分,您可能会得到奇怪的结果,正如我的朋友(姓氏为“de los santos”)可以证明的那样。

公司名称,通常他们只会提供这些。需要注意的是,DBA 以以下名称开展业务。“Soulless megacorporation LLC DBA Happy cuddly puppy protect”可能需要与“Happy cuddly puppy protect”和/或“Soulless Megacorporation”相匹配

姓名匹配

个人姓名匹配的第一步是声音索引。它通常在 RDBMS 中可用,并且根据您的输入数据,它可能可以通过。soundex 的问题在于它仅适用于欧洲名称的子集。一种更智能的语音方法,也是我们使用的方法是双重变音位算法。这为字符串匹配提供了更好的结果。

在我们上面的例子中,Jones 和 Joanes 的精确匹配会失败,但语音匹配应该可以成功。但问题是我们将 Bobbie 和 Robert 进行了匹配。无论怎么想都不会让这两个人听起来一样,但客户坚持认为我们缺少匹配项,所以我们添加了另一组检查以将昵称扩展回其完整值,然后重新进行比较。

在公司名称比较中,我们发现编制一份“停用词“- 名称中出现的无意义的垃圾,但为了匹配目的应该被忽略(a、of、the、LLC、corp、univ、university)

然后我们收到反馈说“简单的”拼写错误、字母转置或遗漏导致实体不匹配。随着这个答案变得越来越长,我们还收到了关于公司名称匹配失败的反馈,例如“Johns used tire barn”匹配到“Johns mega used tire barn”。我们最终实施了一个n-gram 比较以及一个代币比较算法来帮助解决这些情况。从那时起,我就和业内其他人谈过,他们支持使用编辑距离用于确定字符串匹配。

关系

关系基本上是我们知道的另一件事。一家公司开展了一项促销活动,销售人员通过让客户填写商业回复卡来获得奖励。我们有“John's used tire barn”员工名单,我们需要将不完整的姓名数据与该参考集关联起来。我在这里只谈论完整性。对于您的问题,您将查看姓名和 MoC 匹配项。

赶紧完成

实施的具体细节取决于您的数据是什么样的以及您愿意在这个问题上投入多少时间和金钱。

我的一般方法是先将两组数据导入数据库。具有所有属性的数据是参考集。较小的数据集是候选集。在候选表上,添加一个包含参考集标识符的列。以下内容缺乏规范化,但这是有意为之

CREATE TABLE 
    dbo.reference 
(
    reference_id int identity(1,1) NOT NULL PRIMARY KEY
,   name_prfix varchar(50) NULL
,   name_first varchar(50) NOT NULL
,   name_middle varchar(50) NULL
,   name_last varchar(50) NOT NULL
,   name_suffix varchar(20) NULL
,   company_name varchar(100) NULL
,   address_line1 varchar(70) NULL
,   address_line2 varchar(50) NULL
,   address_city varchar(50) NULL
,   address_state varchar(20) NULL
,   address_postalcode varchar(10) NULL
,   address_zip4 char(4) NULL
,   phone_number varchar(10) NULL
)

CREATE TABLE 
    dbo.candidate
(
    candidate_id int identity(1,1) NOT NULL PRIMARY KEY
,   name_prfix varchar(50) NULL
,   name_first varchar(50) NOT NULL
,   name_middle varchar(50) NULL
,   name_last varchar(50) NOT NULL
,   name_suffix varchar(20) NULL
,   company_name varchar(100) NULL
,   address_line1 varchar(70) NULL
,   address_line2 varchar(50) NULL
,   address_city varchar(50) NULL
,   address_state varchar(20) NULL
,   address_postalcode varchar(10) NULL
,   address_zip4 char(4) NULL
,   reference_id int 
)

迭代 TSQL

步骤 1,直接匹配。只要候选人和参考之间存在完全匹配,就将其记录在 Candidate.reference_id 中,并将其从流程中排除。

第 2 步,直接匹配昵称扩展和/或停用词替换

步骤3,地址匹配与模糊名称匹配(双元音+ngram+最小编辑距离)

步骤 4,使用模糊昵称扩展和/或停用词替换匹配(双元音 + ngram + 最小编辑距离)进行地址匹配

步骤 5,检查剩余的候选池以进行手动匹配

安全信息系统

SSIS 企业版提供模糊逻辑功能。基本上,它的功能与 TSQL 方法中列出的功能大致相同,无需您组装自己的名称匹配框架等。

SSIS 2012 版还提供数据质量服务,可以解决清理地址以及将姓名分成几部分的问题。

相关内容