Lucene.NET TokenStream.Next方法消失了 [英] Lucene.NET TokenStream.Next method disappeared
问题描述
我必须使用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屋!