Java 如何在Lucene中创建自定义分析器,使用文件中的自定义停止/常用字
我试图在Lucene 8.3.0中创建一个自定义分析器,它使用词干分析,并使用文件中的自定义停止字过滤给定文本。 更清楚地说,我不想使用默认的停止字过滤器并在其上添加一些字,我只想使用stopWords.txt文件中的一组停止字进行过滤。 我该怎么做 这是我一直写到现在,但我不确定它是否正确Java 如何在Lucene中创建自定义分析器,使用文件中的自定义停止/常用字,java,lucene,analyzer,Java,Lucene,Analyzer,我试图在Lucene 8.3.0中创建一个自定义分析器,它使用词干分析,并使用文件中的自定义停止字过滤给定文本。 更清楚地说,我不想使用默认的停止字过滤器并在其上添加一些字,我只想使用stopWords.txt文件中的一组停止字进行过滤。 我该怎么做 这是我一直写到现在,但我不确定它是否正确 public class MyAnalyzer extends Analyzer{ //public class MyAnalyzer extends Analyzer { @Overrid
public class MyAnalyzer extends Analyzer{
//public class MyAnalyzer extends Analyzer {
@Override
protected TokenStreamComponents createComponents(String fieldName) {
// public TokenStream tokenStream(String fieldName, Reader reader) {
Tokenizer tokenizer = new StandardTokenizer();
TokenStream tokenStream = new StandardFilter(tokenizer);
tokenStream = new LowerCaseFilter(tokenStream);
tokenStream = new StopFilter(tokenStream,StopAnalyzer.ENGLISH_STOP_WORDS_SET);
//Adding Porter Stemming filtering
tokenStream = new PorterStemFilter(tokenStream);
//return tokenStream;
return new TokenStreamComponents(tokenizer, tokenStream);
}
}
首先,我不确定结构是否正确,目前我使用StopAnalyzer中的StopFilter只是为了测试它(但是它不工作) 您需要读取该文件并将其解析为一个字符集以传递到过滤器中。具有一些内置方法,可用于将字符串列表转换为CharArraySet,如:
...
CharArraySet stopset = StopFilter.makeStopSet(myStopwordList);
tokenStream = new StopFilter(tokenStream, stopset);
...
它是出于内部目的而列出的,因此对于依赖此类是一个合理的警告,但是如果您不想处理将文件解析为列表的问题,您可以使用它将stopword文件解析为CharArraySet,例如:
...
CharArraySet stopset = WordlistLoader.getWordSet(myStopfileReader);
tokenStream = new StopFilter(tokenStream, stopset);
...
你能提供一些你已经尝试过的代码吗?这是我写的。但是我需要的是分析器只返回一个处理过的令牌流。我读了Lucene的文档,但我感到困惑