CWSharp - .Net中英文分词组件

mmntt 9年前

CWSharp 是 .Net 的中英文分词组件。

特性

  • 内嵌多种分词算法及可扩展的自定义分词接口

    • StandardTokenizer

    • BigramTokenizer

    • StopwordTokenizer

    • 自定义分词接口

  • 支持自定义词典

  • 支持Lucene.Net分词

  • MIT授权协议

安装&编译

  • NuGet

nuget install CWSharp
  • Package Manager Console

PM> install-package CWSharp
  • 编译

build.cmd v4.5 Release //.NET 4.5  build.cmd v4.0 Release //.NET 4.0  build.cmd v3.5 Release //.NET 3.5

算法

  • 基于正向最大匹配的算法。介绍

  • 词典使用DAWG结构,比传统的前缀树占用更少的内存空间。介绍

TODO

  • HMM算法,识别未登记词语以及人名、地名识别

  • 支持跨平台Windows、Linux

示例

  • StandardTokenizer

var dawgFile = @"dict.dawg";  var tokenizer = new StandardTokenizer(dawgFile)  {      OptionOutputOriginalCase = true  };  foreach (var token in tokenizer.Traverse("微软宣布它爱Linux"))  {      Console.Write(token.Text + "/" + token.Type);  }

微软/CJK 宣布/CJK 它/CJK 爱/CJK Linux/ALPHANUM

  • BigramTokenizer

var tokenizer = new BigramTokenizer();  foreach (var token in tokenizer.Traverse("微软宣布它爱Linux"))  {      Console.Write(token.Text + "/" + token.Type);  }

微软/CJK 软宣/CJK 宣布/CJK 布它/CJK 它爱/CJK linux/ALPHANUM

  • StopwordTokenizer

var tokenizer = new StopwordTokenizer(      new StandardTokenizer(dawgFile),      new string[] { "它", "a", "the", "an" });  foreach (var token in tokenizer.Traverse("微软宣布它爱Linux"))  {      Console.Write(token.Text + "/" + token.Type);      Console.Write(" ");  }

微软/CJK 宣布/CJK 爱/CJK linux/ALPHANUM

  • 自定义分词接口

//一元分词  public class CustomTokenizer : ITokenizer  {      private ITokenizer _tokenizer;      public CustomTokenizer(ITokenizer tokenizer)      {          _tokenizer = tokenizer;      }      public IEnumerable<Token> Traverse(string text)      {          foreach (var token in _tokenizer.Traverse(text))          {              if (token.Type == TokenType.CJK)              {                  foreach (var ch in token.Text)                      yield return new Token(ch.ToString(), TokenType.CJK);              }              else                  yield return token;          }      }  }

微/CJK 软/CJK 宣/CJK 布/CJK 它/CJK 爱/CJK linux/ALPHANUM

FAQ

  • 词典 - 如何生成DAWG词典文件,如何添加新的词组到DAWG词典中。

  • lucene.net插件 - Lucene.Net分词接口

项目主页:http://www.open-open.com/lib/view/home/1437307469865