目录
分词是自然语言处理(NLP)中最底层、最基本的模块,分词精度的好坏将直接影响文本分析的结果。有好多大型的分词系统(比如北京理工大学张华平博士开发的中文分词系统:ICTCLAS,是一个很优秀的分词系统),这里介绍Python中使用的小巧、强大的jieba中文分词。
首先获得jieba包:
C:\Users\26015> pip install jieba
下载后,就能加载使用了。
1、jieba中文分词的三种常用模式
(1) 精确模式:试图将句子最精确地切开,适合文本分析;
(2) 全模式:把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义问题;
(3) 搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
注:同时结巴分词支持繁体分词和自定义字典方法。
首先需要导入模块:import jieba
(1)、精确模式
>>> test = '小天于2014年毕业于北京大学'
>>> cut1 = jie.cut(test)
>>> cut1 = jieba.cut(test)
>>> type(cut1)
<class 'generator'>
>>> print('精确模式分词结果:',' '.join(cut1))
精确模式分词结果:小天于 2014 年 毕业 于 北京大学
这里的' '.join()函数指用空格分开cut1里面的元素,是个字符串连接函数。
举个小小的例子予以说明;
>>> a1 = 'abc'
>>> a2 = 'def'
>>> '/'.join(a1+a2)
'a/b/c/d/e/f'
如果加一个参数cut_all = False
>>> cut1 = jieba.cut(test,cut_all = False)
>>> print(' '.join(cut1))
小天于 2014 年 毕业 于 北京大学
可以看出cut_all = False这个参数加与没加都一样,它是个默认参数。
(2)、全模式
>>> cut1 = jieba.cut(test,cut_all = True)
>>> print('全模式分词结果:',' '.join(cut1))
全模式分词结果: 小 天 于 2014 年 毕业 于 北京 北京大学 大学
显然,全模式不管分词后意思会不会有歧义,只管快速分出所有可能的词,不适合做文本分析。
(3)、搜索引擎模式
>>> cut1 = jieba.cut_for_search(test)
>>> print('搜索引擎模式分词结果:',' '.join(cut1))
搜索引擎模式分词结果: 小天于 2014 年 毕业 于 北京 大学 北京大学
搜索引擎模式也会给出所有可能的分词结果,但是搜索引擎模式对于词典中不存在的词,比如一些很少见、新词,却能给出正确的分词结果。
2、简单文本分析朱自清写《匆匆》的情感状态
这是网上下载的《匆匆》原文:
由于Python不像R语言那样强大的可视化功能,R中还能画个词云什么的。所以,这里对《匆匆》里面每段话统计词频,取每段话词频最高的前五个词。导入必要的分次及词频统计包:
import jieba
import jieba.analyse
发现开始时候将朱自清这个大作家分开了,应该是一个完整的人名词。就要加入自定义词典:自己新建一个add_dict.txt文档,里面写上朱自清即可。以后遇到类似需要人工加词典,只需要每行放一个词即可。
注意:add_dict.txt默认ANSI编码,需要另存为utf-8编码格式;
import jieba
import jieba.analyse
path1 = 'D:\\Program Files\\python\\codes\\匆匆.txt'
#添加自定义词典,解决默认词典没有特殊词的问题
path2 = 'D:\\Program Files\\python\\codes\\add_dict.txt'
jieba.load_userdict (path2)
a = open(path1,'r')
dat = a.readline()
while(dat):
dat = jieba.cut(dat,cut_all = False)
print('/'.join(dat))
dat = a.readline()
a.close()
分词结果
下面统计词频
import jieba
import jieba.analyse
path1 = 'D:\\Program Files\\python\\codes\\匆匆.txt'
#添加自定义词典,解决默认词典没有特殊词的问题
path2 = 'D:\\Program Files\\python\\codes\\add_dict.txt'
jieba.load_userdict (path2)
a = open(path1,'r')
dat = a.readline()
while(dat):
#提取前topK = n个关键词
tags = jieba.analyse.extract_tags(dat,topK = 5)
print(' '.join(tags))
dat = a.readline()
a.close()
分词并提取词语结果:
匆匆
朱自清
时候 一去不复返 杨柳 桃花 燕子
日子潸潸 里算 八千多 流里
过去 太阳 日子 叹息 匆匆
赤裸裸 痕迹 徘徊 匆匆 罢了
一去不复返 聪明 日子 为什么 告诉
给我们反映的信息就是:
日子 过去 一去不复返 罢了
情感状态:
《匆匆》表达了作者对时间过去的感叹与无奈!
Python的jieba中文分词就简单介绍到这里,关于Python中基于jieba分词在文本分类中的应用会在后面慢慢介绍!每次学习一点点,学的轻松,写的轻松!