Использование Lucene Analyzer без индексации - мой подход разумен? - PullRequest
0 голосов
/ 13 января 2020

Моя цель - использовать некоторые из многих токенизаторов и фильтров Lucene для преобразования входного текста, но без создания каких-либо индексов.

Например, учитывая эту (надуманную) входную строку ...

" Someone’s - [texté] goes here, foo . "

... и анализатор Lucene, подобный этому ...

Analyzer analyzer = CustomAnalyzer.builder()
        .withTokenizer("icu")
        .addTokenFilter("lowercase")
        .addTokenFilter("icuFolding")
        .build();

Я хочу получить следующий вывод:

someone's texte goes here foo

Метод, приведенный ниже Java, делает то, что я хочу.

Но есть ли лучший (то есть более типичный и / или сжатый) способ, которым я должен делать это?

Я специально думаю о том, как я использовал TokenStream и CharTermAttribute, так как я никогда не использовал их раньше. Чувствует себя неуклюже.

Вот код:

Lucene 8.3.0 import:

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
import org.apache.lucene.analysis.custom.CustomAnalyzer;

Мой метод:

private String transform(String input) throws IOException {

    Analyzer analyzer = CustomAnalyzer.builder()
            .withTokenizer("icu")
            .addTokenFilter("lowercase")
            .addTokenFilter("icuFolding")
            .build();

    TokenStream ts = analyzer.tokenStream("myField", new StringReader(input));
    CharTermAttribute charTermAtt = ts.addAttribute(CharTermAttribute.class);

    StringBuilder sb = new StringBuilder();
    try {
        ts.reset();
        while (ts.incrementToken()) {
            sb.append(charTermAtt.toString()).append(" ");
        }
        ts.end();
    } finally {
        ts.close();
    }
    return sb.toString().trim();
}

1 Ответ

0 голосов
/ 15 марта 2020

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...