NLP任务都是要用python完成么?当然不是了。。。毕竟企业级服务还是Java性能好。下面介绍几个可供选择的中文NLP任务工具包。
首先声明,本文介绍的所有工具也可参考下文:
Java开源项目cws_evaluation:中文分词器分词效果评估对比
文中比较了10个中文分词工具,比较了他们主要性能。
其次,本文提供各个工具github地址及主要特点,具体使用方法及功能、特点,去github了解即可。
这几个工具都是只能完成分词任务的工具:
1. jieba
使用python的都熟悉结巴分词,这是java版本的实现。
结巴分词(java版) https://github.com/huaban/jieba-analysis
简介: 多年没更新,1000stars, 只实现了结巴基本的Search模式和Index模式的分词功能,代码有待完善;没有实现词性标注等,性能不错,简单的任务用一下没问题。
2. MMSeg4j
mmseg4j-solr
简介:400stars, 两年没更新。用Chih-HaoTsai的MMSeg算法实现的中文分词器,MMSeg算法有两种分词方法:Simple和Complex,都是基于正向最大匹配。支持三种模式,simple, complex, max_word;支持自定义词库;整合solr。使用方法也可参考:mmseg4j中文分词包使用
3. ik-analyzer
github代码地址,但是貌似项目已迁移至Google Code: ik-analyzer
简介:也是一个多年不开发的项目,06年-12年开发的,450stars。轻量的java分词,以开源项目Luence为应用主体,支持细粒度和智能分词两种切分模式,轻量意味着 速度快,内存少。
4. SmartChineseAnalyzer
SmartChineseAnalyzer
整合Es的介绍 https://www.elastic.co/guide/en/elasticsearch/plugins/current/analysis-smartcn.html
apache/lucene-solr 貌似是github源码,org.apache.lucene.analysis.cn.smart.SmartChineseAnalyzer
简介:中文表现不错,支持中英混合,基于HMM模式和大量语料训练。
这里介绍的几个工具都比较强大,一般用起来比较重的。
1. word
Java分布式中文分词组件 - word分词
word分词是一个Java实现的分布式的中文分词组件,提供了多种基于词典的分词算法,并利用ngram模型来消除歧义。能准确识别英文、数字,以及日期、时间等数量词,能识别人名、地名、组织机构名等未登录词。能通过自定义配置文件来改变组件行为,能自定义用户词库、自动检测词库变化、支持大规模分布式环境,能灵活指定多种分词算法,能使用refine功能灵活控制分词结果,还能使用词频统计、词性标注、同义标注、反义标注、拼音标注等功能。提供了10种分词算法,还提供了10种文本相似度算法,同时还无缝和Lucene、Solr、ElasticSearch、Luke集成。
SegmentationAlgorithm的可选类型为:
正向最大匹配算法:MaximumMatching
逆向最大匹配算法:ReverseMaximumMatching
正向最小匹配算法:MinimumMatching
逆向最小匹配算法:ReverseMinimumMatching
双向最大匹配算法:BidirectionalMaximumMatching
双向最小匹配算法:BidirectionalMinimumMatching
双向最大最小匹配算法:BidirectionalMaximumMinimumMatching
全切分算法:FullSegmentation
最少词数算法:MinimalWordCount
最大Ngram分值算法:MaxNgramScore
相似度可用的算法有:
1、sa=cos,余弦相似度
2、sa=edi,编辑距离
3、sa=euc,欧几里得距离
4、sa=sim,简单共有词
5、sa=jac,Jaccard相似性系数
6、sa=man,曼哈顿距离
7、sa=shh,SimHash + 汉明距离
8、sa=ja,Jaro距离
9、sa=jaw,Jaro–Winkler距离
10、sa=sd,Sørensen–Dice系数
可以看出该工具十分强大,1000多stars,最近也还在开发中,只是功能基本没有更新了。
2. ansj
ansj分词
简介:名不见经传却很赞的NLP工具,目前4000多stars,仍然在开发。这是一个基于n-Gram+CRF+HMM的中文分词的java实现.分词速度达到每秒钟大约200万字左右(mac air下测试),准确率能达到96%以上。目前实现了.中文分词,中文姓名识别 . 用户自定义词典,关键字提取,自动摘要,关键字标记等功能,可以应用到自然语言处理等方面,适用于对分词效果要求高的各种项目。
具体介绍看github上的wiki: https://github.com/NLPchina/ansj_seg/wiki,支持的分词模式(摘自该wiki)有:ToAnalysis 精准分词, DicAnalysis 用户自定义词典优先策略的分词, NlpAnalysis 带有新词发现功能的分词, IndexAnalysis 面向索引的分词, BaseAnalysis 最小颗粒度的分词。
wiki十分详细,感兴趣的可以看,README中介绍的并不详细,没有相关使用demo。
3. Stanford分词器
https://nlp.stanford.edu/software/segmenter.shtml 这个貌似是官网
Stanford CoreNLP:核心NLP工具的Java套件 这个是源码
简介: 斯坦福大学NLP group研发的一套基于CRF的开源中文分词系统,采用CRF(Conditional Random Fields)算法。其分析为更高级别和特定领域的文本理解应用程序提供了基础构建块。Stanford CoreNLP是一套稳定且经过良好测试的自然语言处理工具,广泛应用于学术界,工业界和政府部门。该项目5500stars,仍然在不断开发中,本来是不错的,但是从众多使用反馈来看,该工具耗内存,速度也慢。使用时还需综合考虑,了解其NLP任务表现,如果其他工具可以完成,就不要使用这么重的工具。
使用方法参考: Stanford Word Segmenter使用。
4. HanLP: Han Language Processing
官网首页: http://hanlp.com/
github地址: https://github.com/hankcs/HanLP
简介: 功能包括中文分词 词性标注 命名实体识别 依存句法分析 新词发现 关键词短语提取 自动摘要 文本分类聚类 拼音简繁,HanLP是一系列模型与算法组成的NLP工具包,由大快搜索主导并完全开源,目标是普及自然语言处理在生产环境中的应用。HanLP具备功能完善、性能高效、架构清晰、语料时新、可自定义的特点。
支持的分词模式也有多种,包括最短路径分词,CRF分词,急速词典分词等,文档中有demo。
目前已经1万+stars,仍然在不断完善,很多人在开发。综合来看,该工具是比较推荐的,虽然本人还没用。
PS: 值得提一句的是,该工具还有个python接口:自然语言处理工具包HanLP的Python接口 http://hanlp.hankcs.com/。用python的盆友不妨了解一下,很赞,500多stars。
总结两句,日常开发中,简单的分词任务,使用上述四个分词工具即可,如果文本长且专业性强,上面的四个表现不好,可尝试下面四种的多种分词模式~ 对于其他NLP任务,尽量不要使用斯坦福的小怪兽吧,其他的都可尝试,欢迎使用后反馈一些使用感受~