문제

문제는 약 20K 고객 레코드가있는 데이터베이스가 있으며 중복 항목을 피하기 위해 최선을 다하고 싶습니다. 데이터베이스는 Microsoft SQL Server 2005이며 데이터베이스를 유지 관리하는 응용 프로그램은 Microsoft Dynamics/SL입니다. 해당 데이터베이스와 상호 작용하는 ASP.NET 웹 서비스를 작성하고 있습니다. 내 서비스는 고객 레코드를 데이터베이스에 삽입하거나 레코드를 읽거나 해당 레코드를 수정할 수 있습니다. 내 웹 서비스 나 MS Dynamics 또는 SQL Server에서 사용자가 새 레코드 추가를 확인하기 전에 가능한 일치 목록을 제공하고 싶습니다.

따라서 사용자는 레코드를 제출할 수 있습니다. 독특한 것으로 보이면 레코드는 새 ID를 저장하고 반환합니다. 복제가 가능한 경우, 사용자는 "예, 가능한 복제본이 보이고 이것은 새로운 레코드이며 제출하고 싶습니다"라는 확인으로 다시 제출할 수 있습니다.

구두점 또는 우주 일이라면 쉽습니다 (예 : "Company, Inc."에 들어가는 경우 데이터베이스에는 "회사 Inc"가 있지만 "Company Corp와 같은 약간의 변경 사항이 있으면 어떻게해야합니까? ""Company Inc "대신 또는"Cmpany, Inc. "와 같은 뚱뚱한 손가락 틀린 틀린이있는 경우 목록에서 그 기록을 반환 할 수 있을까요? 중복으로 인해 레코드를 병합 해야하는 경우 나중에 더 많은 작업을 유발합니다.

도움이 되었습니까?

해결책

그 세부 사항 연산 당신에게 가장 잘 맞으면 당신의 도메인에 크게 의존하므로 몇 가지 다른 도메인을 실험하는 것이 좋습니다. 최적의 결과를 얻으려면 몇 가지를 결합해야 할 수도 있습니다. 약어, 특히 도메인 특정 제품은 전처리되거나 표준화되어야 할 수도 있습니다.

이름의 경우 아마도 당신은 아마도 음성 알고리즘 - 발음을 고려합니다. 이들은 Smith와 Schmidt가 함께 가깝게 점수를 매길 것입니다. 속담 단어. 이중 은유 좋은 첫 번째 선택입니다.

뚱뚱한 핑거링의 경우 아마도 당신은 아마도 거리를 편집합니다 알고리즘 - 두 단어 사이에 "차이"를 제공합니다. 이들은 2 명이 발음 검색을 통해 미끄러질 수 있지만 Smith와 Smoth를 서로 밀접하게 득점 할 것입니다.

t-sql은 soundex를 가지고 있습니다 차이점 -하지만 그들은 꽤 가난합니다. ㅏ Levenshtein 변형은 표준 선택이지만 다른 좋은 선택이 있습니다. 대부분은 매우 쉽습니다. 구현하다 C#에서는 적절한 라이센스 구현을 찾을 수없는 경우.

이들 모두는 t-sql보다 c#에서 코딩/사용하기가 훨씬 쉽습니다 (찾았지만 T-SQL의 끔찍한 남용에서 이중 은유 SQL에서 작동 할 수 있습니다).

비록 이것 예는 액세스에 있습니다 (그리고 나는 실제로 코드를 보지 않았거나 구현을 사용한 적이 없습니다) 포함 된 프레젠테이션은 아마도 당신이 무엇을 해야하는지에 대한 상당히 좋은 아이디어를 제공합니다. 이 코드는 아마도 볼만한 가치가 있으며 아마도 VBA의 포트 일 것입니다.

다른 팁

들여다보다 Soundexing SQL 서버 내에서. 나는 그것이 당신이 찾고있는 가능한 경기의 퍼지를 줄 것이라고 믿는다.

soundex @ msdn

soundex @ wikipedia

통합 할 수있는 경우 Lucene.net 솔루션을 사용하면 분명히 시도해야합니다.

freetext (또는 freetexttable) 함수를 사용하여 전체 텍스트 검색을 사용하여 가능한 일치를 찾을 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top