我有一个自定义tokenfilter设置来解析
等关键字oracle,java,sybase,vb.net etc.
到
oracle java sybase vb.net
并且它工作正常,但其中一个测试文档具有以下文本
,oracle java,sybase,unix
我试图从
中移除主要的COMMA,oracle
使用以下代码
public override bool IncrementToken()
{
if (!input.IncrementToken())
return false;
char[] buffer = termAtt.TermBuffer();
int bufferLength = termAtt.TermLength();
...
else if (bufferLength > 1 && buffer[0] == ',')
{
// strip the starting , off !
offsetAtt.SetOffset(offsetAtt.StartOffset + 1, offsetAtt.EndOffset);
// where offsetAtt = AddAttribute<IOffsetAttribute>();
}
...
return true;
}
然而,这不会删除逗号
有关如何使这项工作的任何帮助?
感谢
答案 0 :(得分:1)
Lucene中的标记基于属性工作,即标记的每个属性(如文本值,偏移等)是属性。
令牌的文本值与令牌TermAttribute.class相关联。
更改偏移量和其他属性后,您可能还需要更改自己的文本,可能使用以下代码段。
private final TermAttribute termAtt; // instance variable
termAtt = addAttribute(TermAttribute.class); // initialization in constructor
....
else if (bufferLength > 1 && buffer[0] == ',')
{
// strip the starting , off !
offsetAtt.SetOffset(offsetAtt.StartOffset + 1, offsetAtt.EndOffset);
// update the termAtt
termAtt.setTermBuffer("sub-content of the buffer");
}
....
让我知道它是否有效..