Lucene как отключить toLowerCase в StandardAnalyzer?
Хочу использовать токенайзер, чтобы достать токены из моего текста.
Мой код:
ArrayList<String> toTextWord = new ArrayList<>();
Analyzer analyzer = new StandardAnalyzer();
try (TokenStream stream = analyzer.tokenStream("tags", new StringReader(iterStr))) {
stream.addAttribute(CharTermAttribute.class);
stream.reset();
while (stream.incrementToken()) {
CharTermAttribute token = stream.getAttribute(CharTermAttribute.class);
System.out.println(token.toString());
toTextWord.add(token.toString());
}
} catch (Exception e) {
e.printStackTrace();
}
Но StandardAnalyzer() по умолчанию использует перевод слова в нижний регистр, как можно отключить у него toLowerCase? Или что еще можно попробовать в данной ситуации? Заранее спасибо!
Ответы (1 шт):
Автор решения: Roman Konoval
→ Ссылка
Если задача оставить весь функционал StandardAnalyzer кроме перевода в нижний регистр, то нужно переопределить createComponents и убрать оттуда LowerCaseFilter:
class MyAnalyzer extends StandardAnalyzer {
@Override
protected TokenStreamComponents createComponents(final String fieldName) {
final StandardTokenizer src = new StandardTokenizer();
src.setMaxTokenLength(maxTokenLength);
TokenStream tok = new StopFilter(src, stopwords);
return new TokenStreamComponents(
r -> {
src.setMaxTokenLength(StandardAnalyzer.this.maxTokenLength);
src.setReader(r);
},
tok);
}
}