赞
踩
注:此文章内容均节选自充电了么创始人,CEO兼CTO陈敬雷老师的新书《自然语言处理原理与实战》(人工智能科学与技术丛书)【陈敬雷编著】【清华大学出版社】
分词工具有Java、Python、C++实现的,这里给大家推荐目前最流行的分词工具。CRF++是采用C++语言编写,但可以用Python来调用。HanLP是用Java编写的,也可以用Python调用。IK分词和mmseg4j分词也是用Java编写,经常集成在搜索引擎Solr和Elasticsearch里。下面分别进行讲解这几个开源分词包。
HanLP是一系列模型与算法组成的NLP工具包,使用Java语言开发,并支持Python语言调用,目标是普及自然语言处理在生产环境中的应用。HanLP具备功能完善、性能高效、架构清晰、语料时新、可自定义的特点。
HanLP提供下列功能:
中文分词:
HMM-Bigram(速度与精度最佳平衡;一百兆内存)
最短路分词、N-最短路分词
由字构词(侧重精度,全世界最大语料库,可识别新词;适合NLP任务)
感知机分词、CRF分词
词典分词(侧重速度,每秒数千万字符;省内存)
极速词典分词
所有分词器都支持:
索引全切分模式
用户自定义词典
兼容繁体中文
训练用户自己的领域模型
词性标注:
HMM词性标注(速度快)
感知机词性标注、CRF词性标注(精度高)
命名实体识别:
基于HMM角色标注的命名实体识别 (速度快)
中国人名识别、音译人名识别、日本人名识别、地名识别、实体机构名识别
基于线性模型的命名实体识别(精度高)
感知机命名实体识别、CRF命名实体识别
关键词提取:
TextRank关键词提取
自动摘要:
TextRank自动摘要
短语提取:
基于互信息和左右信息熵的短语提取
拼音转换:
多音字、声母、韵母、声调
简繁转换:
简繁分歧词(简体、繁体、臺灣正體、香港繁體)
文本推荐:
语义推荐、拼音推荐、字词推荐
依存句法分析:
基于神经网络的高性能依存句法分析器
基于ArcEager转移系统的柱搜索依存句法分析器
文本分类:
情感分析
文本聚类:
KMeans、Repeated Bisection、自动推断聚类数目k
word2vec:
词向量训练、加载、词语相似度计算、语义运算、查询、KMeans聚类
文档语义相似度计算
语料库工具:
部分默认模型训练自小型语料库,鼓励用户自行训练。所有模块提供训练接口,语料可参考98年人民日报语料库。
在提供丰富功能的同时,HanLP内部模块坚持低耦合、模型坚持惰性加载、服务坚持静态提供、词典坚持明文发布,使用非常方便。默认模型训练自全世界最大规模的中文语料库,同时自带一些语料处理工具,帮助用户训练自己的模型。支持自定义词典。
下面我们通过Java代码来演示HanLP的几种中文分词使用,代码如下所示:
【代码6.14】 PrefixSpanJob.scala
package com.chongdianleme.job; import com.hankcs.hanlp.HanLP; import com.hankcs.hanlp.seg.CRF.CRFSegment; import com.hankcs.hanlp.seg.Dijkstra.DijkstraSegment; import com.hankcs.hanlp.seg.NShort.NShortSegment; import com.hankcs.hanlp.seg.Segment; import com.hankcs.hanlp.seg.common.Term; import com.hankcs.hanlp.tokenizer.IndexTokenizer; import com.hankcs.hanlp.tokenizer.NLPTokenizer; import com.hankcs.hanlp.tokenizer.SpeedTokenizer; import com.hankcs.hanlp.tokenizer.StandardTokenizer; import java.util.List; /** * Created by 充电了么App - 陈敬雷 * 充电了么App官网:http://chongdianleme.com/ * 充电了么App - 专注上班族职业技能提升充电学习的在线教育平台 * HanLP中文分词功能演示,开源地址:https://github.com/hankcs/HanLP */ public class HanLPDemo { public static void main(String[] args) { segment();//常用默认分词:HanLP.segment standardSegment();//标准分词:StandardTokenizer.segment NLPSegment();// NLP分词 indexTokenizerSegment();//索引分词 nShortSegment();//N-最短路径分词 CRFSegment();//CRF分词 highSpeedSegment();//极速词典分词 } /** *1.常用默认分词:HanLP.segment * HanLP对词典的数据结构进行了长期的优化,可以应对绝大多数场景。哪怕HanLP的词典上百兆也无需担心,因为在内存中被精心压缩过。 * 如果内存非常有限,请使用小词典。HanLP默认使用大词典,同时提供小词典。全部词典和模型都是惰性加载的,不使用的模型相当于不存在,可以自由删除。 * HanLP.segment其实是对StandardTokenizer.segment标准分词的包装,和标准分词的结果是一样的。 */ public static void segment() { String s = "分布式机器学习实战(人工智能科学与技术丛书)深入浅出,逐步讲解分布式机器学习的框架及应用配套个性化推荐算法系统、人脸识别、对话机器人等实战项目。"; List<Term> termList =HanLP.segment(s); System.out.println(termList); //输出结果如下:分词结果包含词性,比如分布式的词性b代表区别词,机器学习的词性gi代表计算机相关词汇,实战的词性n代表名称, // 后面每个词都返回了对应的词性,这里不一一举例,下章我们会单独讲词性标注,列出所有的词性表。 //[分布式/b, 机器学习/gi, 实战/n, (/w, 人工智能/n, 科学/n, 与/p, 技术/n, 丛书/n, )/w, 深入浅出/i, ,/w, 逐步/d, 讲解/v, 分布式/b, 机器学习/gi, 的/uj, 框架/n, 及/c, 应用/vn, 配套/a, 个性化/v, 推荐/v, 算法/n, 系统/n, 、/w, 人脸/n, 识别/v, 、/w, 对话/vn, 机器人/n, 等/u, 实战/n, 项目/n, 。/w] } /** *2.标准分词:StandardTokenizer.segment * HanLP中有一系列“开箱即用”的静态分词器,以Tokenizer结尾,在接下来的例子中会继续介绍。 * HanLP.segment其实是对StandardTokenizer.segment的包装。 * 分词结果包含词性,每个词性的意思下章详细讲解。 */ public static void standardSegment() { String s = "分布式机器学习实战(人工智能科学与技术丛书)深入浅出,逐步讲解分布式机器学习的框架及应用配套个性化推荐算法系统、人脸识别、对话机器人等实战项目。"; List<Term> termList = StandardTokenizer.segment(s); System.out.println(termList); termList = HanLP.segment(s); //输出结果如下:可以看到和上面的HanLP.segment结果是一样的。 //[分布式/b, 机器学习/gi, 实战/n, (/w, 人工智能/n, 科学/n, 与/p, 技术/n, 丛书/n, )/w, 深入浅出/i, ,/w, 逐步/d, 讲解/v, 分布式/b, 机器学习/gi, 的/uj, 框架/n, 及/c, 应用/vn, 配套/a, 个性化/v, 推荐/v, 算法/n, 系统/n, 、/w, 人脸/n, 识别/v, 、/w, 对话/vn, 机器人/n, 等/u, 实战/n, 项目/n, 。/w] } /** *3.NLP分词:NLPTokenizer.segment NLP分词NLPTokenizer会执行词性标注和命名实体识别,由结构化感知机序列标注框架支撑。默认模型训练自9970万字的大型综合语料库,是已知范围内全世界最大的中文分词语料库。 语料库规模决定实际效果,面向生产环境的语料库应当在千万字量级。用户可以在自己的语料上训练新模型以适应新领域、识别新的命名实体。 */ public static void NLPSegment() { String s = "分布式机器学习实战(人工智能科学与技术丛书)深入浅出,逐步讲解分布式机器学习的框架及应用配套个性化推荐算法系统、人脸识别、对话机器人等实战项目。"; System.out.println(NLPTokenizer.segment(s)); //输出结果如下: //[分布式/b, 机器学习/gi, 实战/n, (/w, 人工智能/n, 科学/n, 与/p, 技术/n, 丛书/n, )/w, 深入浅出/i, ,/w, 逐步/d, 讲解/v, 分布式/b, 机器学习/gi, 的/uj, 框架/n, 及/c, 应用/vn, 配套/a, 个性化/v, 推荐/v, 算法/n, 系统/n, 、/w, 人脸/n, 识别/v, 、/w, 对话/vn, 机器人/n, 等/u, 实战/n, 项目/n, 。/w] } /** *4.索引分词:IndexTokenizer.segment 索引分词IndexTokenizer是面向搜索引擎的分词器,能够对长词全切分,另外通过term.offset可以获取单词在文本中的偏移量。 任何分词器都可以通过基类Segment的enableIndexMode方法激活索引模式。 */ public static void indexTokenizerSegment() { String s = "分布式机器学习实战(人工智能科学与技术丛书)深入浅出,逐步讲解分布式机器学习的框架及应用配套个性化推荐算法系统、人脸识别、对话机器人等实战项目。"; List<Term> termList = IndexTokenizer.segment(s); for (Term term : termList) { System.out.println(term + " [" + term.offset + ":" + (term.offset + term.word.length()) + "]"); } //输出结果如下: /** 分布式/b [0:3] 分布/v [0:2] 机器学习/gi [3:7] 机器/n [3:5] 学习/v [5:7] 实战/n [7:9] (/w [9:10] 人工智能/n [10:14] 人工/n [10:12] 智能/n [12:14] 科学/n [14:16] 与/p [16:17] 技术/n [17:19] 丛书/n [19:21] )/w [21:22] 深入浅出/i [22:26] 深入/v [22:24] ,/w [26:27] 逐步/d [27:29] 讲解/v [29:31] 分布式/b [31:34] 分布/v [31:33] 机器学习/gi [34:38] 机器/n [34:36] 学习/v [36:38] 的/uj [38:39] 框架/n [39:41] 及/c [41:42] 应用/vn [42:44] 配套/a [44:46] 个性化/v [46:49] 个性/n [46:48] 推荐/v [49:51] 算法/n [51:53] 系统/n [53:55] 、/w [55:56] 人脸/n [56:58] 识别/v [58:60] 、/w [60:61] 对话/vn [61:63] 机器人/n [63:66] 机器/n [63:65] 等/u [66:67] 实战/n [67:69] 项目/n [69:71] 。/w [71:72] */ } /** * 5.N-最短路径分词:nShortSegment.seg N最短路分词器NShortSegment比最短路分词器慢,但是效果稍微好一些,对命名实体识别能力更强。 一般场景下最短路分词的精度已经足够,而且速度比N最短路分词器快几倍,请酌情选择。 */ public static void nShortSegment() { String s = "分布式机器学习实战(人工智能科学与技术丛书)深入浅出,逐步讲解分布式机器学习的框架及应用配套个性化推荐算法系统、人脸识别、对话机器人等实战项目。"; Segment nShortSegment = new NShortSegment().enableCustomDictionary(false).enablePlaceRecognize(true).enableOrganizationRecognize(true); Segment shortestSegment = new DijkstraSegment().enableCustomDictionary(false).enablePlaceRecognize(true).enableOrganizationRecognize(true); System.out.println("N-最短分词:" + nShortSegment.seg(s) + "\n最短路分词:" + shortestSegment.seg(s)); //输出结果如下: //N-最短分词:[分布式/b, 机器/n, 学习/v, 实战/n, (/w, 人工智能/n, 科学/n, 与/p, 技术/n, 丛书/n, )/w, 深入浅出/i, ,/w, 逐步/d, 讲解/v, 分布式/b, 机器/n, 学习/v, 的/uj, 框架/n, 及/c, 应用/vn, 配套/a, 个性化/v, 推荐/v, 算法/n, 系统/n, 、/w, 人脸/n, 识别/v, 、/w, 对话/vn, 机器人/n, 等/u, 实战/n, 项目/n, 。/w] //最短路分词:[分布式/b, 机器/n, 学习/v, 实战/n, (/w, 人工智能/n, 科学/n, 与/p, 技术/n, 丛书/n, )/w, 深入浅出/i, ,/w, 逐步/d, 讲解/v, 分布式/b, 机器/n, 学习/v, 的/uj, 框架/n, 及/c, 应用/vn, 配套/a, 个性化/v, 推荐/v, 算法/n, 系统/n, 、/w, 人脸/n, 识别/v, 、/w, 对话/vn, 机器人/n, 等/u, 实战/n, 项目/n, 。/w] } /** *6.CRF分词:CRFSegment CRF对新词有很好的识别能力,但是开销较大。 */ public static void CRFSegment() { String s = "分布式机器学习实战(人工智能科学与技术丛书)深入浅出,逐步讲解分布式机器学习的框架及应用配套个性化推荐算法系统、人脸识别、对话机器人等实战项目。"; Segment crfSegment = new CRFSegment(); System.out.println(crfSegment.seg(s)); } /** *7.极速词典分词:SpeedTokenizer.segment 极速分词是词典最长分词,速度极其快,精度一般。在i7-6700K上跑出了4500万字每秒的速度。 */ public static void highSpeedSegment() { String s = "分布式机器学习实战(人工智能科学与技术丛书)深入浅出,逐步讲解分布式机器学习的框架及应用配套个性化推荐算法系统、人脸识别、对话机器人等实战项目。"; System.out.println(SpeedTokenizer.segment(s)); long start = System.currentTimeMillis(); int pressure = 100; for (int i = 0; i < pressure; ++i) { SpeedTokenizer.segment(s); } double costTime = (System.currentTimeMillis() - start) / (double)1000; System.out.printf("分词速度:%.2f字每秒", s.length() * pressure / costTime); } }
此文章有对应的配套视频,其它更多精彩文章请大家下载充电了么app,可获取千万免费好课和文章,配套新书教材请看陈敬雷新书:《分布式机器学习实战》(人工智能科学与技术丛书)
【新书介绍】
《分布式机器学习实战》(人工智能科学与技术丛书)【陈敬雷编著】【清华大学出版社】
新书特色:深入浅出,逐步讲解分布式机器学习的框架及应用配套个性化推荐算法系统、人脸识别、对话机器人等实战项目
【新书介绍视频】
分布式机器学习实战(人工智能科学与技术丛书)新书【陈敬雷】
视频特色:重点对新书进行介绍,最新前沿技术热点剖析,技术职业规划建议!听完此课你对人工智能领域将有一个崭新的技术视野!职业发展也将有更加清晰的认识!
【精品课程】
《分布式机器学习实战》大数据人工智能AI专家级精品课程
【免费体验视频】:
人工智能百万年薪成长路线/从Python到最新热点技术
视频特色: 本系列专家级精品课有对应的配套书籍《分布式机器学习实战》,精品课和书籍可以互补式学习,彼此相互补充,大大提高了学习效率。本系列课和书籍是以分布式机器学习为主线,并对其依赖的大数据技术做了详细介绍,之后对目前主流的分布式机器学习框架和算法进行重点讲解,本系列课和书籍侧重实战,最后讲几个工业级的系统实战项目给大家。 课程核心内容有互联网公司大数据和人工智能那些事、大数据算法系统架构、大数据基础、Python编程、Java编程、Scala编程、Docker容器、Mahout分布式机器学习平台、Spark分布式机器学习平台、分布式深度学习框架和神经网络算法、自然语言处理算法、工业级完整系统实战(推荐算法系统实战、人脸识别实战、对话机器人实战)、就业/面试技巧/职业生涯规划/职业晋升指导等内容。
【充电了么公司介绍】
充电了么App是专注上班族职业培训充电学习的在线教育平台。
专注工作职业技能提升和学习,提高工作效率,带来经济效益!今天你充电了么?
充电了么官网
http://www.chongdianleme.com/
充电了么App官网下载地址
https://a.app.qq.com/o/simple.jsp?pkgname=com.charged.app
功能特色如下:
【全行业职位】 - 专注职场上班族职业技能提升
覆盖所有行业和职位,不管你是上班族,高管,还是创业都有你要学习的视频和文章。其中大数据智能AI、区块链、深度学习是互联网一线工业级的实战经验。
除了专业技能学习,还有通用职场技能,比如企业管理、股权激励和设计、职业生涯规划、社交礼仪、沟通技巧、演讲技巧、开会技巧、发邮件技巧、工作压力如何放松、人脉关系等等,全方位提高你的专业水平和整体素质。
【牛人课堂】 - 学习牛人的工作经验
1.智能个性化引擎:
海量视频课程,覆盖所有行业、所有职位,通过不同行业职位的技能词偏好挖掘分析,智能匹配你目前职位最感兴趣的技能学习课程。
2.听课全网搜索
输入关键词搜索海量视频课程,应有尽有,总有适合你的课程。
3.听课播放详情
视频播放详情,除了播放当前视频,更有相关视频课程和文章阅读,对某个技能知识点强化,让你轻松成为某个领域的资深专家。
【精品阅读】 - 技能文章兴趣阅读
1.个性化阅读引擎:
千万级文章阅读,覆盖所有行业、所有职位,通过不同行业职位的技能词偏好挖掘分析,智能匹配你目前职位最感兴趣的技能学习文章。
2.阅读全网搜索
输入关键词搜索海量文章阅读,应有尽有,总有你感兴趣的技能学习文章。
【机器人老师】 - 个人提升趣味学习
基于搜索引擎和智能深度学习训练,为您打造更懂你的机器人老师,用自然语言和机器人老师聊天学习,寓教于乐,高效学习,快乐人生。
【精短课程】 - 高效学习知识
海量精短牛人课程,满足你的时间碎片化学习,快速提高某个技能知识点。
上一篇:自然语言处理系列十七》中文分词》分词工具实战》Python的Jieba分词
下一篇:自然语言处理系列十九》中文分词》分词工具实战》Java的IK分词
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。