转自:http://www.cnblogs.com/anderslly/p/jiebanet.html
简介
平时经常用Python写些小程序。在做文本分析相关的事情时免不了进行中文分词,于是就遇到了用Python实现的结巴中文分词。jieba使用起来非常简单,同时分词的结果也令人印象深刻,有兴趣的可以到它的在线演示站点体验下(注意第三行文字)。
.NET平台上常见的分词组件是盘古分词,但是已经好久没有更新了。最明显的是内置词典,jieba的词典有50万个词条,而盘古的词典是17万,这样会造成明显不同的分词效果。另外,对于未登录词,jieba“采用了基于汉字成词能力的HMM模型,使用了Viterbi算法”,效果看起来也不错。
基于以上两点,加上对于中文分词的兴趣,就尝试将jieba移植到.NET平台上,已经把代码放在了github上:jieba.NET。在试用jieba.NET之前,先简单介绍下jieba的实现思路。
jieba实现浅析
jieba本身提供的文档较少,但我们可以在《对Python中文分词模块结巴分词算法过程的理解和分析》、《jieba 分词源代码研读(1)》这一系列文章中一窥jieba实现的整体思路。简言之,它的核心模块和分词过程大致是:
- 前缀词典(Trie):用于存储主词典,也可以动态增删词条,这个词典可以理解为jieba所“知道”的词,或者说已登录词;
- 有向无环图(DAG):通过前缀词典,可以找出句子所有可能的成词结果;
- 最大概率路径:通过DAG,可以了解所有的成词结果,每个结果对应于一条路径及其概率。由于不同词条的出现概率不同,不同的结果就对应了不同的概率,我们找出概率最大的那条路径。到这里,我们对于已登录词做出了最合理的划分;
- HMM模型和Viterbi算法:最大概率路径之后,我们可能会遇到一些未登录词(不包含在前缀词典中的词),这时通过HMM和Viterbi尝试进一步的划分,得到最终结果
这个过程与人的分词过程很类似。比如看到这句话:“语言学家参加学术会议”,我们会把它划分为:“语言学家 参加 学术会议”。尽管这个过程是瞬间完成的,但是它确实包含了上述过程的前三步:分词之前,大脑中已有一个“前缀词典”,它包括语言、语言学、语言学家等等各个词条;大脑知道这句话确实存在多种分词的可能;但它最后还是选出了那个最可能的结果,舍弃了诸如“语言学 家 参加 学术 会议”这样的结果。
前面这句话仅包含了已登录词,再来看另一句话:“他来到了网易杭研大厦”。一般人可以迅速做出划分:“他 来到 了 网易 (杭研)? 大厦”,除了“杭研”这两个字,其它的都属于已登录词,容易划分出来。对于“杭研”,我们要想一想它们是两个单字呢,还是一个新词。最后,可能会伴随着这样一个过程:我知道网易是有研发中心或研究院之类的在杭州的,那么“杭研”可能是与此相关的一个缩写,嗯,又知道了一个新词。尽管这个过程与HMM不同,但我们至少了解到,jieba确实是通过某种方式去尝试寻找未登录词。
不过可以想象的是,基于状态转移概率的HMM模型(建议参考文章《中文分词之HMM模型详解》)能够发现的词应该也是比较自然或正常的词,对于新的人名、机构名或网络词(喜大普奔之类的),效果不会很好。
jieba.NET用法
jieba.NET当前版本是0.37.1,与jieba保持一致,可以通过NuGet安装:
PM> Install-Package jieba.NET
相关推荐
进行中文文本分词时,使用的是jieba分词工具。文档中演示了结巴分词器的.Net版本在VS2013中的使用流程。新人上货,请指正!
jieba中文分词.NET Core版
jieba和百度分词词库;
jieba分词jieba分词jieba.NET-master.zip
分词 jieba.NET版本(C#实现) * 支持三种分词模式: - 精确模式,试图将句子最精确地切开,适合文本分析; - 全模式,把句子中所有的可以成词的词语都扫描出来, **速度非常快,但是不能解决歧义。 具体来说...
结巴jieba分词的c#版本,可实现多种分词形式,支持自定义用户词典
结巴中文分词停用表,整合百度分词、哈工大等停用词表2000余条数据 即拿即用,效果好,提升分词速度准确率。
jieba分词java版项目,解压文件后,用eclipse导入项目后,执行run包下的test程序即可。
Lucene.Net +盘古分词 搜索引擎,Lucene.Net2.9.4.版本,vs2012开发,通过实例可以有初步的认识和了解
该文件是jieba分词jar包,其中包括主要的jar包,源码,文档等。
python-jieba文件包,解压后将两个文件夹放入 工程文件--->venv(或自定义的配置文件夹)--->Lib--->site-packages中使用
我的作业,包含jieba,cbow,lstm,crf等,有搜索引擎,有的做了界面。
“结巴”中文分词:做最好的 Python 中文分词组件
jieba分词的自定义词典:使用jieba分词对语料进行分词之前,需要先载入,载入代码为jieba.load_userdict("userdict.txt")。
elasticsearch-jieba-plugin 是 Jieba 中文分词插件。试用 Elasticsearch 5.1.2 版本,基于 huaban 开源的的 jieba java 实现。使用checkout tag: v5.1.2git checkout v5.1.2运行gradle buildPluginZip创建 ...
针对jieba的各种分词模式进行测试,并且给出了对三国演义的关键词提取,以及数据集,同时包括其他常用分词数据集
.net分词实例支持三种分词模式: 精确模式,试图将句子最精确地切开,适合文本分析; 全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义; 搜索引擎模式,在精确模式的基础上,对长词...
jieba分词支持关键词带空格和特殊字符
Python Jieba中文分词工具实现分词功能,Python Jieba中文分词工具实现分词功能
在Rust jieba-rs中实现的jieba中文分词在Rust安装中实现jieba中文分词将其添加到Cargo.toml:[dependencies] jieba-rs =“ 0.6”那么您就很好了。 如果您使用的是Rust 2015,则还必须将板条jieba_rs外部化为板条根。...