从MySQL数据库中识别(非精确)重复项

时间:2012-07-25 22:12:56

标签: php mysql search full-text-search search-engine

是否有任何工具可用于识别和合并MySQL表中的非精确重复项?

我有一个包含许多重复项的大型数据集,如:

1348,  Auto Motors, 12 Long Road, etc
48264, Auto Mtors,  12 Log Road,  etc
82743, Ato Motoers, 12 Lng Road,  etc
83821, Auto Motors, 13 Long Road, etc
92743, Auto Motors, 11 Long Road, etc

有许多表需要合并,如:

  • 公司
  • 地址
  • 电话号码
  • 员工

大约有100,000行,每行匹配30-40列(连接表)。

那么,是否有人知道将其整理出来的工具?我已经安装了MySQL,PHP。我有/可以使用(d)MongoDB和Solr,如果他们愿意的话。如果需要,我愿意安装其他软件。


如果我找不到处理此问题的工具,我应该运行什么样的查询。

一个简单的find all duplicates不会起作用,因为它们不准确。

对于我需要尝试的所有不同组合,像搜索这样的通配符会非常慢。

使用OliverLevenshtein (MySQL)可能会有效,并且有太多数据需要用于PHP(也可能非常慢)。

2 个答案:

答案 0 :(得分:3)

您有需要按摩的数据。我不认为这是你可以在sql中完全做的事情。

Google Refine是一个伟大的按摩工具。我会首先在Refine中加载数据,清理它,然后导入到关系数据库中。

答案 1 :(得分:2)

  

对于我需要尝试的所有不同组合,像搜索这样的通配符会非常慢。

     

使用Oliver或Levenshtein(MySQL)可能会有效,并且有太多数据需要用于PHP(也可能非常慢)。

你说这好像是事实,但这正是我所建议的。例如。加载一行到PHP。然后遍历所有其他行,匹配您认为合适的各种算法(Levenshtein或者您自己的停用词列表等)。这需要一段时间才能完成,但这可能是你可以做的一次性任务或者至少是一个周期性的任务(比方说,每天一次)