Lucene StandardAnalyzer和EnglishAnalyzer有什么区别?

时间:2013-06-09 16:45:58

标签: lucene

我正在使用Lucene 4.3索引英文推文,但是我不确定使用哪个Analyzer。 Lucene StandardAnalyzer和EnglishAnalyzer有什么区别?

此外,我尝试使用此文本测试StandardAnalyzer:“XY& Z Corporation - xyz@example.com”。输出是:[xy] [z] [corporation] [xyz] [example.com],但我认为输出将是:[XY& Z] [公司] [xyz@example.com]

我做错了吗?

1 个答案:

答案 0 :(得分:11)

看看来源。通常,分析仪非常易读。您只需要查看CreateComponents方法即可查看它使用的Tokenizer和Filters:

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

然而,StandardAnalyzer只是StandardTokenizerStandardFilterLowercaseFilterStopFilterEnglishAnalyzerEnglishPossesiveFilterKeywordMarkerFilterPorterStemFilter中展开。

主要是,EnglishAnalyzer提供了一些英语词干增强功能,这对于简单的英文文本应该很有效。

对于StandardAnalyzer,我真正知道的唯一一个将其直接与英语分析联系起来的假设是默认的停用词集,当然,这只是一个默认值,可以更改。 StandardAnalyzer现在实现了Unicode Standard Annex #29,它试图提供非语言特定的文本分段。