2012-07-25 3 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를 설치했다. 그들이 도움이된다면 MongoDB와 Solr을 사용하거나 사용할 수 있습니다. 필요한 경우 다른 소프트웨어를 설치할 수 있습니다.


또는이를 처리 할 도구를 찾을 수없는 경우 어떤 종류의 쿼리를 실행해야합니까?

단순한 find all duplicates은 정확하지 않기 때문에 작동하지 않을 수 있습니다.

검색과 같은 와일드 카드를 사용하면 시도해야 할 모든 조합이 매우 느려집니다.

Oliver 또는 Levenshtein(MySQL)을 사용하면 PHP로 가져올 데이터가 너무 많습니다 (너무 느린 경우도 있음).

+0

데이터를 정리하려고 할 때, 아니면 그냥 한 번 번호를 찾으십니까? 정화 할 시간이 있다면 MySQL [전체 텍스트 검색] (http://dev.mysql.com/doc/refman/5.0/en/fulltext-natural-language.html)을 사용하여 일치시킬 수 있습니다 관련성을 위해 (약간의 시간이 걸릴지도 모르지만) 기존 데이터를 정리할 수 있습니다. 그러면 빠른 비교를 할 수 있습니다. – Fluffeh

+1

@Fluffeh 데이터를 식별하는 것이 핵심 단계입니다. 식별 할 수 있다면 병합 프로세스를 구축 할 수 있습니다. 나를 위해 그것을 병합 할 수있는 도구가 있다면, 좋습니다! 전체 텍스트 검색은 실제 좋은 단어가 아니며 항상 실제 단어가 아니기 때문에 특히 장소와 회사 이름을 검색하는 데 어려움이 있습니다. – Petah

+1

MySQL 운영자 [SOUNDEX()] (http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#operator_sounds-like)를 살펴 보았습니까? –

답변

3

마사지가 필요한 데이터가 있습니다. 나는 이것이 당신이 전적으로 SQL에서 할 수있는 것이라고 생각하지 않는다.

Google Refine위대한 마사지 도구입니다. 먼저 Refine에서 데이터를로드하고 정리 한 다음 관계형 데이터베이스로 가져옵니다.

+0

TOS에서 특별히 언급하지 않는 한, 데이터를 "마사지"할 때 제 3 자 api를 사용하여 신경 써야합니다. Google은 자체 액세스를 위해 데이터를 저장할 수 있습니다. –

+0

Google은 웹 서비스가 아닌 오프라인 도구입니다. 데이터가 Google로 전송되지 않았습니다. –

2

검색과 같은 와일드 카드를 사용하면 시도해야 할 모든 조합이 매우 느릴 수 있습니다.

Oliver 또는 Levenshtein (MySQL)을 사용할 수 있으며 PHP로 가져올 데이터가 너무 많습니다 (너무 느린 경우도 있음).

사실을 진술 한 것처럼이 사실을 설명하지만 정확히 내가 제안한 것입니다. 예 : php에 한 행을로드하십시오. 그런 다음 적절하다고 생각되는 다양한 알고리즘 (Levenshtein 또는 귀하 자신의 불용어 목록 등)과 일치하는 다른 모든 행을 반복합니다. 실행하는 데 시간이 좀 걸리지 만, 일회성 작업 또는 적어도 정기적인 작업 (예 : 하루에 한 번)으로 수행 할 수있는 작업 일 수 있습니다.

관련 문제