jieba.NET是jieba中文分词的.NET版本(C#实现)。
当前版本为0.42.2,基于jieba 0.42,提供与jieba基本一致的功能与接口,但不支持其最新的paddle模式。关于jieba的实现思路,可以看看这篇wiki里提到的资料。
此外,也提供了KeywordProcessor
,参考FlashText实现。KeywordProcessor
可以更灵活地从文本中提取词典中的关键词,比如忽略大小写、含空格的词等。
JiebaSegmenter.Cut
方法接受三个输入参数,text为待分词的字符串;cutAll指定是否采用全模式;hmm指定使用是否使用hmm模型切分未登录词;返回类型为IEnumerable<string>
JiebaSegmenter.CutForSearch
方法接受两个输入参数,text为待分词的字符串;hmm指定使用是否使用hmm模型;返回类型为IEnumerable<string>
代码示例
var segmenter = new JiebaSegmenter (); var segments = segmenter . Cut ( "我来到北京清华大学" , cutAll : true ); Console . WriteLine ( "【全模式】:{0} " , string . Join ( " / " , segments )); segments = segmenter . Cut ( "我来到北京清华大学" ); //默认为精确模式 Console . WriteLine ( "【精确模式】:{0} " , string . Join ( " / " , segments )); segments = segmenter . Cut ( "他来到了网易杭研大厦" ); //默认为精确模式,同时也使用HMM模型 Console . WriteLine ( "【新词识别】:{0} " , string . Join ( " / " , segments )); segments = segmenter . CutForSearch ( "小明硕士毕业于中国科学院计算所,后在日本京都大学深造" ); //搜索引擎模式 Console . WriteLine ( "【搜索引擎模式】:{0} " , string . Join ( " / " , segments )); segments = segmenter . Cut ( "结过婚的和尚未结过婚的" ); Console . WriteLine ( "【歧义消除】:{0} " , string . Join ( " / " , segments ));
输出
【全模式】:我/ 来到/ 北京/ 清华/ 清华大学/ 华大/ 大学 【精确模式】:我/ 来到/ 北京/ 清华大学 【新词识别】:他/ 来到/ 了/ 网易/ 杭研/ 大厦 【搜索引擎模式】:小明/ 硕士/ 毕业/ 于/ 中国/ 科学/ 学院/ 科学院/ 中国科学院/ 计算/ 计算所/ ,/ 后/ 在/ 日本/ 京都/ 大学/ 日本京都大学/ 深造 【歧义消除】:结过婚/ 的/ 和/ 尚未/ 结过婚/ 的
可以使用Counter
类统计词频,其实现来自Python标准库的Counter类(具体接口和实现细节略有不同),用法大致是:
var s = "在数学和计算机科学之中,算法(algorithm)为任何良定义的具体计算步骤的一个序列, 常用于计算、数据处理和自动推理。精确而言,算法是一个表示为有限长列表的有效方法。 算法应包含清晰定义的指令用于计算函数。"; var seg = new JiebaSegmenter(); var freqs = new Counter<string>(seg.Cut(s)); foreach (var pair in freqs.MostCommon(5)) { Console.WriteLine($"{pair.Key}: {pair.Value}"); }
输出:
的: 4 ,: 3 算法: 3 计算: 3 。: 3
Counter
类可通过Add
,Subtract
和Union
方法进行修改,最后以MostCommon
方法获得频率最高的若干词。具体用法可见测试用例。
转自 https://github.com/anderscui/jieba.NET/