• 重写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.

  • 相关阅读:
    初识JSP知识
    Session每次访问都回新建对象问题的处理
    C++ 重载中括号
    C++ 重载输出符号
    C++ 单目运算 and 双目运算符重载complex
    C++运算符重载范例
    c++ 运算符重载之成员函数重载
    c++ 友元函数
    c++ static 类
    c++ const 类
  • 原文地址:https://www.cnblogs.com/qiyebao/p/3864085.html
Copyright © 2020-2023  润新知