2012-07-25 88 views
1

是否有任何工具可用于识别和合并MySQL表中的非精确重复项?从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(也可能非常缓慢)。

+0

您是否正在清理数据,或只找到一次数字?如果您有时间清理,则可以使用MySQL [全文搜索](http://dev.mysql.com/doc/refman/5.0/en/fulltext-natural-language.html)进行匹配为了相关性(尽管这需要一些时间),并且允许您清理现有的数据 - 那么您可以运行一些快速比较。 – Fluffeh 2012-07-25 22:19:19

+1

@Fluffeh只是识别数据是关键步骤,如果我能识别它,我可以构建一个合并过程。如果有一个工具可以为我合并,太棒了!全文搜索并不是真的很好,它尤其难以搜索地点和公司名称,因为它们并不总是真正的单词。 – Petah 2012-07-25 22:22:50

+1

你看过MySQL运算符[SOUNDEX()](http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#operator_sounds-like)吗? – 2012-07-25 22:46:38

回答

3

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

Google Refine很好按摩工具。我将首先加载Refine中的数据,清理它,然后导入到关系数据库中。

+0

当“按摩”数据时,我会小心使用任何第三方apis,除非他们的TOS明确声明他们“不”,Google可能会存储正在按摩的数据以供他们自己访问。 – 2012-08-02 20:37:23

+0

Google Refine是一种离线工具,而不是Web服务。数据不会发送给Google。 – 2012-08-02 22:59:44

2

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

使用Oliver或Levenshtein(MySQL)可能会工作,并且有太多数据要拉入PHP(也可能非常缓慢)。

你说这就好像它是事实,但这正是我所暗示的。例如。在php中加载一行。然后遍历所有其他行,匹配您认为合适的各种算法(Levenshtein或者您自己的停用词表等)。这需要一段时间才能完成,但这大概是您可以作为一次性任务或至少定期执行的任务(例如,每天一次)