中文分词器简述
- Apache Lucene 作为 Java 实现的一个高效的文本搜索引擎工具包,它适用于几乎所有要求全文检索的应用项目,尤其是跨平台应用。对英文的处理已经非常完善,但在中文方面仍然非常欠缺,目前 lucene 的 contribution(贡献) 中,中日韩语言只有一个分析器(CJKAnalyzer),还是按中日韩文字来逐个切分的,无论从索引效率还是搜索准确度上都很难符合要求。
- 中文与西方语言最大的区别就在于语句的词汇之间没有明显的分词界限,但是计算机自然语言处理是按词汇来进行分析的,因此中文分词的效果直接影响中文检索和自然语言处理的准确性。例如: “我购买了道具和服装”,如果采用比较简单的正向最大匹配算法,分词结果是“我 购买 了 道具 和服 装”,明显偏离了原句的意思;而采用基于HMM的智能分词模型,能够综合分析句子的结构、各个词的频率以及各个词汇之间的跳转频率,从而能产生最优化的分词结果:“我 购买 了 道具 和 服装”
Lucene 中文分词器
- 在 lucene-analyzers-common-7.4.0.jar 包中已经自带了一些分词器,如 StandardAnalyzer、CJKAnalyzer 等
- org.apache.lucene.analysis.standard.StandardAnalyzer:单字分词,因为英文字与字之间是用空格分隔的,所以对英文准确率高;然后中文单字分词的结果比如:“我爱中国”,分词后:“我”、“爱”、“中”、“国”,导致准确率和效率都低
- org.apache.lucene.analysis.cjk.CJKAnalyzer:二分法分词,按两个字进行切分。如:“我是中国人”,效果:“我是”、“是中”、“中国”、“国人”,同样效果不高
- 所以对于中文项目通常采用第三方分词器
常用第三方中文分词
paoding-analysis
- paoding-analysis 分词器官方地址:https://gitee.com/zhzhenqin/paoding-analysis,2012年之后没有再更新
- Paoding's Knives 中文分词具有极 高效率 和 高扩展性 。引入隐喻,采用完全的面向对象设计,构思先进。
- 高效率:在PIII 1G内存个人机器上,1秒 可准确分词 100万 汉字。
- 采用基于 不限制个数 的词典文件对文章进行有效切分,使能够将对词汇分类定义。
- 能够对未知的词汇进行合理解析
mmseg4j-solr
- mmseg4j:https://github.com/chenlb/mmseg4j-solr,2016年后没再更新
tokenizer 的参数:
- dicPath 参数 - 设置自定义的扩展词库,支持相对路径(相对于 solr_home).
- mode 参数 - 分词模式。
版 本
- 2.0.0 - 要求 lucene/solr >= 4.3.0。在 lucene/solr [4.3.0, 4.7.1] 测试过兼容可用。
- 2.1.0 - 要求 lucene/solr 4.8.x
- 2.2.0 - 要求 lucene/solr [4.9, 4.10.x]
- 2.3.0 - 要求 lucene/solr [5.0, ]
- 2.4.0 - 要求 lucene/solr [6.0.0, ], 测试到 6.3.0 通过。
ansj_seg
- ansj_seg:https://github.com/NLPchina/ansj_seg,目前作者仍在更新中
摘 要
这是一个基于n-Gram+CRF+HMM的中文分词的java实现.
分词速度达到每秒钟大约200万字左右(mac air下测试),准确率能达到96%以上
目前实现了.中文分词. 中文姓名识别 . 用户自定义词典,关键字提取,自动摘要,关键字标记等功能
可以应用到自然语言处理等方面,适用于对分词效果要求高的各种项目.
下载 jar
- 访问 http://maven.nlpcn.org/org/ansj/ 最好下载最新版 ansj_seg/
- 同时下载nlp-lang.jar 需要和ansj_seg 配套..配套关系可以看jar包中的maven依赖,一般最新的ansj配最新的nlp-lang不会有错。
imdict-chinese-analyzer
- imdict-chinese-analyzer:https://code.google.com/archive/p/imdict-chinese-analyzer/
- imdict-chinese-analyzer 是 imdict智能词典 的智能中文分词模块,算法基于隐马尔科夫模型(Hidden Markov Model, HMM),是中国科学院计算技术研究所的ictclas中文分词程序的重新实现(基于Java),可以直接为lucene搜索引擎提供*简体中文*分词支持
- 2009 年后没有再更新
Jcseg
- Jcseg:https://gitee.com/lionsoul/jcseg,目前作者仍在更新中。
- Jcseg 是基于 mmseg 算法的一个轻量级中文分词器,同时集成了关键字提取,关键短语提取,关键句子提取和文章自动摘要等功能,并且提供了一个基于 Jetty 的 web 服务器,方便各大语言直接 http 调用,同时提供了最新版本的 lucene,solr 和elasticsearch 的分词接口!
- Jcseg 自带了一个 jcseg.properties文件用于快速配置而得到适合不同场合的分词应用,例如:最大匹配词长,是否开启中文人名识别,是否追加拼音,是否追加同义词等!
Jcseg 核心功能
- 中文分词:mmseg算法 + Jcseg 独创的优化算法,四种切分模式。
- 关键字提取:基于textRank算法。
- 关键短语提取:基于textRank算法。
- 关键句子提取:基于textRank算法。
- 文章自动摘要:基于BM25+textRank算法。
- 自动词性标注:基于词库+(统计歧义去除计划),目前效果不是很理想,对词性标注结果要求较高的应用不建议使用。
- 命名实体标注:基于词库+(统计歧义去除计划),电子邮件,网址,大陆手机号码,地名,人名,货币,datetime时间,长度,面积,距离单位等。
- Restful api:嵌入jetty提供了一个绝对高性能的server模块,包含全部功能的http接口,标准化json输出格式,方便各种语言客户端直接调用。
- 这个分词器官网结束内容还是比较详细的,可以直接参考官网:https://gitee.com/lionsoul/jcseg
IK Analyzer
- IK Analyzer 是一个开源的,基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始, IKAnalyzer已经推出了4个大版本。最初,它是以开源项目Luence为应用主体的,结合词典分词和文法分析算法的中文分词组件。从3.0版本开始,IK发展为面向Java的公用分词组件,独立于Lucene项目,同时提供了对Lucene的默认优化实现。在2012版本中,IK实现了简单的分词歧义排除算法,标志着IK分词器从单纯的词典分词向模拟语义分词衍化。
- 具体使用可以参考《 Lucene 中文分词器 Ik-Analyzer 使用教程》