2011-11-09 8 views
1

에 대한 가장 일치하는 항목 찾기 이전 게시판 Link here을 추적하면서 우리가 직면 한 또 다른 문제는 주소 필드 [ADDR_LINE_1, ADDR_LINE_2, CITY, STATE, ZIP]에 가장 잘 맞는 것입니다.문자열 값 - Oracle/Java

[파일에서] 수신 주소 레코드와 일치 할 수있는 모든 레코드를 데이터베이스에 반환하려고합니다. 시나리오는 다음과 같습니다.

다음은 데이터베이스에있는 두 개의 레코드입니다. 수신 기록에 대한

ADDR_LINE_1,  ADDR_LINE_2  , CITY  , STATE, ZIP 
001 Chestnut Avenue, Apt 100   , Indiana  , IN , 9999 
Apt 100   , 001 Chestnut Ave., Indianapolis, IN , 9999 

, 나는 기존 레코드로 기록을 감지하고 위의 가능한 일치 항목을 모두 나열 할

ADDR_LINE_1,  ADDR_LINE_2, CITY  , STATE, ZIP 
1 Chestnut Avenue, Apt 100 , Indiana  , IN , 9999 

을 다음과 같이.

[주의 :] 데이터베이스 항목의 순서는 서로 바뀌지 만 여전히 가능한 일치 항목으로 나열되어야합니다.

누구나 내가 그것에 대해 어떻게 할 수있는 지 제안 해 주실 수 있습니까?

+0

첫 번째 단계 - 핸드 웨이브가없는 지점까지 "가능한 일치"를 정의하고 주어진 레코드가 일치 가능한지 여부를 강력하게 정의합니다. 두 번째 단계 -이 부울 함수를 구현합니다 (이제는 쉽게 수행 할 수 있어야 함). –

+0

제안 해 주셔서 감사합니다. 지금까지 생각해 볼 수있는 내용은 다음과 같습니다. 도시, 주, 우편 번호와 같은 일부 "상수"값을 기반으로 레코드를 필터링 할 수 있습니다. 이것은 아마도 내가 좁혀가는 데 도움이 될 것입니다. 그런 다음 주소 행 1과 주소 행 2의 문자열 토큰에 대해 토큰이 일치하는 경우 즉, "001 Chestnut Avenue"와 "Apt 100"을 연결하고 수신 레코드 인 "1 Chestnut Avenue Apt 100 "을 찾고 5 개의 문자열 토큰 중 leat 3을 찾습니다. 이렇게하면 전체 레코드가 일치 할 수 있습니다. –

+0

나는 성능에 대해 조금 염려한다. –

답변

6

오라클 버전에 따라 UTL_MATCH package을 사용하여 유사성 점수를 생성 한 다음 어떤 임계점 점수가 합리적인지를 판단 할 수 있습니다. 예를 들어, 문자열 '001 밤나무 애비뉴'와 문자열 '1 밤나무 애비뉴'는 JARO - 윈 클러 알고리즘을 사용하여 사이에 96 %의 유사성은 가능성에 몇 가지 작업을해야 할 것,

SQL> select utl_match.jaro_winkler_similarity('001 Chestnut Avenue', 
    2           '1 Chestnut Avenue') 
    3 from dual; 

UTL_MATCH.JARO_WINKLER_SIMILARITY('001CHESTNUTAVENUE','1CHESTNUTAVENUE') 
------------------------------------------------------------------------ 
                     96 

분명히있다 다양한 분야에 어떤 가중치를 부여해야하는지 파악하십시오. 예를 들어, 두 번째 줄의 주소보다 상대적으로 표준화 될 가능성이 높은 도시에서 일치시킬 높은 경계점을 부여 할 수 있습니다.

+0

감사합니다 저스틴. 너는 나를 다시 구했다! :-) –