100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 自然语言处理系列十七》中文分词》分词工具实战》Python的Jieba分词

自然语言处理系列十七》中文分词》分词工具实战》Python的Jieba分词

时间:2020-10-22 20:25:34

相关推荐

自然语言处理系列十七》中文分词》分词工具实战》Python的Jieba分词

注:此文章内容均节选自充电了么创始人,CEO兼CTO陈敬雷老师的新书《分布式机器学习实战》(人工智能科学与技术丛书)【陈敬雷编著】【清华大学出版社】

文章目录

自然语言处理系列十七分词工具实战Python的Jieba分词总结

自然语言处理系列十七

分词工具实战

分词工具有Java、Python、C++实现的,这里给大家推荐目前最流行的分词工具。CRF++是采用C++语言编写,但可以用Python来调用。HanLP是用Java编写的,也可以用Python调用。IK分词和mmseg4j分词也是用Java编写,经常集成在搜索引擎Solr和Elasticsearch里。下面分别进行讲解这几个开源分词包。

Python的Jieba分词

Jieba 是目前最好的 Python 中文分词组件,它主要有以下 3 种特性:

支持 3 种分词模式:精确模式、全模式、搜索引擎模式

支持繁体分词

支持自定义词典

【代码6.14】 PrefixSpanJob.scala

# 导入 jiebaimport jiebaimport jieba.posseg as pseg #词性标注import jieba.analyse as anls #关键词提取

1.分词

可使用 jieba.cut 和 jieba.cut_for_search 方法进行分词,两者所返回的结构都是一个可迭代的 generator,可使用 for 循环来获得分词后得到的每一个词语(unicode),或者直接使用 jieba.lcut 以及 jieba.lcut_for_search 直接返回 list。其中:

jieba.cut 和 jieba.lcut 接受 3 个参数:

需要分词的字符串(unicode 或 UTF-8 字符串、GBK 字符串)

cut_all 参数:是否使用全模式,默认值为 False

HMM 参数:用来控制是否使用 HMM 模型,默认值为 True

jieba.cut_for_search 和 jieba.lcut_for_search 接受 2 个参数:

需要分词的字符串(unicode 或 UTF-8 字符串、GBK 字符串)

HMM 参数:用来控制是否使用 HMM 模型,默认值为 True

#尽量不要使用 GBK 字符串,可能无法预料地错误解码成 UTF-8

1)全模式和精确模式

# 全模式seg_list = jieba.cut("他来到上海交通大学", cut_all=True)print("【全模式】:" + "/ ".join(seg_list)) 【全模式】:他/ 来到/ 上海/ 上海交通大学/ 交通/ 大学# 精确模式seg_list = jieba.cut("他来到上海交通大学", cut_all=False)print("【精确模式】:" + "/ ".join(seg_list)) 【精确模式】:他/ 来到/ 上海交通大学type(seg_list)generator# 返回列表seg_list = jieba.lcut("他来到上海交通大学", cut_all=True)print("【返回列表】:{0}".format(seg_list))【返回列表】:['他', '来到', '上海', '上海交通大学', '交通', '大学']type(seg_list)list

2)搜索引擎模式

# 搜索引擎模式seg_list = jieba.cut_for_search("他毕业于上海交通大学机电系,后来在一机部上海电器科学研究所工作") print("【搜索引擎模式】:" + "/ ".join(seg_list))【搜索引擎模式】:他/ 毕业/ 于/ 上海/ 交通/ 大学/ 上海交通大学/ 机电/ 系/ ,/ 后来/ 在/ 一机部/ 上海/ 电器/ 科学/ 研究/ 研究所/ 工作# 返回列表seg_list = jieba.lcut_for_search("他毕业于上海交通大学机电系,后来在一机部上海电器科学研究所工作") print("【返回列表】:{0}".format(seg_list))【返回列表】:['他', '毕业', '于', '上海', '交通', '大学', '上海交通大学', '机电', '系', ',', '后来', '在', '一机部', '上海', '电器', '科学', '研究', '研究所', '工作']

2)HMM 模型

HMM 模型,即隐马尔可夫模型(Hidden Markov Model, HMM),是一种基于概率的统计分析模型,用来描述一个系统隐性状态的转移和隐性状态的表现概率。在 jieba 中,对于未登录到词库的词,使用了基于汉字成词能力的 HMM 模型和 Viterbi 算法,其大致原理是:

采用四个隐含状态,分别表示为单字成词,词组的开头,词组的中间,词组的结尾。通过标注好的分词训练集,可以得到 HMM 的各个参数,然后使用 Viterbi 算法来解释测试集,得到分词结果。

