gpt4 book ai didi

java - 扩展 Lucene 分析器

转载 作者:行者123 更新时间:2023-12-01 21:23:44 26 4
gpt4 key购买 nike

我在 Lucene 中有特殊的分析需求,但我想继续使用 StandardAnalyzer 机制的部分内容。

特别是,我想要字符串

“-苹果--胡萝卜-番茄?”

被标记为:

  1. “-苹果-”2.“-胡萝卜-”3.“番茄”

(用 -- 包围的字符串被视为单独的标记)

看来要实现这一点,我必须自定义分析器和分词器。但我必须从头开始重写吗?例如,我不想告诉分词器(或分词过滤器)它应该省略“apple?”中的问号。

有没有办法只修改现有的分析器?

最佳答案

基本上,您无法扩展 StandardAnalyzer,因为它是 final 类。但是您可以使用自己的标记器执行相同的操作,而且很简单。而且您无法更改现有的,因为这是一个坏主意。

我可以想象这样的事情:

public class CustomAnalyzer extends Analyzer {

protected TokenStreamComponents createComponents(String s) {
// provide your own tokenizer, that will split input string as you want it
final Tokenizer standardTokenizer = new MyStandardTokenizer();

TokenStream tok = new StandardFilter(standardTokenizer);
// make everything lowercase, remove if not needed
tok = new LowerCaseFilter(tok);
//provide stopwords if you want them
tok = new StopFilter(tok, stopwords);
return new TokenStreamComponents(standardTokenizer, tok);
}

private class MyStandardTokenizer extends Tokenizer {

public boolean incrementToken() throws IOException {
//mimic the logic of standard analyzer and add your rules
return false;
}
}
}

我将所有内容都放在一个类中,只是为了更容易在此处发布。一般来说,您需要在 MyStandardTokenizer 中使用自己的逻辑(例如,您可以从 StandardAnalyzer 复制代码(它是最终的,因此不会再次扩展),然后在 incrementToken 用破折号为你的逻辑添加所需的内容。希望它能帮助你。

关于java - 扩展 Lucene 分析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38682588/

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