2013-06-09 12 views
5

Pracuję nad indeksowaniem tweetów w języku angielskim przy użyciu Lucene 4.3, jednak nie jestem pewien, który Analyzer ma użyć. Jaka jest różnica między Lucene StandardAnalyzer i EnglishAnalyzer?Jaka jest różnica między Lucene StandardAnalyzer i EnglishAnalyzer?

Próbowałem również przetestować StandardAnalyzer z tym tekstem: "XY & Z Corporation - [email protected]". Dane wyjściowe to: [xy] [z] [corporation] [xyz] [example.com], ale myślałem, że wynik będzie następujący: [XY & Z] [Corporation] [[email protected]]

Am Robię coś nie tak?

Odpowiedz

5

Zobacz źródło. Ogólnie rzecz biorąc, analizatory są dość czytelne. Wystarczy spojrzeć na CreateComponents metody aby zobaczyć Tokenizer Filtry i wykorzystywane przez niego:

@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); 
} 

Natomiast StandardAnalyzer tylko StandardTokenizer, StandardFilter, LowercaseFilter, a StopFilter. EnglishAnalyzer zwojach w EnglishPossesiveFilter, KeywordMarkerFilter i PorterStemFilter.

Głównie, EnglishAnalyzer podaje w języku angielskim udoskonalenia, które powinny działać dobrze w przypadku zwykłego tekstu w języku angielskim.

Dla StandardAnalyzer, naprawdę jedynym założeniem, o którym wiem, że wiąże to bezpośrednio z angielską analizą, jest domyślny zestaw stoperów, który jest oczywiście tylko domyślny i można go zmienić. StandardAnalyzer implementuje teraz Unicode Standard Annex #29, która próbuje zapewnić segmentację tekstu niezwiązaną z językiem.

Powiązane problemy