Dai un'occhiata alla fonte. In generale, gli analizzatori sono abbastanza leggibili. Hai solo bisogno di guardare in CreateComponents
metodo per vedere il Tokenizer e filtri utilizzati da esso:
@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);
}
considerando che, StandardAnalyzer
è solo un StandardTokenizer
, StandardFilter
, LowercaseFilter
e StopFilter
. EnglishAnalyzer
rotola in un EnglishPossesiveFilter
, KeywordMarkerFilter
e PorterStemFilter
.
Principalmente, EnglishAnalyzer introduce alcuni miglioramenti relativi all'argomento inglese, che dovrebbero funzionare bene per il testo in inglese.
Per StandardAnalyzer, l'unica supposizione di cui sono a conoscenza è direttamente correlata all'analisi in inglese, è il set di stopword predefinito, che è ovviamente un valore predefinito e può essere modificato. StandardAnalyzer ora implementa Unicode Standard Annex #29, che tenta di fornire una segmentazione del testo specifica per la lingua.