中文分词是中文文本处理的基础步骤,也是中文人机天然语言交互的基础模块。因为中文句子中没有词的界限,所以在进行中文天然语言处理时,一般须要先进行分词。java
纵观整个开源领域,陆陆续续作中文分词的也有很多,不过目前仍在维护的且质量较高的并很少。下面整理了一些我的认为比较优秀的中文分词库,以供你们参考使用。git
一、HanLP —— 汉语言处理包github
HanLP是一系列模型与算法组成的NLP工具包,由大快搜索主导并彻底开源,目标是普及天然语言处理在生产环境中的应用。HanLP具有功能完善、性能高效、架构清晰、语料时新、可自定义的特色。web
HanLP提供下列功能:算法
在提供丰富功能的同时,HanLP内部模块坚持低耦合、模型坚持惰性加载、服务坚持静态提供、词典坚持明文发布,使用很是方便,同时自带一些语料处理工具,帮助用户训练本身的模型。json
“结巴”中文分词,作最好的 Python 中文分词组件。数组
特性服务器
算法网络
代码示例
Jcseg 是基于 mmseg 算法的一个轻量级中文分词器,同时集成了关键字提取,关键短语提取,关键句子提取和文章自动摘要等功能,而且提供了一个基于 Jetty 的 web 服务器,方便各大语言直接 http 调用,同时提供了最新版本的 lucene, solr, elasticsearch 的分词接口!Jcseg 自带了一个 jcseg.properties 文件用于快速配置而获得适合不一样场合的分词应用,例如:最大匹配词长,是否开启中文人名识别,是否追加拼音,是否追加同义词等!
核心功能:
中文分词模式:
六种切分模式
(1).简易模式:FMM 算法,适合速度要求场合。
(2).复杂模式:MMSEG 四种过滤算法,具备较高的歧义去除,分词准确率达到了 98.41%。
(3).检测模式:只返回词库中已有的词条,很适合某些应用场合。
(4).检索模式:细粒度切分,专为检索而生,除了中文处理外(不具有中文的人名,数字识别等智能功能)其余与复杂模式一致(英文,组合词等)。
(5).分隔符模式:按照给定的字符切分词条,默认是空格,特定场合的应用。
(6).NLP 模式:继承自复杂模式,更改了数字,单位等词条的组合方式,增长电子邮件,大陆手机号码,网址,人名,地名,货币等以及无限种自定义实体的识别与返回。
sego 是一个 Go 中文分词库,词典用双数组 trie(Double-Array Trie)实现, 分词器算法为基于词频的最短路径加动态规划。
支持普通和搜索引擎两种分词模式,支持用户词典、词性标注,可运行 JSON RPC 服务。
分词速度单线程 9MB/s,goroutines 并发 42MB/s(8核 Macbook Pro)。
示例代码:
中文处理工具包
特色
定制本身的模型
六、Ansj 中文分词 —— 基于 n-Gram+CRF+HMM 的中文分词的 Java 实现
Ansj 中文分词是一个基于 n-Gram+CRF+HMM 的中文分词的 java 实现。分词速度达到每秒钟大约200万字左右(mac air下测试),准确率能达到96%以上。目前实现了中文分词、中文姓名识别、用户自定义词典、关键字提取、自动摘要、关键字标记等功能,能够应用到天然语言处理等方面,适用于对分词效果要求高的各类项目。
下面是一个简单的分词效果,仅作参考:
word 分词是一个 Java 实现的分布式的中文分词组件,提供了多种基于词典的分词算法,并利用 ngram 模型来消除歧义。能准确识别英文、数字,以及日期、时间等数量词,能识别人名、地名、组织机构名等未登陆词。能经过自定义配置文件来改变组件行为,能自定义用户词库、自动检测词库变化、支持大规模分布式环境,能灵活指定多种分词算法,能使用refine功能灵活控制分词结果,还能使用词频统计、词性标注、同义标注、反义标注、拼音标注等功能。提供了10种分词算法,还提供了10种文本类似度算法,同时还无缝和 Lucene、Solr、ElasticSearch、Luke 集成。注意:word1.3 须要 JDK1.8 。
分词算法效果评估:
转载自编辑部的故事的我的空间