如何在Lucene 4中使用BrazilianStemmer?

3
我正在尝试使用Lucene 4对葡萄牙语句子进行分词和词干提取。
基于这个[线程] (如何使用Lucene Analyzer对字符串进行分词?),我能够正确地对葡萄牙语句子进行分词。然而,没有应用任何词干提取。因此,阅读Lucene 4文档,我找到了这个类[BrazilianStemmer] (https://lucene.apache.org/core/4_0_0/analyzers-common/org/apache/lucene/analysis/br/BrazilianStemmer.html)。
我修改了代码以使用这个BrazilianStemmer类。
    public static StringBuffer tokenizeString(StringBuffer text) {
    StringBuffer result = new StringBuffer();

    try {

        Analyzer analyzer = new PortugueseAnalyzer();

        TokenStream stream  = analyzer.tokenStream(null, new StringReader(text.toString()));
        stream.reset();

        BrazilianStemFilter filter = new BrazilianStemFilter(stream);

        while (filter.incrementToken()) {
            result.append(filter.getAttribute(CharTermAttribute.class).toString());
            result.append(" ");
        }

        filter.close();
        analyzer.close();
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
    return result;
}

但是,我不确定它是否正常工作。这是从Lucene实现外语词干处理的正确且更好的方法吗?

1个回答

0

那不是正确的做法,你正在应用两次词干提取器,因为PortugueseAnalyzer在内部使用了PortugueseLightStemFilter,你可以在这里看到。

如果你像这样创建自定义分析器会更好:

    Analyzer analyzer = new Analyzer() {
       @Override
        protected Analyzer.TokenStreamComponents createComponents(String fieldName, Reader reader) {
            final Tokenizer source = new StandardTokenizer(reader);
            TokenStream result = new LowerCaseFilter(source);
            result = new StopFilter(result, PortugueseAnalyzer.getDefaultStopSet());
            result = new BrazilianStemFilter(result);
            return new TokenStreamComponents(source, result);
        }
    };

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接