[英]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.