搜索中的分词器是 query 分析理解中必不可少的基本工具,市面上又非常多的开源分词工具。分词算法从最简单的最大正向、最大反向分词算法,到复杂的隐马尔科夫、CRF 模型等机器学习训练出来的模型。
中文分词器
下面整理了相关的中文分词器,从开源项目到收费项目,从单一分词工具到包含词性标注、NER(命名实体识别)、文本分类等集合工具。
分词组件/服务 | 开源/商业 | 支持语言 | 分词 | 词性标注 | 命名实体识别 | 费用 | 说明 |
---|---|---|---|---|---|---|---|
IKAnalyzer | 开源 | Java | 支持 | 无 | |||
结巴分词 | 开源 | Java、Python、C++、GO、R | 支持 | 支持 | 无 | ||
THULAC | 开源 | Java、Python、C++ | 支持 | 支持 | 无 | 清华大学开源项目 | |
PKUSeg | 开源 | Python | 支持 | 支持 | 支持 | 无 | 北京大学开源项目 |
HanLP | 开源 | Java、Python、C++ | 支持 | 支持 | 支持 | 无 | |
Stanford CoreNLP | 开源 | Java、Python | 支持 | 支持 | 支持 | 无 | 斯坦福大学开源项目 |
SnowNLP | 开源 | Python | 支持 | 支持 | 无 | ||
FoolNLTK | 开源 | Java、Python | 支持 | 支持 | 支持 | 无 | |
LTP | 开源 | Java、Python、C++ | 支持 | 支持 | 支持 | 无 | 哈工大开源项目 |
FastNLP/FudanNLP | 开源 | Python | 支持 | 支持 | 支持 | 无 | 复旦大学开源项目 |
NLPIR | 开源 | Java、Python | 支持 | 支持 | 支持 | 无 | 张化平博士开源项目 |
BosonNLP | 商业 | REST | 支持 | 支持 | 支持 | 免费 | |
百度 NLP | 商业 | REST | 支持 | 支持 | 支持 | 有 | 隶属于百度 AI 开放平台 |
阿里云 NLP | 商业 | REST | 支持 | 支持 | 支持 | 按次数 | 阿里云 NLP 开放平台 |
腾讯文智 | 商业 | REST | 支持 | 支持 | 支持 | 按次数/按月 | 腾讯的 NLP 开放平台 |
IKAnalyzer
IKAnalyzer 一个最常用的中文分词器,它是一个开源的,基于 java 语言开发的轻量级的中文分词工具包。从 2006 年 12 月推出 1.0 版开始,最初,它是以开源项目 Luence 为应用主体的,结合词典分词和文法分析算法的中文分词组件。从 3.0 版本开始,IK 发展为面向 Java 的公用分词组件,独立于 Lucene 项目,同时提供了对 Lucene 的默认优化实现。在 2012 版本中,IK 实现了简单的分词歧义排除算法,标志着 IK 分词器从单纯的词典分词向模拟语义分词衍化。
IK 提供两种分词模式,智能模式和细粒度模式(智能:对应 es 的 IK 插件的 ik_smart,细粒度:对应 es 的 IK 插件的 ik_max_word)。
jieba(结巴)
结巴分词是国内程序员最初用 python 语言开发的中文分词模块,后续推出了 java、C++、Rust、Node.js、Erlang、R、iOS、PHP、.NET(C#)、GO、Android 等版本。
git 开源地址:https://github.com/fxsjy/jieba
jieba 主要支持 4 种分词模式:
- 精确模式:试图将句子最精确地切开,适合文本分析;
- 全切模式:把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;
- 搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词;
- paddle 模式:利用 PaddlePaddle 深度学习框架,训练序列标注(双向 GRU)网络模型实现分词,同时支持词性标注。
jieba 还支持繁体分词、自定义词典。
HanLP
HanLP 最初是一个上海外国大学日语专业的何晗同学在大二时候开发的中文分词器,用自研的基于双数组字典树的 AC 自动机,这大大提升了 HanLP 的运行速度。第一版本的 HanLP 功能比较简单,后续经过几年的迭代,其功能越来越完善,性能更高效。HanLP 能提供词法分析、句法分析、文本分类、情感分析等功能。此外,HanLP 还具有精度高、速度快、内存省的特点。从 v1.3 版本起,HanLP 由大快搜索主导开发,并完全开源(git 地址:https://github.com/hankcs/HanLP)。
任务 | 算法 | 原理 | 特点 |
---|---|---|---|
分词 | 最短路径分词 | HMM-Bigram | 速度与精度最佳平衡;一百兆内存 |
N-最短路径分词 | |||
感知机分词 | 字构词 | 侧重精度,全世界最大语料库,可识别新词;适合 NLP 任务 | |
CRF 分词 | |||
极速词典分词 | 词典分词 | 侧重速度,每秒数千万字符;省内存 | |
词性标注 | HMM 词性标注 | HMM | 速度快 |
感知机词性标注 | 感知机 | 精度高 | |
CRF 词性标注 | CRF | ||
命名实体识别 | 中国人名识别 | HMM-Viterbi 角色标注 | 速度快 |
音译人名识别 | 层叠隐马 | ||
日本人名识别 | |||
地名识别 | HMM-Viterbi 角色标注 | ||
实体机构名识别 | 层叠隐马 | ||
感知机命名实体识别 | 感知机 | 精度高 | |
CRF 命名实体识别 | CRF |
关于 HanLP 更多的详解,参见分词器 HanLP 最全详解。