2013-06-09 11 views
5

Ich arbeite an der Indizierung von Tweets in englischer Sprache mit Lucene 4.3, aber ich bin mir nicht sicher, welcher Analyzer verwendet werden soll. Was ist der Unterschied zwischen Lucene StandardAnalyzer und EnglishAnalyzer?Was ist der Unterschied zwischen Lucene StandardAnalyzer und EnglishAnalyzer?

Auch ich habe versucht, den StandardAnalyzer mit diesem Text zu testen: "XY & Z Corporation - [email protected]". Die Ausgabe ist: [xy] [z] [Corporation] [xyz] [example.com], aber ich dachte, dass die Ausgabe sein wird: [XY & Z] [Corporation] [[email protected]]

Am Ich mache etwas falsch?

Antwort

5

Werfen Sie einen Blick auf die Quelle. Im Allgemeinen sind Analysatoren ziemlich lesbar. Sie müssen nur in CreateComponents Methode suchen die Tokenizer und Filter zu sehen, indem es verwendet wird:

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

Während, ist StandardAnalyzer ein StandardTokenizer, nur StandardFilter, LowercaseFilter und StopFilter. EnglishAnalyzer Rollen in einem EnglishPossesiveFilter, KeywordMarkerFilter und PorterStemFilter.

Hauptsächlich rollt der EnglishAnalyzer in einigen englischen stemming Verbesserungen, die gut für einfachen englischen Text funktionieren sollten.

Für StandardAnalyzer, wirklich die einzige Annahme, die ich weiß, dass es direkt an Englisch-Analyse bindet, ist das Standard-Stoppwort festgelegt, das ist natürlich nur ein Standard und kann geändert werden. StandardAnalyzer implementiert jetzt Unicode Standard Annex #29, die versucht, eine nicht sprachspezifische Textsegmentierung bereitzustellen.

Verwandte Themen