Создание английских слов с помощью Lucene 6

Я хочу сократить английские слова с помощью Lucene 6.5. Я видел немало примеров использования Lucene для достижения этой цели. Однако примеры, которые я видел до сих пор, похоже, используют старые версии Lucene, и воспроизвести то же самое с помощью Lucene 6 было невозможно.

В качестве примера можно привести этот. В предлагаемых и принятых решениях используется org.apache.lucene.analysis.PorterStemmer, который, похоже, не находится в одном пакете в Lucene 6.

ОБНОВЛЕНИЕ: я обнаружил, что текущий полный путь для стеммера PorterStemmer - org.apache.lucene.analysis.en.PorterStemFilter. Вдобавок нужна зависимость "org.apache.lucene" % "lucene-queryparser" % "6.5.0".

Сейчас я работаю над составлением списка слов. И я думаю, что просто переведу этот вопрос на определение корней слов, поскольку примеры, которые я видел с использованием этого стеммера, похоже, не работают и не компилируются с текущей версией Lucene (версия 6.5.0).


person okello    schedule 25.04.2017    source источник


Ответы (1)


Я наконец нашел способ обрезать слова с помощью Lucene 6:

public List<String> stem(String term) throws Exception {
    Analyzer analyzer = new StandardAnalyzer();
    TokenStream result = analyzer.tokenStream(null, term);
    result = new PorterStemFilter(result);
    result = new StopFilter(result, StopAnalyzer.ENGLISH_STOP_WORDS_SET);
    CharTermAttribute resultAttr = result.addAttribute(CharTermAttribute.class);
    result.reset();

    List<String> tokens = new ArrayList<>();
    while (result.incrementToken()) {
        tokens.add(resultAttr.toString());
    }
    return tokens;
}

Вызов этого метода с входной строкой term вернет список строковых токенов, сгенерированных из входной строки. Кроме того, метод удаляет стоп-слова из ввода. Я оставлю это здесь в надежде, что это будет кому-то полезно.

person okello    schedule 25.04.2017
comment
Вау ... это действительно так сложно? Я делал google для lucene 6 стемминга за последние 2 года, почти ничего не подошло. Но в Javadoc я нахожу класс org.tartarus.snowball.ext.EnglishStemmer ... Я просто не понимаю, как совместить с EnglishAnalyzer. - person mike rodent; 21.02.2018