最近想用C#写段小代码,需要用到中文分词,以前找过python的分词库,结巴分词挺是简单易用的。就想看看.Net下有没有好用的中文分词库系统可以直接拿来用的。如果有就用了,没有就不得不转python了
有很多非常不错的分词系统,比如lucene中文分词,但是.net的不太多。
查了下,似乎支持.Net的中文分词有以下几个
ICTCLAS:
这可是最早的中文开源分词项目之一,ICTCLAS在国内973专家组组织的评测中活动获得了第一名,在第一届国际中文处理研究机构SigHan组织的评测中都获得了多项第一名。ICTCLAS3.0分词速度单机996KB/s,分词精度98.45%,API不超过200KB,各种词典数据压缩后不到3M.ICTCLAS全部采用C/C++编写,支持Linux、FreeBSD及Windows系列操作系统,支持C/C++、C#、Delphi、Java等主流的开发语言。
盘古分词:
作者eaglet 曾经开发过KTDictSeg 中文分词组件,拥有大量用户。作者基于之前分词组件的开发经验,结合最新的开发技术重新编写了盘古分词组件。这个项目也有段时间没更新了.
先大概了解了下,决定试试盘古分词。发现盘古分词还是挺好用的,不到五分钟就搞定了,调用代码也非常简单易懂,对我这种对分词准确度和速度要求不高的人来说足够用了。
用法很简单,
1. 先下载库:http://pangusegment.codeplex.com/downloads/get/144143
再下载字典:http://pangusegment.codeplex.com/releases/view/47411
把库和字典文件都解压了,为了方便,我将字典文件放在库文件下,行成如下的文件结构:
Clik here to view.

ZhongWenFenChi_PanGu_Dicectory
2. 然后打开PanGu.xml编辑下, 将DictionaryPath修改为当前目录下的Dictionaries目录,如下所示:
<DictionaryPath>.\Dictionaries</DictionaryPath>
<MatchOptions>
<ChineseNameIdentify>true</ChineseNameIdentify>
<FrequencyFirst>false</FrequencyFirst>
<MultiDimensionality>false</MultiDimensionality>
<EnglishMultiDimensionality>true</EnglishMultiDimensionality>
<FilterStopWords>true</FilterStopWords>
<IgnoreSpace>true</IgnoreSpace>
<ForceSingleWord>false</ForceSingleWord>
<TraditionalChineseEnabled>false</TraditionalChineseEnabled>
<OutputSimplifiedTraditional>false</OutputSimplifiedTraditional>
<UnknownWordIdentify>true</UnknownWordIdentify>
<FilterEnglish>false</FilterEnglish>
<FilterNumeric>false</FilterNumeric>
<IgnoreCapital>false</IgnoreCapital>
<EnglishSegment>false</EnglishSegment>
<SynonymOutput>false</SynonymOutput>
<WildcardOutput>false</WildcardOutput>
<WildcardSegment>false</WildcardSegment>
<CustomRule>false</CustomRule>
</MatchOptions>
<Parameters>
<UnknowRank>1</UnknowRank>
<BestRank>5</BestRank>
<SecRank>3</SecRank>
<ThirdRank>2</ThirdRank>
<SingleRank>1</SingleRank>
<NumericRank>1</NumericRank>
<EnglishRank>5</EnglishRank>
<EnglishLowerRank>3</EnglishLowerRank>
<EnglishStemRank>2</EnglishStemRank>
<SymbolRank>1</SymbolRank>
<SimplifiedTraditionalRank>1</SimplifiedTraditionalRank>
<SynonymRank>1</SynonymRank>
<WildcardRank>1</WildcardRank>
<FilterEnglishLength>0</FilterEnglishLength>
<FilterNumericLength>0</FilterNumericLength>
<CustomRuleAssemblyFileName>CustomRuleExample.dll</CustomRuleAssemblyFileName>
<CustomRuleFullClassName>CustomRuleExample.PickupVersion</CustomRuleFullClassName>
<Redundancy>0</Redundancy>
</Parameters>
3. 然后引用 在C#中引用 PanGu.dll
4. 来段代码试试吧:
PanGu.Segment.Init();
var segment = new Segment();
var words = segment.DoSegment("kai-zhou在试用盘古中文分词库");
foreach (var wordInfo in words)
{
Trace.WriteLine(wordInfo.Word);
}
输出的结果:
kai
zhou
在
试用
盘古
中文
分
词库
可以看到盘古分词的结果还是挺不错的
参考资料:
对中文分词系统有兴趣的同学可以看看下面这本书, 亚马逊上可以免费试读,简单易懂:
中文文本自动分词和标注