如何在Lucene.net中使用自定义TokenFilter从令牌中删除逗号
本文关键字:TokenFilter 令牌 删除 自定义 Lucene net | 更新日期: 2023-09-27 18:01:22
我有一个自定义的标记过滤器设置来解析关键字,如
oracle,java,sybase,vb.net etc.
到
oracle java sybase vb.net
并且工作正常,但是其中一个测试文档有以下文本
,oracle java,sybase,unix
,我正试图从
中删除前导逗号,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;
}
但是这并没有去掉逗号
有什么帮助吗?
谢谢
Lucene中的令牌基于属性工作,即令牌的每个属性(如文本值,偏移量等)都是一个属性。
令牌的文本值与令牌termatattribute .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");
}
....