【问题标题】:Lucene.NET TokenStream.Next method disappearedLucene.NET TokenStream.Next 方法消失了
【发布时间】:2014-05-19 09:02:29
【问题描述】:

我必须使用 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 上看到了 similar question,但我的问题是我需要获得 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";
    }
}

【问题讨论】:

标签: c# .net lucene lucene.net


【解决方案1】:

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

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);
    }
}

【讨论】:

    猜你喜欢
    • 2011-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-21
    • 2012-06-23
    • 1970-01-01
    相关资源
    最近更新 更多