zoukankan      html  css  js  c++  java
  • 重写lucene.net的分词器支持3.0.3.0版本

    lucene.net中每个分词器都是一个类,同时有一个辅助类,这个辅助类完成分词的大部分逻辑。分词类以Analyzer结尾,辅助类通常以Tokenizer结尾。分类词全部继承自Analyzer类,辅助类通常也会继承某个类。

    首先在Analysis文件夹下建立两个类,EasyAnalyzer和EasyTokenizer。

     1 using Lucene.Net.Analysis;
     2 using System.IO;
     3 
     4 namespace LuceneNetTest
     5 {
     6     public class EasyTokenizer : CharTokenizer
     7     {
     8         private TextReader reader;
     9         public EasyTokenizer(TextReader reader)
    10             : base(reader)
    11         {
    12             this.reader = reader;
    13         }
    14         protected override bool IsTokenChar(char c)
    15         {
    16             //return true;  //整行输出
    17             //return c != ','; //逗号分隔
    18             return c != ' '; //空格划分
    19         }
    20     }
    21 }
    EasyTokenizer
     1 using Lucene.Net.Analysis;
     2 using System.IO;
     3 
     4 namespace LuceneNetTest
     5 {
     6     public class EsayAnalyzer : Analyzer
     7     {
     8         public override TokenStream TokenStream(string fieldName, TextReader reader)
     9         {
    10             return new EasyTokenizer(reader);
    11         }
    12     }
    13 }
    EsayAnalyzer

    其中分词辅助类中的IsTokenChar这个函数是分词的关键,分词核心逻辑会根据这个函数返回的值进行分词,如果返回false,则会以这个字符进行一次划分。

    测试代码如下:

     1 using Lucene.Net.Analysis;
     2 using Lucene.Net.Analysis.Tokenattributes;
     3 using System;
     4 using System.IO;
     5 namespace LuceneNetTest
     6 {
     7     class Program
     8     {
     9         static void Main(string[] args)
    10         {
    11             const string testwords = "大家好,I can speak chinese!";
    12             EsayAnalyzer simple = new EsayAnalyzer();
    13             TokenStream ts = simple.ReusableTokenStream("", new StringReader(testwords));
    14             while (ts.IncrementToken())
    15             {
    16                 ITermAttribute attribute = ts.GetAttribute<ITermAttribute>();
    17                 Console.WriteLine(attribute.Term);
    18             }
    19         }
    20     }
    21 }
    Program

    CITermAttribute:The term text of a Token.

  • 相关阅读:
    webpack3-loader和plugin的概念理解
    即将发布的ionic4有哪些激动人心的新特性
    使用腾讯tslint-config-alloy轻松搞定ionic项目中TSLint配置
    ionic2+ 中强制使安卓用ios样式的方法
    最新动态: 开源项目 ionic3-awesome — 实现fullScreenVideo
    c#开发windows 服务
    搭建NHibernate3.2+CodeFirst映射框架
    WCF
    MVC全局异常处理
    两只技术小白把初创电商卖了百万美元,现在他们决定把秘诀告诉你
  • 原文地址:https://www.cnblogs.com/qiyebao/p/3864085.html
Copyright © 2011-2022 走看看