如何使用Lucene.net中的自定义TokenFilter从令牌中删除逗号

时间:2013-02-26 22:55:26

标签: c# .net visual-studio-2010 lucene lucene.net

我有一个自定义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;

    }

然而,这不会删除逗号

有关如何使这项工作的任何帮助?

感谢

1 个答案:

答案 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");

        }

....

让我知道它是否有效..