Lucene.NET TokenStream.Next方法消失了 [英] Lucene.NET TokenStream.Next method disappeared

查看:278
本文介绍了Lucene.NET TokenStream.Next方法消失了的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我必须使用Lucene.NET更新项目.第一次遇到该库时,我应该将引用更新为新版本.因此,我通过NuGet处理了Lucene引用.

I have to update a project using Lucene.NET. It first time I meet this library, and I should update the references to a new version. So I did with Lucene references via a NuGet.

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

But actually I should in a way update some methods that disappeared in the new versions.

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

文档对我来说不是很清楚.据我了解,我应该使用

The documentation is not very clear for me. As I understood I should use something like

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

但是如何获得以下标记对我来说是个谜.

but how to obtain that following token is a mystery for me.

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

I saw similar question on StackOverflow, but my problem is that I need to obtain a Token rather thatn a string, because I have some code that uses tokens, like this one:

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

推荐答案

最后,经过一些研究,实现了以下内容:

Finally, after some researches, implemented something like this:

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

这篇关于Lucene.NET TokenStream.Next方法消失了的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