CWSharp - .Net中英文分詞組件

mmntt 9年前發布 | 35K 次閱讀 CWSharp 中文分詞

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.baiduhome.net/lib/view/home/1437307469865

 本文由用戶 mmntt 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!