zoukankan      html  css  js  c++  java
  • 基于逆向最大化词表中文分词法zz

    前做知识管理系统的时候,由于需要建立全文检索和统计词频,需要对中文文本进行分词。对于中文分词,

    国内做到好的应该是中科院自然研究所,但是相对比较复杂,我看了几次没有看明白. :)  ,由于平常我们的知识系统

    对分词的要求没有这么高,所以 就选择了最大化的词表分词法.  词表选择的是人民日报97版的词表.

    实际效果可以达到90%以上,基本可以满足需要。支持 Lucene.net分词,词表是启动时一次性载入;

       具体代码如下:

      public sealed class LtWordTokenizer : Tokenizer
     {
      private String bufferText;
      private ArrayList wordArray; 
      private int  intIndex=0;  
      public static Hashtable hsDic=new Hashtable();  

      public LtWordTokenizer(TextReader _in)
      {
       input = _in;
       bufferText=input.ReadToEnd().ToLower();   
       wordArray=new ArrayList();   
       wordSegment(bufferText);  
       
      }  

      public void wordSegment(String Sentence)
      {
       int senLen = Sentence.Length;
       int i=0, j=0;
       int M=12;
       string word;    
       while(i < senLen)
       {
        int N= i+M<senLen ? i+M : senLen+1;
        bool bFind=false;
        for(j=N-1; j>i; j--)
        {
         word = Sentence.Substring(i, j-i).Trim();     
         if(hsDic.ContainsKey(word.Trim()))
         {
          wordArray.Add(new Token(word,i,i+word.Length));      
          bFind=true;
          i=j;
          break;
         }     
        }
        if(!bFind)
        {
         word = Sentence.Substring(i, 1).Trim();
         i=j+1;
         if(word.Trim()!="")
         {
          wordArray.Add(new Token(word,i,i+word.Length));     
         }     
        }
       } 
      }


     
      public override Token Next()
      { 
       
       if(intIndex<wordArray.Count)
       { 
        intIndex++;
        return (Token)(wordArray[intIndex-1]);           
       }
       else
        return null;   
      }
      
     }
    }

    下次可以在分词的时候更改一下,不必先分好保存到arraylist,动态速度更好。

  • 相关阅读:
    UGUI 学习
    跳一跳
    推箱子_1
    坦克大战
    建筑保温(复习) 灭火救援设施(一)
    建筑平面布置与防火防烟分区(一)
    第五篇消防安全评估
    第三篇第三章自动喷水灭火系统(一)
    案例35:室内消火栓系统检查与维护保养案例分析(二)
    YAML语法
  • 原文地址:https://www.cnblogs.com/dayouluo/p/240767.html
Copyright © 2011-2022 走看看