这是一个有趣的问题。

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

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

没有任何类型的唯一标识符可用于将记录绑定在一起,并且数据质量并不总是那么好 - 总是会出现拼写错误,人们使用不同的名称(即乔 vs.约瑟夫)等。

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

有帮助吗?

解决方案

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

比如Oracle自己针对这个问题的解决方案就是产品“适用于 Oracle Data Integrator (ODI) 的 Oracle Data Quality (ODQ),”这是他们的融合中间件堆栈的一部分。顾名思义,ODQ 需要 ODI(即,它是单独许可且依赖于 ODI 的附加模块)。

IBM 的 Websphere 解决方案套件(通过收购 Ascential 获得)包括 质量阶段.

Business Objects 现在是一家 SAP 公司,拥有 数据质量 其企业信息管理(EIM)套件下的产品。

其他主要数据质量品牌包括 数据流 (SAS 公司)和 延龄草软件 (哈特汉克斯公司)

Gartner 集团发布了数据质量解决方案套件的年度魔力象限。在这些魔力象限中评价良好的供应商通常会在其网站上向注册用户在线提供整个报告(示例1, 示例2).

其他提示

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

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

这是一个概述 怎么运行的.

使用 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. 最后,我们意识到,当您试图确定位于不同地址的两个人是否实际上是同一个人时,处理“John Smith”和处理“Annabelle DiGiovanni”是非常不同的事情。您可以对软件进行微调,使不常见的名字在比赛中比常见的名字更重要,但谁有时间呢?我们的匹配过程准确率约为 80%,我们对手动处理剩余的 20% 感到满意。

不要将其视为自动进行匹配的工具。将其视为一种可以让您的人类数据处理人员提高工作效率的工具。这样你就可以设置好,如果你达到 80% 的准确率,那就是巨大的成功,而不是达不到标准。

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

另外,SQL Server Integration Services(我知道您正在使用 Oracle)有一个对字符串进行“模糊”匹配的组件,允许您找到近似匹配而不是直接的一对一匹配。这称为模糊查找。基本上它会给你一个分数,告诉你两个输入有多接近匹配......然后,您可以设置阈值来告诉它必须有多接近才能将其视为匹配(即80%以内或其他)。

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

祝你好运。

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

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

我找到了一个开源解决方案,名为 二月. 。该工具最初是为生物医学研究领域开发的,该研究解释了“自由扩展的生物医学连锁”的名称。你可以在这里读更多关于它的内容: “高性能记录链接的并行大规模技术”

要全面了解记录链接中涉及的问题/解决方案,请阅读以下内容 “合并/清除和重复检测”.

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

独立验证评估:

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

  1. 数据匹配企业, 最高准确度 (>95%)、非常快、低成本
  2. IBM 质量阶段 ,高精度 (>90%),速度非常快,成本高 (>$100K)
  3. SAS 数据流、中等精度 (>85%)、快速、高成本 (>100K)

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

我在一家保险公司的会员注册名单上做了类似的事情。幸运的是,我们有 SSN 来确定主要成员,但我必须确定受抚养人是新的还是现有的(仅通过姓名)。我尝试了 soundex 算法作为解决方案的一部分,但它似乎不符合要求,因为它似乎将太多不同的名称映射到同一事物(并且许多家庭倾向于用听起来相似的名字来命名他们的孩子)。我最终只是使用(我认为)受抚养人的前四个字母作为唯一标识符,并称其为“足够好”。我不知道我会如何处理乔治·福尔曼的家人:-)

我已经看到了 Dataflux 的实际应用,根据我们的“明星”数据分析师的说法,这是他发现的用于链接人员和公司名称的最准确的“聚类”工具(Dataflux 称之为)。不过,它相当昂贵。

这是一个经典的记录链接问题。错别字、漏写字母等。可以通过定义阻止规则集来使用概率方法来处理。

一款可以很好地为您做这件事的软件是 FRIL. 。在Java中,免费并且非常友好。网站上有教程和视频的链接。它支持数据库连接,尽管我不确定预言机。

雷克林克 可能是另一种方法,尽管您可能需要更加努力才能启动并运行它,因为没有手册/教程(据我所知)。

从免费选项中,还有 雷莱斯.

我用了 数据梯子网 对于一个大的名字数据集。他们出色地匹配了具有不同拼写的不同数据库,并删除了大量重复项。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top