1 中文分词简介
中文分词实现方法有 词典,规则和统计方法 ,或者多种方法相互结合。
技术难点包括歧义识别,新词(未登录词) 识别等。
中文分词算法大概分为两大类
第一类是基于 字符串匹配 ,即扫描字符串,如果发现字符串的子串和词相同,就算匹配。
这类分词通常会加入一些启发式规则,比如“正向/反向最大匹配”, “长词优先” 等策略。
这类算法优点是速度块,都是 O(n) 时间复杂度,实现简单,效果尚可。
也有缺点,就是对歧义和未登录词处理不好。
歧义的例子很简单"长春市/长春/药店" "长春/市长/春药/店".
未登录词即词典中没有出现的词,当然也就处理不好。
ikanalyzer,paoding 等就是基于字符串匹配的分词。第二类是基于统计以及机器学习的分词方式
这类分词基于人工标注的词性和统计特征,对中文进行建模,即根据观测到的数据(标注好的语料)对模型参数进行估计,即训练。 在分词阶段再通过模型计算各种分词出现的概率,将概率最大的分词结果作为最终结果。常见的序列标注模型有 HMM 和 CRF。
这类分词算法能很好处理歧义和未登录词问题,效果比前一类效果好,但是需要大量的人工标注数据,以及较慢的分词速度。
ICTCLAS 是基于 HMM 的分词库。
除了标注量,准确率和效果的考量,分词粒度也是一个需要考虑的指标。
歧义
- 组合性歧义:一个串可以切开也可以不切开。
- 交集型歧义:可以切在这里也可以切在那里。
1.1 常见的中文分词法
表格 1 常见中文分词方法列表
分词法 | 简介 | 典型软件 |
---|---|---|
单字法 Uni-Gram | 按汉字单个切 | |
二元分词法(双字)Bi-Gram | ||
三元组 Tri-Gram | ||
正向最大匹配 | ||
反向最大匹配 | 一般优于正向最大匹配。 | |
双向匹配分词 | 结合正向最大和逆向最大匹配。首先同时分词并比较,若不一致,按以下原则优先输出:词越少越好;分词结果越多越好。 | |
隐马尔科夫模型 HMM | ||
最大熵马尔科夫模型 MEMM | ||
CRF~Conditional Random Field 条件随机场 | 基于 HMM 和 MEMM 为基础的出的一种判别式概率无向图学习模型,是一处用户标注和切分有序数据的条件概念模型。 |
备注:Ngram,N 元切词:N 为切词的长度,如 N=1 单字法,N=2 二元分词法,N=3 三元组。
1.2 常见的中文分词开源项目
表格 2 常见 Java 中文分词工具简介
分词工具 | 支持语言 | 分词原理 | 词典及扩展性 |
---|---|---|---|
StandardAnalyzer | 中英文 | 中文:单字符切分 英文:根据空格切分 | |
ChineseAnalyzer | 中文,不支持中文和英文及数字混合的文本分词 | 按字分词,与 StandardAnalyzer 对中文的分词没有大的区别 | |
CJKAnalyzer | 中文,英文,不支持中文和英文及数字混合的文本分词 | 采用的双字切分,也就是对一段文字按每两个字来进行切分 | |
IKAnalyzer | 英文字母、数字、中文词汇等分词处理,兼容韩文、日文字符 | 正向迭代最细粒度切分算法 (词典+文法分析) | 收录 27 万中文词汇,支持用户词典扩展定义、支持自定义停止词 |
paoding | 中文 | 支持不限制个数的用户自定义词库 | |
MMAnalyzer | 支持英文、数字、中文(简体)混合分词 | 正向最大匹配算法 | 支持动态扩展 |
MMSeg4j | 中文,包括一些字符的处理 英文、俄文、希腊、数字(包括①㈠⒈)的分出一连串的。目前版本没有处理小数字问题。 | 用 Chih-Hao Tsai 的 MMSeg 算法。MMSeg 算法有两种分词方法:Simple 和 Complex,都是基于正向最大匹配。在 complex 基础上实现了最多分词(max-word) | 强制使用 UTF-8) 使用 sougou 词库,也可自定义覆盖 |
imdict | 中文、英文、数字 | 隐马尔科夫模型 | 仅 coredict 核心字典、bigramdict 词典,不含人名、地名词典。不支持自定义词典 |
HanLP |
表格 3 常见中文分词开源工具评测表格 4
分词组件 | 开发语言 | 准确率(%) | 速度(/sec) | 主要技术 | 简介 | 总评 |
---|---|---|---|---|---|---|
SCWS | C/C++ | 90% ~ 95% | 1.2MB | 基于词频词典的机械中文分词引擎 http://www.ftphp.com/scws/ | ||
ICTCLAS | C/C++ | 98.45% | 996KB | Bigram+ HMM | 中科院发布,最早和最实用的中文开源分词项目之一。张平主导。 http://ictclas.org/ | 推荐 |
ANSJ | Java | 孙捷,ICTCAS 的 JAVA 版本,做了一些工程上的优化。 | ||||
HTTPCWS | Java | 基于 HTTP 协议的开源中文分词系统,目前仅支持 Linux 系统。 HTTPCWS 使用“ICTCLAS 3.0 2009 共享版中文分词算法”的 API 进行分词处理,得出分词结果。 | ||||
CC-CEDICT | Java | 提供一份以汉语拼音为中文辅助的汉英辞典, Chrome 中文版就是使用的这个词典进行中文分词的。 http://cc-cedict.org/wiki/ | ||||
IK-- IKAnalyzer | Java | 600KB | 开源的,基于 java 语言开发的轻量级的中文分词工具包。采用了“正向迭代最细粒度切分算法“. http://code.google.com/p/ik-analyzer/ | 现用 | ||
Paoding | Java | 1MB | Paoding (庖丁解牛)基于 Java 的开源中文分词组件,提供 lucene 和 solr 接口,具有极高效率和高扩展性 。 http://code.google.com/p/paoding/ | 可试用 | ||
MMSEG4J | Java | 98.41% | 1.2+MB | 基于 Java 的开源中文分词组件,提供 lucene 和 solr 接口。 MMSeg 算法有两种分词方法:Simple 和 Complex,都是基于正向最大匹配。 http://code.google.com/p/mmseg4j/ | 可试用 | |
海量中文智能分词 | C | 99.7% | 1.67MB | 商业版本 http://www.hylanda.com/pro.php?smid=20 | ||
Jieba | Python | Unigram+ HMM | 由 fxsjy 开源。 http://python.jobbole.com/86603/ | |||
LTP | SP | 哈工大 2011 年开源。 SP~结构化感知器 | ||||
FNLP | Java | PA | 复旦大学 2014 年开源。 PA~Passive-Aggressive | |||
THUAC | SP | 清华大学 2016 年开源。 | ||||
HanLP | Java |
SCWS
Hightman 开发的一套基于词频词典的机械中文分词引擎,它能将一整段的汉字基本正确的切分成词。采用的是采集的词频词典,并辅以一定的专有名 称,人名,地名,数字年代等规则识别来达到基本分词,经小范围测试大概准确率在 90% ~ 95% 之间,已能基本满足一些小型搜索引擎、关键字提取等场合运用。45Kb 左右的文本切词时间是 0.026 秒,大概是 1.5MB 文本/秒,支持 PHP4 和 PHP 5。
ICTCLAS
这可是最早的中文开源分词项目之一,ICTCLAS 在国内 973 专家组组织的评测中活动获得了第一名,在第一届国际中文处理研究机构 SigHan 组织的评测中都获得了多项第一名。ICTCLAS3.0 分词速度单机 996KB/s,分词精度 98.45%,API 不超过 200KB,各种词典数据压缩后不到 3M.ICTCLAS 全部采用 C/C++编写,支持 Linux、 FreeBSD 及 Windows 系列操作系统,支持 C/C++、C#、Delphi、Java 等主流的开发语言。
IK
IKAnalyzer 是一个开源的,基于 java 语言开发的轻量级的中文分词工具包。从 2006 年 12 月推出 1.0 版开始,IKAnalyzer 已经推出了 3 个大版本。最初,它是以开源项目 Luence 为应用主体的,结合词典分词和文法分析算法的中文分词组件。新版本的 IKAnalyzer3.0 则发展为面向 Java 的公用分词组件,独立于 Lucene 项目,同时提供了对 Lucene 的默认优化实现。
Paoding
Paoding (庖丁解牛)基于 Java 的开源中文分词组件,提供 lucene 和 solr 接口,具有极 高效率 和 高扩展性 。引入隐喻,采用完全的面向对象设计,构思先进。高效率:在 PIII 1G 内存个人机器上,1 秒可准确分词 100 万汉字。 采用基于不限制个数 的词典文件对文章进行有效切分,使能够将对词汇分类定义。能够对未知的词汇进行合理解析
MMSEG4J
MMSEG4J 基于 Java 的开源中文分词组件,提供 lucene 和 solr 接口。
1)、mmseg4j 用 Chih-Hao Tsai 的 MMSeg 算法实现的中文分词器,并实现 lucene 的 analyzer 和 solr 的 TokenizerFactory 以方便在 Lucene 和 Solr 中使用。2)、MMSeg 算法有两种分词方法:Simple 和 Complex,都是基于正向最大匹配。Complex 加了四个规则过虑。官方说:词语的正确识别率达到了 98.41%。mmseg4j 已经实现了这两种分词算法。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论