gpt4 book ai didi

java - 在没有索引的情况下使用 Lucene 分析器 - 我的方法合理吗?

转载 作者:行者123 更新时间:2023-12-01 18:51:50 25 4
gpt4 key购买 nike

我的目标是利用 Lucene 的众多分词器和过滤器来转换输入文本,但不创建任何索引。

例如,给定这个(人为的)输入字符串...

“某人的 - [texté] 放在这里,foo。”

...以及像这样的 Lucene 分析器...

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

我想得到以下输出:

某人的文本在这里 foo

下面的 Java 方法可以满足我的需求。

但是我应该有更好的(即更典型和/或更简洁)的方式吗?

我特别考虑了我使用TokenStreamCharTermAttribute的方式,因为我以前从未像这样使用过它们。感觉很笨重。

这是代码:

Lucene 8.3.0 导入:

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

最佳答案

我已经使用这个设置几个星期了,没有出现任何问题。我还没有找到更简洁的方法。我认为问题中的代码没问题。

关于java - 在没有索引的情况下使用 Lucene 分析器 - 我的方法合理吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59723144/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com