2013-06-09 5 views
5

Sto lavorando sull'indicizzazione dei tweet che sono in inglese utilizzando Lucene 4.3, tuttavia non sono sicuro quale Analizzatore utilizzare. Qual è la differenza tra Lucene StandardAnalyzer e EnglishAnalyzer?Qual è la differenza tra Lucene StandardAnalyzer e EnglishAnalyzer?

Inoltre, ho provato a testare StandardAnalyzer con questo testo: "XY & Z Corporation - [email protected]". L'output è: [xy] [z] [corporation] [xyz] [esempio.com], tuttavia ho pensato che l'output sarà: [XY & Z] [Corporation] [[email protected]]

Am Faccio qualcosa di sbagliato?

risposta

5

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.