站内搜索--分词(二元、盘古)

 一般的网站中都有站内搜索,如果使用Like去做,效率就会很低。

例如,百度的数据库中有上亿条数据,使用like就会造成全表扫描,什么时候才能把搜索到的结果返回给页面。

所以,Lucene.Net(搜索引擎核心)就会被大家所采用。

一、分词

  分词是核心的算法,Lucene.Net本身是不提供分词算法的。

  示例代码:

  

             //Analyzer analyzer = new PanGuAnalyzer();//盘古分词
             //Analyzer analyzer = new CJKAnalyzer(); //二元分词
             //Analyzer analyzer = new StandardAnalyzer();//一元分词
            TokenStream tokenStream = analyzer.TokenStream("", new StringReader(TextBox1.Text));
            Lucene.Net.Analysis.Token token = null;
            while ((token = tokenStream.Next()) != null)
            {
                Response.Write(token.TermText() + "<br/>");
            }

 

  一元分词算法(StandardAnalyzer)

  将中文子符一一分割,英文字符以空格、标点分割。 效果如图 1-1

  

      

  二元分词算法(CJKAnalyzer)

  将中文字符每两个组合,英文字符以空格、标点分割。效果如图 1-2

      

   网上提供的是两个类:CJKAnalyzer.cs、CJKTokenizer.cs  都继承Analyzer,多态的好处体现出来了,直接拷到自己的项目中使用。

   盘古分词(比较智能)

   这种算法相比较前两个分词算法,稍微体现出(百度)更懂中国

   先看效果如图 1-3

  

      

   网上提供了开源项目,盘古分词V1.2.0.0.zip 解压,PanGuDictionaries.zip中文件添加到项目中新建文件夹(Dict)中,项目中全选,属性窗口中:复制到输出目录,选择如果较新则复制;还要引用类库:PanGu.Lucene.Analyzer.dll、PanGu.dll

    当然这个分法还能接受,其实,盘古分词有自己的词库Dict.dct,可以根据自己网站中涉及到的专业名词来添加更多词,让分词更加准确。

   写下这些以便以后使用到...

转载于:https://www.cnblogs.com/ancient-sir/archive/2012/03/15/Lucene.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值