如何在 lucene 3.0.3 中标记文本
How to tokenize a text in lucene 3.0.3
我需要将这段代码从 lucene.net 2.3.2 翻译成 3.0.3。
此代码在 2.3.2 中运行良好,但在 3.0.3 中,方法 tokenStream.Next() 不是 return 标记而是布尔值。我需要了解的是当 next() returns 为真时在哪里读取令牌对象。
Analyzer analyzer = new StandardAnalyzer();
StringReader stringReader = new StringReader("the house id red");
TokenStream tokenStream = analyzer.TokenStream("", stringReader);
Token token = tokenStream.Next();
while (token != null)
{
System.Diagnostics.Debug.Write(token.TermText());
token = tokenStream.Next();
}
Lucene 3+ 中的 TokenStreams 现在可以表示流中每个位置的一整套值(称为属性)。因此,您需要修改您的示例以了解属性...
var analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30);
var stringReader = new StringReader("the house id red");
var tokenStream = analyzer.TokenStream(string.Empty, stringReader);
var termAtt = tokenStream.GetAttribute<ITermAttribute>();
while (tokenStream.IncrementToken())
{
Console.WriteLine(termAtt.Term);
}
我需要将这段代码从 lucene.net 2.3.2 翻译成 3.0.3。
此代码在 2.3.2 中运行良好,但在 3.0.3 中,方法 tokenStream.Next() 不是 return 标记而是布尔值。我需要了解的是当 next() returns 为真时在哪里读取令牌对象。
Analyzer analyzer = new StandardAnalyzer();
StringReader stringReader = new StringReader("the house id red");
TokenStream tokenStream = analyzer.TokenStream("", stringReader);
Token token = tokenStream.Next();
while (token != null)
{
System.Diagnostics.Debug.Write(token.TermText());
token = tokenStream.Next();
}
Lucene 3+ 中的 TokenStreams 现在可以表示流中每个位置的一整套值(称为属性)。因此,您需要修改您的示例以了解属性...
var analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30);
var stringReader = new StringReader("the house id red");
var tokenStream = analyzer.TokenStream(string.Empty, stringReader);
var termAtt = tokenStream.GetAttribute<ITermAttribute>();
while (tokenStream.IncrementToken())
{
Console.WriteLine(termAtt.Term);
}