【发布时间】:2016-06-07 00:43:06
【问题描述】:
对于 Lucene,我只想用 tokenFilter 对 tokenStream 的最后一个 token 做一些处理。例如,给定句子“hello my world”,仅将我的处理应用于“world”,而不是其他标记。
我可以通过首先迭代 tokenStream 的整个输入以获得最后一个令牌的偏移量,然后从第一个令牌重新开始。因为我已经知道了最后一个token的偏移量,所以我可以识别当前token是否是最后一个token。
但是,由于循环两次肯定是低效的,我想只迭代一次 tokenStream 来做到这一点,但似乎很难找到正确的方法。
例如,假设 MyFilter 看起来像:(当然,这个 MyFilter 是 TokenFilter 的基本结构)。
public class MyFilter extends TokenFilter{
public MyFilter(TokenStream input){
super(input);
}
@Override
public boolean incrementToken() throws IOException {
if (input.incrementToken()){
/*
if(current token is the last token):
Want to apply something only to the last token.
*/
return true;
}
return false;
}
}
如何识别当前token是不是最后一个?
【问题讨论】: