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.

  • 相关阅读:
    CSDN博客QQ加群、微信
    Angularjs 中的 controller
    hdu 1728 逃离迷宫 bfs记转向
    【BLE】CC2541之加入自己定义任务
    asp.net给文件分配自己主动编号,如【20140710-1】
    <html>
    机器学习入门阶段程序猿易犯的5个错误
    时间复杂度
    Jackcard类似度和余弦类似度(向量空间模型)的java实现
    【分层图】分层图学习笔记
  • 原文地址:https://www.cnblogs.com/qiyebao/p/3864085.html
Copyright © 2011-2022 走看看