우편 주소 퍼지 일치를 수행하는 방법은 무엇입니까?


14

형식이 다르거 나 철자가 틀린 경우 우편 주소를 일치시키는 방법을 알고 싶습니다.

지금까지 다른 솔루션을 찾았지만 솔루션이 상당히 오래되고 비효율적이라고 생각합니다. 나는 더 좋은 방법이 존재한다고 확신하므로 읽을만한 참고 문헌이 있다면 여러 사람이 관심을 가질 수있는 주제라고 확신합니다.

내가 찾은 해결책 (예는 R에 있음) :

  • 한 단어를 다른 단어로 변환하기 위해 삽입, 삭제 또는 변경해야하는 문자 수와 같은 레 벤슈 테인 거리.

    agrep("acusait", c("accusait", "abusait"), max = 2, value = TRUE) ## [1] "accusait" "abusait"

  • 음소의 비교

    library(RecordLinkage) soundex(x<-c('accusait','acusait','abusait')) ## [1] "A223" "A223" "A123"

  • 철자 교정기 (Peter Norvig와 같은 베이지안) 를 사용하지만 주소에 대해서는 효율적이지 않습니다.

  • Google의 제안을 사용하는 것에 대해 생각했지만 개인 우편 주소에는 그리 효율적이지 않습니다.

  • 기계 학습 감독 방식을 사용한다고 상상할 수 있지만 사용자에게 잘못된 철자 요청을 저장해야합니다.


퍼지 문자열 일치를 지원하는 실제 데이터베이스를 사용하는 것이 좋습니다 : posgres . 효율적입니다.
Emre

미국, 캐나다, 영국, 프랑스어, 일본어, 다 국가 ...? 아마도 각 언어에 대해 먼저 언어와 국가를 결정하고 추측 한 다음 국가 별 분류기를 적용합니까? 훈련 세트가 있습니까? 그렇다면 국가 분포는 무엇입니까?
smci

이것으로 어디서 끝났습니까? 우리가 고안 한 해결책은 주소와 장소 이름을 삭제하고 보강하고 Google 지오 코딩을 수행하고 웹 API를 배치 한 다음 원시 데이터와 비교하여 정확한 결과를 결정하기 위해 대략적인 계산을 수행하는 것입니다. 약간 어색하지만 작동하지만 주소와 장소 / 위치를 정상화하는보다 우아한 방법이 있어야합니다.
Chris Smith

답변:


9

R을 사용함에 따라 계산에 사용할 수있는 stringdist 패키지와 Jaro-Winkler 거리 측정법을 살펴볼 수 있습니다. 이것은 연결을 위해 미국 인구 조사국에서 개발되었습니다.

이 저널 의 Jaro 및 Jaro-Winkler 거리에 대한 자세한 내용을 참조하십시오 .

다른 매칭 기술을 비교하려면 이 백서를 읽으십시오


4

Levenshtein 거리를 확장하여 더 큰 그림을 제공하는 많은 영리한 방법이 있습니다. '라는 (파이썬) 꽤 유용한 모듈에 소개 간단한 퍼지 Wuzzy이 '는 여기에 있으며, SeatGeek의 팀.

당신이 할 수있는 몇 가지 일은 부분 문자열 유사성입니다 (길이가 다른 문자열, 예를 들어 m <n과 m <n 인 경우). 문자열을 토큰 (개별 단어)으로 분리하고 토큰 세트가 알파벳 순서와 일치하거나 알파벳 순서로 정렬되는 방식을 살펴볼 수도 있습니다.


4

부분 문자열 일치를 감지하는 또 다른 널리 사용되는 기술은 일반적으로 문서 수준이지만 shingling 입니다. 본질적으로 목표 단어 / 문서에 대한 n- 그램 세트를 추출하고 Jaccard 계수 를 통해 다른 단어 / 문서에 대한 n- 그램 세트와 비교하는 이동 창 접근법입니다 . 매닝 (Manning)과 동료 (2008) 는 정보 검색의 맥락에서 거의 복제본과 대상을 논의한다 .


4

파이썬에서 일반적인 확률 적 퍼지 매처를 작성하여 모든 유형의 데이터를 일치시키는 합리적인 작업을 수행합니다.

https://github.com/robinl/fuzzymatcher

메모리에 있으므로 약 100k 행 이상의 데이터 세트와 일치시키는 데 사용하지 않을 것입니다.

또한 영국 주소와 관련된 유사한 프로젝트를 작성했지만 Addressbase Premium에 액세스 할 수 있다고 가정합니다. 이것은 메모리에 없으므로 100m 정도의 영국 주소에 사용되었습니다. 여길 봐:

https://github.com/RobinL/AddressMatcher

이 작업을 빨리 진행 하려면 libpostal 을 사용 하여 주소를 정규화 한 다음 일반적인 퍼지 매처 ( pip install fuzzymatcher)에 입력하는 것이 좋습니다.

사용 예는 여기에서 찾을 수 있습니다 .


안녕하세요, 저는 AddressMatcher 라이브러리에 관심이 있습니다. 사용 방법에 대한 문서가 있습니까? 나는이 정확한 문제가있다-하나의 주소 세트 (지저분한)를 다른 (공식 우편 주소)와 일치시켜야합니다. 감사합니다
SCool

1
슬프게도 주소 매처와 함께 그것은 사소한 것이 아니며 좋은 문서가 없습니다. 가장 중요한 것은 postgresql에 상업용 제품인 addressbase premium을로드하는 것입니다.
RobinL

다시 연락해 주셔서 감사합니다. 나는 협력하여 아일랜드어 버전의 Addressbase 프리미엄 Eircode가 호환되지 않는다고 가정합니다. 퍼지 매 처가 프로덕션 환경 주소 일치 작업에 달려 있다고 생각하십니까? 우편 번호가없는 데이터의 주소에 우편 번호를 추가하고 싶습니다. 예를 들어 Eircode 데이터베이스를 검색하고 '1 Main Street, Some Town, County'일치하는 항목을 찾으면 우편 번호를 다시 가져 오십시오.
스쿨

1
퍼지 매처-예, 확실히 가치가 있다고 생각합니다. 작은 주소 목록이 강력한 컴퓨터의 권한있는 주소 목록 (즉, eircode)에서 찾을 수 있도록 합리적으로 잘 작동해야합니다. 또 다른 옵션은 R에서 fastlink pacakge입니다
RobinL
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.