繁体   English   中英

如何在Lucene 4中使用BrazilianStemmer?

[英]How Do I Use BrazilianStemmer in Lucene 4?

我正试图使用​​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中获取外语的正确和更好的方法吗?

这不是正确的方法,你应用一个词干分子两次,因为葡萄牙分析师在内部使用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);
        }
    };

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM