2013-06-09 1 views
5

Lucene 4.3을 사용하여 영어로 된 트윗의 색인 생성을 위해 노력하고 있습니다. 그러나 어떤 분석기를 사용할 지 잘 모르겠습니다. Lucene StandardAnalyzer와 EnglishAnalyzer의 차이점은 무엇입니까?Lucene StandardAnalyzer와 EnglishAnalyzer의 차이점은 무엇입니까?

또한이 텍스트로 StandardAnalyzer를 테스트하려고 시도했습니다. "XY & Z Corporation - [email protected]". 결과는 다음과 같습니다. [xy] [z] [corporation] [xyz] [example.com] 그러나 출력은 다음과 같을 것입니다. [XY & Z] [Corporation] [[email protected]]

Am 내가 뭔가 잘못하고 있는거야?

답변

5

출처를 확인하십시오. 일반적으로 분석기는 꽤 판독 가능합니다. 당신은 토크 나이 및 필터가 사용하고 볼 CreateComponents 방법으로 볼 필요가 :

@Override 
protected TokenStreamComponents createComponents(String fieldName, Reader reader) { 
    final Tokenizer source = new StandardTokenizer(matchVersion, reader); 
    TokenStream result = new StandardFilter(matchVersion, source); 
    // prior to this we get the classic behavior, standardfilter does it for us. 
    if (matchVersion.onOrAfter(Version.LUCENE_31)) 
     result = new EnglishPossessiveFilter(matchVersion, result); 
    result = new LowerCaseFilter(matchVersion, result); 
    result = new StopFilter(matchVersion, result, stopwords); 
    if(!stemExclusionSet.isEmpty()) 
     result = new KeywordMarkerFilter(result, stemExclusionSet); 
    result = new PorterStemFilter(result); 
    return new TokenStreamComponents(source, result); 
} 

반면이 StandardAnalyzer 그냥 StandardTokenizer, StandardFilter, LowercaseFilterStopFilter입니다. EnglishAnalyzer 롤은 EnglishPossesiveFilter, KeywordMarkerFilterPorterStemFilter에있다.

주로 EnglishAnalyzer는 일부 영어 형태 향상 기능을 사용합니다. 영어 기능은 일반 영어 텍스트에서 잘 작동합니다.

StandardAnalyzer의 경우 영어 분석에 직접 연결된다는 사실을 알고있는 유일한 가정은 기본 중지 단어 세트입니다. 물론 기본값이며 변경할 수 있습니다. 이제 StandardAnalyzer는 Unicode Standard Annex #29을 구현합니다.이 언어는 비 언어 별 텍스트 분할을 제공합니다.

관련 문제