根据姓名,DoB,地址等匹配人员

时间:2011-04-04 08:42:43

标签: algorithm search compare

我有两个格式不同的数据库。每个数据库都包含人员数据,如姓名,出生日期和地址。它们都相当大,一个是约50,000个条目,另一个是~150万个。

我的问题是比较条目并找到可能的匹配。理想情况下,生成某种百分比表示数据匹配的接近程度。我已经考虑过涉及生成多个索引或基于Levenshtein距离搜索的解决方案,但这些似乎都不是最优的。索引可能很容易错过近距离匹配,Levenshtein距离对于这一数据量来说似乎太昂贵了。

2 个答案:

答案 0 :(得分:6)

让我们尝试将一些想法放在一起。一般情况太广泛,这些只是指导/提示/无论如何。

通常你想要的不是真/假匹配关系,而是每个候选匹配的得分。那是因为你永远不能完全确定候选人是否真的匹配。

得分是一对多的关系。您应该准备好将小数据库的每个记录与主数据库的多个记录进行排名。

每种比赛都应该分配一个重量和一个分数,并加上该对的总分。

您应该尝试将片段尽可能小地进行比较,以便检测部分匹配。而不是比较[地址],尝试比较[城市] [州] [街道] [数字] [apt]。

某些领域需要特殊处理,但这个问题对于这个答案来说太宽泛了。只是一些提示。名称和前缀的中间首字母可以添加一些分数,但应保持最小值(因为它们被跳过很多次)。电话号码可能具有可变前缀和后缀,因此有时需要子字符串匹配。根据数据质量,名称和姓氏必须转换为soundex或类似名称。街道名称通常是标准化的,但它们可能缺少前缀或后缀。

如果您需要高质量的输出,请做好长时间运行的准备。

通常设置一个porcentual阈值,这样如果在处理了部分一对,并从y的最大值中获得小于x的分数后,该对被丢弃。

如果你知道某些字段必须匹配才能将一对作为候选对象,那通常会加速整个事情。

用于比较的数据结构是至关重要的,但我不认为我的特殊经验会很好地为您服务,因为我总是在大型机中做这种事情:非常高速的磁盘,大量的内存和大量的并行性。我可以想一想与一般情况有什么关系,如果你觉得有些帮助可能会有用。

HTH!

PS:几乎是一个笑话:在几年前我管理的一个大项目中,我们在两个数据库中都有母亲的姓氏,我们分配了一个重要的分数=两个姓氏匹配(个人和他母亲的)。士气:所有史密斯 - >史密斯都是同一个人:)

答案 1 :(得分:0)

如果您的DBMS支持,您可以尝试使用全文搜索功能吗?全文搜索构建其索引,并可以找到相似的单词。

这会对你有用吗?