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.