使用Lucene.NET进行分词、搜索
Lucene.NET是一个开源的项目,能够对中文或者英文等各种字符进行分析检索,是一款比较强大的分词搜索工具。它是一个库的形式,因此,需要在自己的工程中引用。今天分析了一下这个源代码,参考了 http://kwklover.cnblogs.com/archive/2006/06/25/435421.html 的博客,他使用的Lucene的版本是2.1的,我下载的这个是2.9的,里面的很多API都已经不适用了,因此需要做适当的修改。以下是创建的详细步骤。
1.打开vs2010,新建一个工程,这里我创建一个win Form工程。创建好之后需要在reference中添加对这个工程的引用:Lucene.Net.dll。(因为我是下载了LUcene.NET的源代码,然后打开它所有的源代码分析的,打开它的工程后我才创建的一个Win Form界面程序,其实效果一样,只是这样我能够看到它的源代码,更直观方便而已)。
2.添加一个Buttom,两个RichTextBox,用于进行开始和显示结果的。

3.当然是添加处理代码了,双击开始按钮,添加代码如下。
运行的效果图如下:

using System;
using System.Windows.Forms;
using Lucene.Net.Analysis.Standard;
using Lucene.Net.Analysis;
using System.IO;
using System.Collections;
//http://kwklover.cnblogs.com/archive/2006/06/25/435421.html //这个是我参考的博客,也是园子的,哈哈
namespace 分词操作
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Hashtable hashtable = new Hashtable();//用于统计分词结果的
richTextBox1.Text = "";
richTextBox2.Text = "";
//Lucene.Net.Util.Version ver =new Lucene.Net.Util.Version("LUCENE_29",2900);
string temp = textBox1.Text;
StandardAnalyzer analyzer = new StandardAnalyzer();
StringReader sr = new StringReader(temp);
TokenStream ts = analyzer.TokenStream(String.Empty, sr);
Token token = null;
int i = 1;
while ((token = ts.Next()) != null)
{
int index = token.ToString().IndexOf(",", 1);//
/************************************************************************/
/* token的形式如图 (hello,0,5,type=<ALPHANUM>)
(test,13,17,type=<ALPHANUM>) 这个alphanumeric代表字母数字了
* (毛,20,21,type=<CJ>)
(主,21,22,type=<CJ>) CJ代表chinese japanese */
/************************************************************************/
string tempstr = token.ToString().Substring(1, index-1 );
if (!hashtable.ContainsKey(tempstr))
{
hashtable.Add(tempstr,1);
}
else
{
int count = Convert.ToInt32(hashtable[tempstr].ToString());
hashtable.Remove(tempstr);
hashtable.Add(tempstr, count+1);
}
richTextBox1.Text += token.ToString()+"\n";
}
foreach (var key in hashtable.Keys)
{
richTextBox2.Text +=key+" 出现的次数:" +hashtable[key].ToString()+"\n";//hashtable[key].ToString().Replace("(","").Replace(")","")+"\n";
}
}
}
}
浙公网安备 33010602011771号