Lucene.NET TokenStream.Next 方法消失了

本文关键字:方法 消失了 Next TokenStream NET Lucene | 更新日期: 2023-09-27 17:57:09

我必须使用 Lucene.NET 更新项目。这是我第一次遇到这个库,我应该更新对新版本的引用。所以我通过NuGet对Lucene引用做了。

但实际上我应该以某种方式更新一些在新版本中消失的方法。

public abstract class AnalyzerView
{
    public abstract string Name { get; }
    public virtual string GetView(TokenStream tokenStream,out int numberOfTokens)
    {
        StringBuilder sb = new StringBuilder();
        Token token = tokenStream.Next();
        numberOfTokens = 0;
        while (token != null)
        {
            numberOfTokens++;
            sb.Append(GetTokenView(token));
            token = tokenStream.Next();
        }
        return sb.ToString();
    }
    protected abstract string GetTokenView(Token token);
}

文档对我来说不是很清楚。据我了解,我应该使用类似的东西

while (tokenStream.IncrementToken()) { ... }

但是如何获得以下令牌对我来说是一个谜。

我在 StackOverflow 上看到了类似的问题,但我的问题是我需要获得一个Token而不是一个string,因为我有一些使用令牌的代码,如下所示:

public class TermWithOffsetsView : AnalyzerView {
    public override string Name {
        get { return "Terms With Offsets"; }
    }
    protected override string GetTokenView(Token token) {
        return token.TermText() + 
            "   Start: " + token.StartOffset().ToString().PadLeft(5) + 
            "  End: " + token.EndOffset().ToString().PadLeft(5) + 
            "'r'n";
    }
}

Lucene.NET TokenStream.Next 方法消失了

最后,经过一些研究,实现了这样的东西:

public abstract class AnalyzerView
{
    public abstract string Name { get; }
    public virtual string GetView(TokenStream tokenStream,out int numberOfTokens)
    {
        StringBuilder sb = new StringBuilder();
        numberOfTokens = 0;
        while (tokenStream.IncrementToken())
        {
            numberOfTokens++;
            sb.Append(GetTokenView(tokenStream));
        }
        return sb.ToString();
    }
    protected abstract string GetTokenView(TokenStream tokenStream);
}

派生类如下所示:

public class TermWithOffsetsView : AnalyzerView {
    public override string Name {
        get { return "Terms With Offsets"; }
    }
    protected override string GetTokenView(TokenStream tokenStream) {
        ITermAttribute termAtt = tokenStream.AddAttribute<ITermAttribute>();
        IOffsetAttribute offsetAtt=tokenStream.AddAttribute<IOffsetAttribute>();
        return string.Format("{0}   Start: {1}  End: {2}{3}",
            termAtt.Term,
            offsetAtt.StartOffset.ToString().PadLeft(5),
            offsetAtt.EndOffset.ToString().PadLeft(5),
            Environment.NewLine);
    }
}