如何使用Lucene.Net获取找到的单词列表?

时间:2013-05-13 08:03:19

标签: c# lucene.net

我有索引文件。他们有内容:

文件1:

  

绿色的桌子站在房间里。房间很小。

文件2:

  

绿色的桌子站在房间里。房间很大。

我正在寻找“绿表”。我会找到Document1和Document2。我想显示找到哪些短语。我在第一份文件中找到了 - “绿表”。我在第二份文件中找到了 - “绿色表”。我如何获得创建单词列表(“绿表”和“绿表”)?我正在使用Lucene.Net 3.0.3版。

1 个答案:

答案 0 :(得分:1)

您可以使用荧光笔标记“找到的单词”。 如果你想出于其他原因找到它们,你仍然可以使用荧光笔,然后使用正则表达式(或简单的子串循环)来提取单词。

例如:

Query objQuery = new TermQuery(new Term("content", strQuery));

QueryScorer scorer = new QueryScorer(objQuery , "content");

SimpleHTMLFormatter formatter = new SimpleHTMLFormatter("<b>","</b>");

highlighter = new Highlighter(formatter, scorer);
highlighter.TextFragmenter = new SimpleFragmenter(9999);

for (int i = 0; i < topRealtedDocs.ScoreDocs.Length; i++)
{
     TokenStream stream = TokenSources.GetAnyTokenStream(searcher.IndexReader, topRealtedDocs.ScoreDocs[i].Doc, "content", analyzer);

     string strSnippet = highlighter.GetBestFragment(stream, doc.GetValue("content"));

     // here you can do what you want with the snippet. add it to your result or for example extract the words (not with a regex - this is just an example from here! use what ever you need):
     List<string> foundPhrases = new List<string>();
     while (strSnippet.IndexOf("<b>") > -1)
     {
          int indexStart = strSnippet.IndexOf("<b>");
          int indexEnd = strSnippet.IndexOf("</b>");

          foundPhrases.Add(strSnippet.Substring(indexStart, indexEnd - indexStart));

          strSnippet = strSnippet.Substring(indexEnd);

     }
}

欧米