사전 일치 문자열 (사전 정의 된 문자열 집합 포함)을 제공하는 문자열 일치 코드 또는 알고리즘이 있습니까?문자열 근사 (사전에서 가장 가까운 일치하는 문자열 가져 오기)
예 : 사전에 10 개의 문자열 (문자열 집합)이있는 경우 사용자가 일부 문자열을 입력하면 알고리듬은 사전과 거의 일치하는 문자열을 알려야합니다. 일치하는 값 (또는 백분율)과 일치하는 문자열을 얻으면 그 값은 훌륭합니다.
사전 일치 문자열 (사전 정의 된 문자열 집합 포함)을 제공하는 문자열 일치 코드 또는 알고리즘이 있습니까?문자열 근사 (사전에서 가장 가까운 일치하는 문자열 가져 오기)
예 : 사전에 10 개의 문자열 (문자열 집합)이있는 경우 사용자가 일부 문자열을 입력하면 알고리듬은 사전과 거의 일치하는 문자열을 알려야합니다. 일치하는 값 (또는 백분율)과 일치하는 문자열을 얻으면 그 값은 훌륭합니다.
문자열과 문자열 사이에 Levenshtein distance을 계산하여 가장 가까운 항목을 찾을 수 있습니다. 문자가 바뀌거나 문자 그대로 유사하지 않으므로 맞춤법 검사에 적합하지 않을 수 있습니다. 예 : 질문은 kwizchum보다 쉬는 것이 더 낫습니다.
더 많은 예를 들어, 당신은 Levenshtein Distance techinque을 시도 할 수 있습니다 http://en.wikipedia.org/wiki/Approximate_string_matching
에 읽을 수 있습니다.
간단한 아이디어는 네 가지 기본 작업이 있습니다
알고리즘은 단어와 사전 사이의 거리를 계산해야합니다. 가장 작은 거리는이 단어가 주어진 입력과 더 정확하게 일치 함을 의미합니다.
lucene 라이브러리를 사용하는 것이 더 좋다고 생각합니다. org.apache.lucene.search.spell
패키지를 사용하면 쉽게 사용할 수 있습니다. 3 알고리즘을 제공합니다. NGramDistance, LevensteinDistance, JaroWinklerDistance. try this
난 그냥 StringUtils에도 가지고 추가하고 싶었 a convenient Levenshtein Distance method 이후 버전이 가장 일치하는 컬렉션을 반복하고 기억하는 것만 큼 간단 후 것을 3.0
public static int getLevenshteinDistance(CharSequence s,
CharSequence t)
:
public static Object findClosestMatch(Collection<?> collection, Object target) {
int distance = Integer.MAX_VALUE;
Object closest = null;
for (Object compareObject : collection) {
int currentDistance = StringUtils.getLevenshteinDistance(compareObject.toString(), target.toString());
if(currentDistance < distance) {
distance = currentDistance;
closest = compareObject;
}
}
return closest;
}
주 상기의 메소드는 콜렉션이 null 안전하고, toString()가 감각적으로 구현 될 필요가있는 것을 나타냅니다.
if 내부에 "distance = currentDistance"가 누락되어 있지 않습니까? –
Woops 실제로, 일부 특정 코드를 제거해야했습니다, 내가 너무 열망했다 :) –
안녕하세요. 검색 사전은 얼마나 큽니까? – Vitaliy