따라서 레코드 데이터가 첨부되지 않은 이름, 주소 및 우편번호가 포함된 테이블이 있습니다. 그리고 모두 동일하지만 더 많은 정보가 있는 테이블이 있고 100% 일치하지 않을 때 테이블을 병합하는 방법이 필요합니다.
동일하지 않은 경우 어떻게 일치시키나요? 나는 newb @ SQL이지만 대부분 일치하지 않을 것이며 이 문제가 있는 유일한 사람이 될 수 없다는 것을 알고 있습니다. 그러나 이를 수행하는 소프트웨어는 어려운 것으로 입증되었습니다.
이를 수행하는 소프트웨어를 작성하는 것은 처음부터 이를 수행하는 것보다 훨씬 더 나쁩니다.
나는 Excel에서 이것을 할 수 있다는 것을 알고 있습니다. 좀 그렇긴 하지만 기록의 양을 보면 백만 개가 넘는다는 것이 어려운 것으로 판명되었습니다.
답변1
저는 데이터베이스 마케팅 회사에서 일했습니다(정크 메일을 보내서 죄송합니다). "Robert Jones 671 Kimbrough SPFD MO 65802"가 "Bobbie Joanes 671 Kimbrough St. Sprinfield MO 65809"와 동일한지 알아내는 것이 우리의 임무였습니다. 일치하지 않으면 잠재 고객에게 중복 메일을 보낼 위험이 있습니다. 그러면 우리 고객은 멍청해 보일 뿐만 아니라 돈도 낭비하게 될 것입니다.
우리의 접근 방식은 문제를 더 작은 영역으로 분해하고 다른 기준을 적용하여 A라는 답을 얻는 것이었습니다.아마B. 일치 규칙이 너무 엄격하여 중복 항목을 잡을 수 없습니다. 일치 규칙이 너무 느슨하면 잠재 고객을 버릴 수 있습니다.
우리는 엔터티가 일치할 수 있는 세 가지 도메인(이름, 연락 방법, 관계)을 가졌습니다. 두 도메인에서 일치하는 경우에만 일치가 허용되었습니다.
연락방법
연락방법은 우편, 이메일, 전화였다.
구애
첫 번째 단계는 제공된 주소를 표준화하는 것입니다. 최종 목표는 입력 주소를 가져와서 다음과 같이 수정하는 것입니다.USPS기준. 앞의 예에서 두 주소 모두 우편물이 배달될 수 있지만 이는 우편배달부가 발신자의 의도를 이해했기 때문입니다. 실제 주소는
671 S KIMBROUGH AVE 스프링필드 MO 65806-3342
일관된 주소가 있으면 주소 일치 문제를 훨씬 쉽게 해결할 수 있습니다. 수정할 수 없는 주소와 다중 임차 위치(Suite 200, Apt B 등)에 대한 규칙에 대해 여전히 걱정해야 하지만 이는 사업주와 함께 해결해야 할 미세 조정의 일부입니다. . 아, 그리고 +4자리 숫자가 배송에 편리하더라도 주소 일치 논리에 이러한 요소를 포함시키지 마세요. 우편번호 5자리보다 변경될 가능성이 훨씬 더 높습니다.
명심해야 할 또 다른 사항은 현재 주소 데이터가 중요한 경우 지난 X 시간대에 대한 주소 전달 정보(NCOA - 전국 주소 변경)를 얻을 수 있도록 사람들이 이사한다는 것입니다. 이사할 때 주소 전달 서류는 정해진 기간 동안만 유효하며 해당 기간 이후에 메일을 보내는 사람은 이 주소 반송이 아닌 보낸 사람에게 반송을 받게 됩니다. 메일을 보내기 전에 NCOA를 사용하면 전달이 만료된 경우에도 현재 주소를 확인할 수 있습니다.
우리의 접근 방식은 표준화된 주소(1행 + 우편 번호)에서 해시를 만들고 이를 비교 키로 사용하는 것이었습니다.
핸드폰
전화와 관련하여 유일하게 까다로운 점은 지역번호가 연결되어 있는지 여부였습니다. 구분 기호나 서식 없이 저장했으며 확장자는 별도로 저장했습니다. 이것은 7자리 또는 10자리 전화번호로 요약됩니다. 주소가 있으면 다음을 수행할 수 있는 소프트웨어가 있습니다.대개지역번호를 다시 채우세요. 지역 코드가 분할됨에 따라 일반적으로 한 위치에 2개 이상의 지역 코드가 제공될 수 있는 유예 기간이 있습니다.
이메일
일반적으로 이메일 주소는 일치하거나 일치하지 않습니다. 우리가 필사적으로 일치를 시도하고 싶을 때 데이터를 정리했습니다. 여기에는 도메인을 살펴보고 해당 도메인이 존재하는지 확인하고 존재하지 않는 경우 최상위 도메인을 추가하는 작업이 포함되었습니다. joan@aol을 본다면 @aol.com을 의미했을 가능성이 높습니다. 이메일 일치율을 높이기 위해 사용할 수 있는 또 다른 방법은 주소에 +를 사용하는 것입니다. Google과 같은 일부 제공업체에서는 다음을 허용합니다.[이메일 보호됨]기본 주소로 배송됩니다. 이메일 주소를 내가 등록한 특정 사이트에 연결하는 것이 유용한 방법이라고 생각합니다. 해당 계정으로 정크 메일이 들어오기 시작하면 누가 누구인지 알 수 있습니다. 그러나 일치 목적을 위해 +에서 @까지의 내용을 버릴 수도 있습니다.
이름
"이름에는 무엇이 들어있나요? 다른 철자로 존스라고 부르는 사람은 동일인일 수도 있습니다."
윌리엄 매치스피어
우리는 이름에 대해 수행해야 하는 두 가지 유형의 일치가 있음을 발견했습니다. 사업체 또는 법인 이름과 개인의 이름입니다. 미국 이름에는 접두사(Mr, Mrs, Dr, Fr, Sen, Sgt 등), 이름, 중간 이름, 두 번째 중간 이름 또는 아버지 성, 성/모성 성, 세대(Jr, Sr, IV)가 있을 수 있습니다. ), 전문/명예/학술(MBA, JD, PhD, esq 등). 재미있지 않나요?
데이터가 개별 부분에서 캡처되는 한 일반적으로 그렇게 나쁘지 않습니다. 그렇지 않으면 "de los santos"라는 성을 가진 내 친구가 증명할 수 있듯이 이름 부분을 결정하기 위해 공백으로 분할할 수 있다고 가정하면 이상한 결과를 얻을 수 있습니다.
회사 이름은 대개 회사에서 제공하는 이름입니다. 주의할 점은 DBA가 업무를 수행하는 것입니다. "Soulless megacorporation LLC DBA Happy cuddly 강아지 보호 구역" "행복한 껴안고 싶은 강아지 보호 구역" 및/또는 "Soulless Megacorporation"과 일치해야 할 수도 있습니다.
이름 매칭
개인 이름 매칭의 첫 번째 통과는 다음과 같습니다.사운드엑스. 일반적으로 RDBMS에서 사용할 수 있으며 입력 데이터를 기반으로 통과할 수 있습니다. soundex의 문제점은 유럽 이름의 하위 집합에만 적합하다는 것입니다. 더 똑똑한 음성학적 접근 방식과 우리가 사용한 방법은이중 메타폰연산. 이는 문자열 일치에 대해 훨씬 더 나은 결과를 제공했습니다.
위의 예에서 Jones와 Joanes의 정확한 일치는 실패하지만 음성 일치는 포착되어야 합니다. 하지만 문제는 Bobbie와 Robert가 있다는 것입니다. 아무리 상상을 해도 이 두 가지가 비슷하게 들리지는 않을 것입니다. 하지만 클라이언트는 우리가 일치하는 항목이 누락되었다고 주장했습니다. 그래서 우리는 닉네임을 다시 전체 값으로 확장하기 위해 또 다른 검사 세트를 추가한 다음 비교를 다시 실행했습니다.
회사 이름 비교에서 "중지 단어" - 이름에 표시되지만 일치 목적에서는 무시해야 하는 의미 없는 허위 내용(a, of, the LLC, corp, univ, University)
그런 다음 문자의 "단순한" 오타, 전치 또는 누락으로 인해 일치하지 않는 항목이 발생한다는 피드백을 받았습니다. 이 답변이 길어짐에 따라 "Johns 중고 타이어 헛간"에서 "Johns 메가 중고 타이어 헛간"과 같은 항목에 대한 회사 이름 일치 실패에 대한 피드백도 받았습니다. 우리는 결국n-그램 비교이러한 시나리오를 해결하는 데 도움이 되는 토큰 비교 알고리즘이 있습니다. 그 이후로 나는 업계의 다른 사람들과 이야기를 나누었고 그들은 사용을 지지했습니다.레벤슈타인 거리문자열 일치를 결정하는 데 사용됩니다.
관계
관계는 기본적으로 우리가 사실이라고 알고 있는 또 다른 것이었습니다. 한 회사는 고객이 비즈니스 회신 카드를 작성하도록 유도하여 영업사원이 칭찬을 받는 프로모션을 진행했습니다. 우리는 "John의 중고 타이어 헛간" 직원 목록을 가지고 있었고 불완전한 이름 데이터를 해당 참조 세트와 다시 연관시켜야 했습니다. 나는 완전성을 위해 여기서만 이야기합니다. 문제의 경우 이름 및 MoC 일치 항목을 살펴보겠습니다.
이미 끝내세요
구현의 세부 사항은 데이터의 모양과 문제에 투입하려는 시간과 비용에 따라 달라집니다.
나의 일반적인 접근 방식은 두 데이터 세트를 데이터베이스로 가져오는 것부터 시작합니다. 모든 속성을 가진 데이터가 참조 세트입니다. 더 작은 데이터 세트가 후보 세트입니다. 후보 테이블에서 참조 세트 식별자가 포함된 열을 추가하십시오. 다음은 정규화가 부족하지만 의도된 것입니다.
CREATE TABLE
dbo.reference
(
reference_id int identity(1,1) NOT NULL PRIMARY KEY
, name_prfix varchar(50) NULL
, name_first varchar(50) NOT NULL
, name_middle varchar(50) NULL
, name_last varchar(50) NOT NULL
, name_suffix varchar(20) NULL
, company_name varchar(100) NULL
, address_line1 varchar(70) NULL
, address_line2 varchar(50) NULL
, address_city varchar(50) NULL
, address_state varchar(20) NULL
, address_postalcode varchar(10) NULL
, address_zip4 char(4) NULL
, phone_number varchar(10) NULL
)
CREATE TABLE
dbo.candidate
(
candidate_id int identity(1,1) NOT NULL PRIMARY KEY
, name_prfix varchar(50) NULL
, name_first varchar(50) NOT NULL
, name_middle varchar(50) NULL
, name_last varchar(50) NOT NULL
, name_suffix varchar(20) NULL
, company_name varchar(100) NULL
, address_line1 varchar(70) NULL
, address_line2 varchar(50) NULL
, address_city varchar(50) NULL
, address_state varchar(20) NULL
, address_postalcode varchar(10) NULL
, address_zip4 char(4) NULL
, reference_id int
)
반복 TSQL
1단계, 직접 일치. Candidate와 Reference 사이에 정확히 일치하는 항목이 있는 경우 이를 Candidate.reference_id에 기록하면 이제 프로세스에서 제외됩니다.
2단계, 닉네임 확장 및/또는 불용어 대체와 직접 일치
3단계, 주소 일치와 퍼지 이름 일치(이중 메타폰 + ngram + 최소 편집 거리)
4단계, 퍼지 별명 확장 및/또는 중지 단어 대체 일치와 주소 일치(이중 메타폰 + ngram + 최소 편집 거리)
5단계, 수동 매칭을 위해 남은 후보 풀 검사
SSIS
SSIS Enterprise Edition은 퍼지 논리 기능을 제공합니다. 기본적으로 이름 일치 등을 위해 자체 프레임워크를 구성할 필요 없이 TSQL 접근 방식에 나열된 것과 거의 동일한 작업을 수행합니다.
SSIS 2012 릴리스에서는 주소를 정리하고 이름을 여러 부분으로 분할하는 데이터 품질 서비스도 제공합니다.