2012-07-25 51 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或者您自己的停用詞表等)。這需要一段時間才能完成,但這大概是您可以作爲一次性任務或至少定期執行的任務(例如,每天一次)