【问题标题】:MySQL / PHP - Partial comparison as duplicate matchMySQL / PHP - 部分比较作为重复匹配
【发布时间】:2014-04-21 19:06:31
【问题描述】:

将部分数据与完整记录进行比较以作为可能的重复匹配项的最佳方法是什么?

例如,假设您有一个客户数据库,其中存储联系信息,例如名字、姓氏、地址、城市、邮政编码,并允许每条记录有多个电话号码。

目标是找到所有可能的“匹配”,即某些数据非常接近匹配,或与输入的信息相同。

例子:

Real Data Contains
First Name: Robert
Last Name: Smithson
Phone Numbers:  1111231234, 1111241235
Zip/Postal: 90210

我希望该记录显示在结果中,不仅是完全匹配,而且如下所示:

  • 罗伯·史密斯
  • 90211
  • 90120
  • 鲍勃·伊森 = 鲍比·孙

现在我了解了上面的名称变体,我需要有一个单独的表,我可以使用它来智能地区分名称变体/部分,但是目标是有某种模糊逻辑可以合理地确定记录的重复性和/或在给定部分数据的情况下返回最可能的结果。

我考虑过以下方法:

  • 对记录进行散列处理并使用该记录进行相对比较:由于与存储的数据相比变化太大,因此无法正常工作。
  • 记录中的字符存储在 char 数组中以进行比较(又名,有多少 A's、B's 等):这会造成问题,因为正在查找的内容之间的差异可能无法解释足够的字符按字符进行全谱分析。

我正在寻找使用 PHP 以编程方式解决此问题的其他可能性。

数据库后端将在 MySQL 中,还没有结构。

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    【讨论】:

    • 这看起来很有希望。看起来它也在进行字符串比较,所以在“Rob”与“Robert”的情况下,鉴于“Robert”的长度是“Rob”的两倍,结果会是什么
    • Robert 和 Rob 之间的距离为 3,因为您需要更改(添加)3 个字符
    • 这是一个不错的解决方案,但仍需要大量工作。例如,TimTom 等两个完全不同的名称返回的距离为 1,这将导致标记。将其标记为已接受,因为它比我已经尝试过的以前的方法要好一些,但是如果您能对我可能会做的其他事情提供一些见解以提高准确性,我们将不胜感激。
    • 在 Levenshtein,您可以决定什么是运营成本。例如,减法可能需要 10 分,而添加/删除每个字符需要 1 分。 SmithsonSmithsan 是否应该被视为匹配?
    • 我明白,但是比较 BobBab .. 显然这是一个错字,Leven 会返回 1,但是 TimTom 会以编程方式返回相同的距离1. 在 Bob vs Bab 的情况下......我想要这个,但是在 Tim vs Tom 中,这可能不是错字。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-11
    • 2013-06-10
    • 1970-01-01
    • 2013-08-22
    • 1970-01-01
    • 1970-01-01
    • 2014-05-15
    相关资源
    最近更新 更多