gpt4 book ai didi

lucene - 重读 Lucene TokenStream 时遇到问题

转载 作者:行者123 更新时间:2023-12-01 02:20:56 30 4
gpt4 key购买 nike

我正在使用 Lucene 4.6,并且显然不清楚如何重用 TokenStream,因为我得到了异常:

java.lang.IllegalStateException: TokenStream contract violation: reset()/close() call missing, reset() called multiple times, or subclass does not call super.reset(). Please see Javadocs of TokenStream class for more information about the correct consuming workflow.

在第二次传球开始时。我已经阅读了 Javadoc,但我仍然缺少一些东西。这是一个引发上述异常的简单示例:
@Test
public void list() throws Exception {
String text = "here are some words";
TokenStream ts = new StandardTokenizer(Version.LUCENE_46, new StringReader(text));
listTokens(ts);
listTokens(ts);
}

public static void listTokens(TokenStream ts) throws Exception {
CharTermAttribute termAtt = ts.addAttribute(CharTermAttribute.class);
try {
ts.reset();
while (ts.incrementToken()) {
System.out.println("token text: " + termAtt.toString());
}
ts.end();
}
finally {
ts.close();
}
}

我试过不打电话 TokenStream.end()TokenStream.close()想也许他们应该只在最后被调用,但我得到了同样的异常(exception)。

任何人都可以提供建议吗?

最佳答案

Exception列出,作为一个可能的问题,调用 reset()多次,你正在做的。这在 Tokenizer 的实现中是明确不允许的。 .由于java.io.Reader api 不保证支持 reset()所有子类的操作,Tokenizer不能假设 Reader毕竟,传入的可以重置。

您可以简单地构造一个新的 TokenStream,或者我相信您可以调用 Tokenizer.setReader(Reader) (在这种情况下,您当然必须先close() 它)。

关于lucene - 重读 Lucene TokenStream 时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20624339/

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