zoukankan      html  css  js  c++  java
  • 使用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";
                }
    
            }
        }
    }
    
    
    
    
    
  • 相关阅读:
    实验六 进程基础
    实验五 shell脚本编程
    实验四 Linux系统C语言开发环境学习
    实验三:Linux系统用户管理及vim配置
    实验二Linux简单文件操作命令
    实验一 Linux系统与应用准备
    实验八 进程间通信
    实验七 信号
    实验六 进程基础
    实验五 shell脚本编程
  • 原文地址:https://www.cnblogs.com/lxk613/p/lxk613.html
Copyright © 2011-2022 走看看