# 代码实现如下所示:# 未启用 HMMseg_list = jieba.cut("他来到了网易杭研大厦", HMM=False) #默认精确模式和启用 HMMprint("【未启用 HMM】:" + "/ ".join(seg_list)) 【未启用 HMM】:他/ 来到/ 了/ 网易/ 杭/ 研/ 大厦# 识别新词seg_list = jieba.cut("他来到了网易杭研大厦") #默认精确模式和启用 HMMprint("【识别新词】:" + "/ ".join(seg_list)) 【识别新词】:他/ 来到/ 了/ 网易/ 杭研/ 大厦

2.繁体字分词

jieba 还支持对繁体字进行分词。

# 繁体字文本ft_text = """人生易老天難老 歲歲重陽 今又重陽 戰地黃花分外香 壹年壹度秋風勁 不似春光 勝似春光 寥廓江天萬裏霜 """#全模式print("【全模式】:" + "/ ".join(jieba.cut(ft_text, cut_all=True))) 【全模式】:人生/ 易/ 老天/ 難/ 老/ / / 歲/ 歲/ 重/ 陽/ / / 今/ 又/ 重/ 陽/ / / 戰/ 地/ 黃/ 花/ 分外/ 香/ / / 壹年/ 壹/ 度/ 秋/ 風/ 勁/ / / 不似/ 春光/ / / 勝/ 似/ 春光/ / / 寥廓/ 江天/ 萬/ 裏/ 霜/ /# 精确模式print("【精确模式】:" + "/ ".join(jieba.cut(ft_text, cut_all=False))) 【精确模式】:人生/ 易/ 老天/ 難老/ / 歲/ 歲/ 重陽/ / 今/ 又/ 重陽/ / 戰地/ 黃/ 花/ 分外/ 香/ / 壹年/ 壹度/ 秋風勁/ / 不/ 似/ 春光/ / 勝似/ 春光/ / 寥廓/ 江天/ 萬/ 裏/ 霜/# 搜索引擎模式print("【搜索引擎模式】:" + "/ ".join(jieba.cut_for_search(ft_text))) 【搜索引擎模式】:人生/ 易/ 老天/ 難老/ / 歲/ 歲/ 重陽/ / 今/ 又/ 重陽/ / 戰地/ 黃/ 花/ 分外/ 香/ / 壹年/ 壹度/ 秋風勁/ / 不/ 似/ 春光/ / 勝似/ 春光/ / 寥廓/ 江天/ 萬/ 裏/ 霜/

3.添加自定义词典

开发者可以指定自定义词典,以便包含 jieba 词库里没有的词,词典格式如下:

词语 词频(可省略) 词性(可省略)

例如:

创新办 3 i云计算 5凱特琳 nz# 虽然 jieba 有新词识别能力,但自行添加新词可以保证更高的正确率。

1)载入词典

使用 jieba.load_userdict(file_name) 即可载入词典。

# file_name 为文件类对象或自定义词典的路径# 示例文本sample_text = "周大福是创新办主任也是云计算方面的专家"# 未加载词典print("【未加载词典】:" + '/ '.join(jieba.cut(sample_text)))【未加载词典】:周大福/ 是/ 创新/ 办/ 主任/ 也/ 是/ 云/ 计算/ 方面/ 的/ 专家# 载入词典jieba.load_userdict("userdict.txt")# 加载词典后print("【加载词典后】:" + '/ '.join(jieba.cut(sample_text)))【加载词典后】:周大福/ 是/ 创新办/ 主任/ 也/ 是/ 云计算/ 方面/ 的/ 专家

2)调整词典

使用 add_word(word, freq=None, tag=None) 和 del_word(word) 可在程序中动态修改词典。

jieba.add_word('石墨烯') #增加自定义词语jieba.add_word('凱特琳', freq=42, tag='nz') #设置词频和词性 jieba.del_word('自定义词') #删除自定义词语

使用 suggest_freq(segment, tune=True) 可调节单个词语的词频,使其能(或不能)被分出来。

# 调节词频前print("【调节词频前】:" + '/'.join(jieba.cut('如果放到post中将出错。', HMM=False)))【调节词频前】:如果/放到/post/中将/出错/。# 调节词频jieba.suggest_freq(('中', '将'), True)494# 调节词频后print("【调节词频后】:" + '/'.join(jieba.cut('如果放到post中将出错。', HMM=False)))【调节词频后】:如果/放到/post/中/将/出错/。

