2012-06-10 5 views
2

두 개의 열이있는 큰 데이터베이스를 다루고 있습니다. 첫 번째 열 idlong이고 두 번째 열 nameString입니다. name은 해당 ID를 가진 사람의 이름입니다. 그래서 행의 name과 다른 행의 name을 비교하고 싶습니다.자바에서 문자열 비교/일치

John Carter 
john Carter 
Carter 
jo car 
Willam Carter 
C William 
Carter j. 

이러한 모든 name은 행을 일치시켜야합니다. 가능한 경우 일치율/비율을 갖는 것이 좋습니다. 이 일을 할 수있는 자바 라이브러리/스 니펫이 있습니까? 나는 모든 제안에 열려 있습니다.

+4

"John"은 "William Carter"와 어떻게 일치 할 수 있습니까? –

+1

@OliCharlesworth Sorrry, 나쁘지. –

+0

마찬가지로 "C. 윌리엄"과 "존 카터"? –

답변

4

이 도서관은 당신을 위해 재미있을 수 : http://sourceforge.net/projects/simmetrics/

그것은 문자열에 대해 서로 다른 유사성 측정을 제공합니다. 자신의 소스 포지 페이지에서

:

SimMetrics는 유사성 메트릭 라이브러리, 예를 들면이다 수정 거리의 (Levenshtein, Gotoh, Jaro 등)에서 다른 측정 항목 (예 : Soundex, Chapman)으로 이동합니다.

4

컴퓨팅 문자열 거리에 대해 Levenshtein algorithm에 관심이있는 것처럼 보입니다. Java 구현 here을 찾을 수 있습니다.

0

'A Comparison of String Distance Metrics for Name-Matching Tasks'William W. Cohen 등으로 보아라. 이 신문은 여러 문자열 거리 측정 항목을 비교합니다.

그들은 또한 대부분을 SecondString project 내에 구현했습니다. 그것은 대략적인 문자열 매칭 기술의 "오픈 소스 Java 기반 패키지"이므로 다양한 메트릭을 쉽게 비교하여 요구 사항에 맞는 것을 평가할 수 있습니다.

그냥 이름과 일치해야하는 경우는 - JARO - 윈 클러 또한 SecondString 패키지 내에서 구현되는 좋은 선택이다.

데이터베이스에 모든 이름이있는 경우 유사성 측정 값을 저장 프로 시저로 구현하면 모든 데이터를 가져 와서 Java를 사용하여 비교할 필요가 없습니다. 따라서 다음과 같은 검색어를 사용할 수 있습니다 :

SELECT t1.name, t2.name, sim(t1.name, t2.name) FROM table t1, table t2 WHERE sim(t1.name, t2.name) > 0.8 
관련 문제