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.

  • 相关阅读:
    uinty之碰撞体,触碰体,刚体
    背景图片的设置和定位等
    margin padding
    《大道至简》之懒人的‘懒’
    灭霸—个人冲刺2(1)
    软件工程—个人作业(7.2)
    软件工程—个人作业(7.1)
    学习进度(13)
    学习进度(12)
    人月神话阅读笔记02
  • 原文地址:https://www.cnblogs.com/qiyebao/p/3864085.html
Copyright © 2011-2022 走看看