代码之家  ›  专栏  ›  技术社区  ›  chris

用于匹配名称/地址数据的工具[已关闭]

  •  14
  • chris  · 技术社区  · 16 年前

    这是一个有趣的问题。

    我有一个Oracle数据库,其中包含需要保持最新的名称和地址信息。

    我们从许多不同的政府来源获得数据源,需要找出匹配项,是否用数据更新数据库,或者是否需要创建新记录。

    没有任何类型的唯一标识符可以用来将记录连接在一起,数据质量也不总是那么好——总是会有打字错误,人们使用不同的名字(例如乔和约瑟夫),等等。

    我很想听听以前处理过这类问题的人的意见,他们是如何解决问题的,或者至少是自动化的部分。

    10 回复  |  直到 8 年前
        1
  •  7
  •   mdy    16 年前

    每个活跃在这个领域的主要软件公司都提供了解决方案套件,可以处理名称和地址解析、数据标准化、重复数据消除或匹配、记录链接/合并、生存等等。不过,它们都有点贵。

    例如,Oracle自己针对这个问题的解决方案是 Oracle Data Quality (ODQ) for Oracle Data Integrator (ODI) ,这是他们的Fusion中间件堆栈的一部分。顾名思义,ODQ需要ODI(也就是说,它是一个附加模块,单独授权,依赖于ODI)。

    IBM的WebSphere解决方案套件(通过其升级收购获得)包括 QualityStage .

    现在是SAP公司的Business Objects Data Quality 其企业信息管理(EIM)套件下的产品。

    其他主要数据质量品牌包括 Dataflux (一家SAS公司)和 Trillium Software (哈特汉克斯公司)

    Gartner Group发布了数据质量解决方案套件的年度魔力象限。在这些神奇象限中评分很高的供应商通常会将整个报告在线提供给其网站上的注册用户。( example 1 , example 2 )

        2
  •  6
  •   fgregg    8 年前

    在开源方面,现在有一个python库用于执行这种重复数据消除/实体解析: Dedupe .

    需要编程技能,但它是免费的,可以在笔记本电脑上运行,而不是一个巨大的服务器。

    以下是对 how it works .

        3
  •  4
  •   JPLemme    16 年前

    使用FirstLogic的经验教训。(其他产品应该是相似的。)在上下文中,我们从几十个来源获取文件,每个来源的格式都不同。我们需要知道哪些人需要添加到我们的数据库中,哪些人需要更新,哪些人只需要标记为“在列表上”。

    1. 我预计软件会查看整个文件,并确定——比如——如果A列的姓氏在100行中的98行中,那么A列必须是姓氏列。这不是真的;每个记录都是单独处理的。

    2. 如果您确切知道什么数据在哪个字段中,那么您可以告诉软件,它将处理它。但是如果你不总是确定你最好还是把整个字符串都给它,让软件来解决它。例如,姓氏字段包含类似“Smith Jr MD”的内容。如果您声明它是姓氏列,它将假定姓氏是“Smith Jr MD”。但是如果你通过“john smith jr md”,让软件计算出来,它将正确识别所有的位。

    3. 有些事情看起来很明显,但事实并非如此。例如,开箱即用的firstlogic不假定逗号表示“姓氏,名字”。它实际上有一个很大的姓氏列表和一个很大的名字列表,所以它认为它可以忽略逗号。我们总是和“约翰,托马斯”这样的人发生矛盾。有时会让人困惑,因为在我们看来,一个明显的姓氏实际上是西班牙语或其他语言的名字。

    4. 很难使用该系统添加虚拟数据。如果有人命名了诸如“测试帐户”或“tbd”之类的东西,那么他们根本不会被处理——FirstLogic会丢弃记录,因为它找不到任何可以识别的数据位。

    5. 定制系统是可能的,但并不像销售人员那样简单。有一百万个选项和自定义文件和字典。如果您希望能够定制它,那么您需要投入时间来理解它是如何工作的。它就像一个RDBMS或ETL工具。这不是魔法黑匣子。

    6. 它还具有大量的数据质量特性,这些特性有助于证明购买软件的合理性,但这需要专门的努力来学习和应用。

    7. 这些工具并不是专门针对主文件处理列表的;它们是为合并清除操作创建的。这是可能的(我们正在这样做),但它要求您将数据库视为一个列表(这要求您将所有活动记录提取到一个平面文件中)。此外,您希望对哪些记录进行更多的控制(例如,如果名称80%匹配,邮政编码的前两位数字相同,那么可能是同一个人,等等),那么您的批处理过程将变得复杂起来。

    8. 最后,我们发现处理“约翰·史密斯”和处理“安娜贝尔·迪吉奥瓦尼”是非常不同的野兽,当你试图确定两个不同地址的人是否实际上是相同的。您可以对软件进行微调,使不常用的名称在匹配中比常用名称更重要,但谁有时间呢?我们的匹配过程大约80%准确,我们对手动处理剩余的20%感到满意。

    不要认为它是自动进行匹配的工具。把它当作一个工具,让你的人类数据处理器更有效率。这样,你就设置好了,如果你达到80%的准确率,这是一个巨大的成功,而不是缺分。

        4
  •  2
  •   Doanair    16 年前

    在我目前的工作中,我们有很多数据完整性问题。我们尝试在加载数据之前“清除”数据,以确保质量。我们目前使用Melissa数据删除姓名、地址和电子邮件。在加载之前,它可以很好地实现标准化。这样,我们就可以避免重复的数据。

    另外,SQL Server集成服务(我知道您使用的是Oracle)有一个组件,它对字符串进行“模糊”匹配,允许您找到一个接近匹配的组件,而不是直接的一对一匹配。这叫做模糊查找。基本上,它给你一个分数,告诉你两个输入有多接近一个匹配…然后,您可以设置阈值来告诉它将其视为一个匹配(即80%以内或其他任何匹配)需要多近。

    过去,我也用过 SOUNDEX 以确定名称在确定重复项时是否相似。有很多Soundex实现。

    祝你好运。

        5
  •  2
  •   Robert Groves    16 年前

    您要解决的问题的术语是“记录链接”。

    我不能推荐特定的工具。搜索“记录链接软件”或“合并清除软件”,通过一些研究,你应该能够找到满足你需要的东西。

    我找到了一个开源解决方案 Febrl . 此工具最初是为生物医学研究领域开发的,它解释了“可自由扩展的生物医学记录链接”的名称。您可以在此处阅读更多信息: "Parallel Large Scale Techniques for High-Performance Record Linkage"

    有关记录链接中涉及的问题/解决方案的良好概述,请阅读 "Merge/Purge and Duplicate Detection" .

        6
  •  1
  •   TBarnes    11 年前

    每个主要供应商都有自己的解决方案。Oracle、IBM、SAS Dataflux等都声称自己是最好的。

    独立验证评估:

    澳大利亚柯廷大学数据链接中心进行的一项研究模拟了440万条记录的匹配。确定供应商的准确度(找到的匹配数与可用的匹配数)。错误匹配数)

    1. DataMatch Enterprise ,最高精度(>95%),非常快,成本低
    2. IBM Quality Stage ,精确度高(>90%),速度快,成本高(>10万美元)
    3. SAS数据流量,中等精度(>85%),快速,高成本(>100K)

    这是我们能找到的最好的独立评估,非常彻底。

        7
  •  0
  •   runrig    16 年前

    我在一家保险公司的会员登记表上做了类似的事情。幸运的是,我们有SSN来确定主要成员,但我必须决定依赖项是新的还是现有的(仅按名称)。我尝试了Soundex算法作为解决方案的一部分,但它似乎不符合要求,因为它似乎将太多不同的名字映射到同一个事物上(许多家庭倾向于用相似的名字给他们的孩子命名)。最后,我用(我想)家属名字的前四个字母作为唯一的标识符,并称之为“够好的”。我不知道如何处理乔治·福尔曼的家人:—)

        8
  •  0
  •   luiscolorado    15 年前

    我已经看到了dataflux的实际应用,根据我们的“star”数据分析师的说法,它是他发现的最准确的“集群”工具(如dataflux所称),用于链接人和公司的名称。不过,它相当贵。

        9
  •  0
  •   radek    14 年前

    这是一个经典的记录链接问题。通过定义一组阻塞规则,可以使用概率方法处理打字错误、缺少字母等。

    一个能为你做得很好的软件是 FRIL . 在爪哇,免费而且非常友好。网站上有教程和视频的链接。它支持数据库连接,尽管我不确定Oracle。

    RecLink 可能是另一种方式,尽管您可能需要更努力地工作才能启动和运行它,因为没有手册/教程(据我所知)。

    从免费选项中,还有 RELAIS .

        10
  •  0
  •   tom    10 年前

    我用过 dataladder.com 对于一个大的名字集。他们做了一项很棒的工作,用非常不同的拼写匹配不同的数据库,并剪断了许多重复的数据库。