gpt4 book ai didi

java - 如何从 lucene 5.x.x 使用 StandardTokenizer

转载 作者:搜寻专家 更新时间:2023-10-30 19:41:33 25 4
gpt4 key购买 nike

有很多示例展示了如何像这样使用 StandardTokenizer:

TokenStream tokenStream = new StandardTokenizer(
Version.LUCENE_36, new StringReader(input));

但在较新的 Lucene 版本中,此构造函数不可用。新的构造函数如下所示:

StandardTokenizer(AttributeFactory factory)

这个 AttributeFactory 的作用是什么?我如何在较新版本的 Lucene 中标记字符串?

最佳答案

AttributeFactory创建AttributeImpl s 是 Attribute 的来源秒。属性控制 TokenStream 的行为,这是用于读取/跟踪 StandardTokenizer 数据流的底层机制.

关于 AttributeFactory,从 4.x 到 5.x 几乎没有变化。 - 在这两个版本中,您都可以创建一个 StandardTokenizerAttributeFactory如果你愿意,或者如果你没有指定一个,那么 AttributeFactory.DEFAULT_ATTRIBUTE_FACTORY最终将被使用。

最大的不同是你还可以传入 Reader对于输入流作为构造函数的一部分。这意味着在 4.x 中,您必须为每个要处理的输入流创建一个新的 StreamTokenizer,这又必须重新初始化 AttributeFactory 中的属性。 .

我不是 Lucene 开发人员,但我猜这只是一种重组,目的是鼓励在多个流的读取过程中重用属性。如果你看一下 TokenStream 的内部结构和默认 AttributesFactory在实现中,创建和设置属性涉及很多反射(reflection)。如果我不得不猜测,StreamTokenizer采用读取器的构造函数刚刚被删除,以鼓励重用分词器及其属性,因为这些属性的初始化相对昂贵。

编辑

添加一个逾期已久的示例 - 很抱歉没有以这个开头:

// Define your attribute factory (or use the default) - same between 4.x and 5.x
AttributeFactory factory = AttributeFactory.DEFAULT_ATTRIBUTE_FACTORY;

// Create the tokenizer and prepare it for reading
// Lucene 4.x
StandardTokenizer tokenizer =
new StandardTokenizer(factory, new StringReader("Tokenize me!"));
tokenizer.reset();
// Lucene 5.x
StandardTokenizer tokenizer = new StandardTokenizer(factory);
tokenizer.setReader(new StringReader("Tokenizer me!"));
tokenizer.reset();

// Then process tokens - same between 4.x and 5.x
// NOTE: Here I'm adding a single expected attribute to handle string tokens,
// but you would probably want to do something more meaningful/elegant
CharTermAttribute attr = tokenizer.addAttribute(CharTermAttribute.class);
while(tokenizer.incrementToken()) {
// Grab the term
String term = attr.toString();

// Do something crazy...
}

关于java - 如何从 lucene 5.x.x 使用 StandardTokenizer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30523642/

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