Как создать собственный анализатор в Lucene, с пользовательским стопом / общими словами из файла - PullRequest
0 голосов
/ 15 февраля 2020

Я пытаюсь создать собственный анализатор в Lucene 8.3.0, который использует stemming и фильтрует заданный текст, используя пользовательские стоп-слова из файла. Чтобы быть более понятным, я не хочу использовать фильтр стоп-слов по умолчанию и добавлять к нему некоторые слова, я хочу фильтровать, используя только набор стоп-слов из файла stopWords.txt. Как я могу это сделать?

Это то, что я написал до сих пор, но я не уверен, правильно ли это

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

Прежде всего, я не уверен, правильная ли структура, и пока используя StopFilter из StopAnalyzer просто для проверки (однако он не работает)

1 Ответ

0 голосов
/ 17 февраля 2020

Вам нужно прочитать файл и проанализировать его в CharArraySet для передачи в фильтр. StopFilter имеет несколько встроенных методов, которые можно использовать для преобразования списка строк в CharArraySet, например:

...
CharArraySet stopset = StopFilter.makeStopSet(myStopwordList);
tokenStream = new StopFilter(tokenStream, stopset);
...

Он указан как для внутренних целей так что честное предупреждение о том, что вы полагаетесь на этот класс, но если вам не нужно обрабатывать файл в списке, вы можете использовать WordListLoader для анализа файла стоп-слов в CharArraySet, что-то как:

...
CharArraySet stopset = WordlistLoader.getWordSet(myStopfileReader);
tokenStream = new StopFilter(tokenStream, stopset);
...
...