Jieba除了有分词功能外,还有词性标注,关键词提取等功能,我们在后面的章节会逐一讲到,接下来的自然语言处理系列十八我们看一下Java的HanLP分词。

总结

此文章有对应的配套视频,其它更多精彩文章请大家下载充电了么app,可获取千万免费好课和文章,配套新书教材请看陈敬雷新书:《分布式机器学习实战》(人工智能科学与技术丛书)

【新书介绍】

《分布式机器学习实战》(人工智能科学与技术丛书)【陈敬雷编著】【清华大学出版社】

新书特色:深入浅出,逐步讲解分布式机器学习的框架及应用配套个性化推荐算法系统、人脸识别、对话机器人等实战项目

【新书介绍视频】

分布式机器学习实战(人工智能科学与技术丛书)新书【陈敬雷】

视频特色:重点对新书进行介绍,最新前沿技术热点剖析,技术职业规划建议!听完此课你对人工智能领域将有一个崭新的技术视野!职业发展也将有更加清晰的认识!

【精品课程】

《分布式机器学习实战》大数据人工智能AI专家级精品课程

【免费体验视频】:

人工智能百万年薪成长路线/从Python到最新热点技术

从Python编程零基础小白入门到人工智能高级实战系列课

视频特色: 本系列专家级精品课有对应的配套书籍《分布式机器学习实战》,精品课和书籍可以互补式学习,彼此相互补充,大大提高了学习效率。本系列课和书籍是以分布式机器学习为主线,并对其依赖的大数据技术做了详细介绍,之后对目前主流的分布式机器学习框架和算法进行重点讲解,本系列课和书籍侧重实战,最后讲几个工业级的系统实战项目给大家。 课程核心内容有互联网公司大数据和人工智能那些事、大数据算法系统架构、大数据基础、Python编程、Java编程、Scala编程、Docker容器、Mahout分布式机器学习平台、Spark分布式机器学习平台、分布式深度学习框架和神经网络算法、自然语言处理算法、工业级完整系统实战(推荐算法系统实战、人脸识别实战、对话机器人实战)、就业/面试技巧/职业生涯规划/职业晋升指导等内容。

【充电了么公司介绍】

充电了么App是专注上班族职业培训充电学习的在线教育平台。

专注工作职业技能提升和学习,提高工作效率,带来经济效益!今天你充电了么?

充电了么官网

/

充电了么App官网下载地址

https://a./o/simple.jsp?pkgname=com.charged.app

功能特色如下:

【全行业职位】 - 专注职场上班族职业技能提升

覆盖所有行业和职位,不管你是上班族,高管,还是创业都有你要学习的视频和文章。其中大数据智能AI、区块链、深度学习是互联网一线工业级的实战经验。

除了专业技能学习,还有通用职场技能,比如企业管理、股权激励和设计、职业生涯规划、社交礼仪、沟通技巧、演讲技巧、开会技巧、发邮件技巧、工作压力如何放松、人脉关系等等,全方位提高你的专业水平和整体素质。

【牛人课堂】 - 学习牛人的工作经验

1.智能个性化引擎:

海量视频课程,覆盖所有行业、所有职位,通过不同行业职位的技能词偏好挖掘分析,智能匹配你目前职位最感兴趣的技能学习课程。

2.听课全网搜索

输入关键词搜索海量视频课程,应有尽有,总有适合你的课程。

3.听课播放详情

视频播放详情,除了播放当前视频,更有相关视频课程和文章阅读,对某个技能知识点强化,让你轻松成为某个领域的资深专家。

【精品阅读】 - 技能文章兴趣阅读

1.个性化阅读引擎:

千万级文章阅读,覆盖所有行业、所有职位,通过不同行业职位的技能词偏好挖掘分析,智能匹配你目前职位最感兴趣的技能学习文章。

2.阅读全网搜索

输入关键词搜索海量文章阅读,应有尽有,总有你感兴趣的技能学习文章。

【机器人老师】 - 个人提升趣味学习

基于搜索引擎和智能深度学习训练,为您打造更懂你的机器人老师,用自然语言和机器人老师聊天学习,寓教于乐,高效学习,快乐人生。

【精短课程】 - 高效学习知识

海量精短牛人课程,满足你的时间碎片化学习,快速提高某个技能知识点。

上一篇:自然语言处理系列十六》中文分词》分词工具实战》CRF++工具包实战

下一篇:自然语言处理系列十八》中文分词》分词工具实战》Java的HanLP分词

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。