结巴分词(自然语言处理之中文分词器)
jieba分词算法使用了基于前缀词典实现高效的词图扫描,生成句子中汉字所有可能生成词情况所构成的有向无环图(DAG), 再采用了动态规划查找最大概率路径,找出基于词频的最大切分组合,对于未登录词,采用了基于汉字成词能力的HMM模型,使用了Viterbi算法。
jieba分词支持三种分词模式:
1. 精确模式, 试图将句子最精确地切开,适合文本分析:
2. 全模式,把句子中所有的可以成词的词语都扫描出来,速度非常快,但是不能解决歧义;
3. 搜索引擎模式,在精确模式的基础上,对长词再词切分,提高召回率,适合用于搜索引擎分词。
一 结巴分词的安装
pip3 install jieba
二 结巴分词的主要功能
![](http://img.e-com-net.com/image/info10/b0705134aa0f4576b01d1d603a2f42eb.gif)
1. jieba.cut:该方法接受三个输入参数:
参数1:需要分词的字符串;
参数2:cut_all参数用来控制是否采用全模式,默认为精确模式;
cut_all=True 全模式
cut_all=false 精确(默认)模式
参数3:HMM参数用来控制是否适用HMM模型
![](http://img.e-com-net.com/image/info10/9a821f921e184b538468bd5c3cc8cf72.gif)
2. jieba.cut_for_search:该方法接受两个参数:
参数1:需要分词的字符串;
参数2:是否使用HMM模型,
该方法适用于搜索引擎构建倒排索引的分词,粒度比较细。
3. jieba.cut 以及jieba.cut_for_search
返回的结构都是可以得到的generator(生成器)
4. jieb.lcut 以及 jieba.lcut_for_search
直接返回list
5.jieba.Tokenizer(dictionary=DEFUALT_DICT)
新建自定义分词器,
可用于同时使用不同字典,
jieba.dt为默认分词器,所有全局分词相关函数都是该分词器的映射。
三 结巴分词的三种模式
import jieba
text='赵丽颖主演的正午阳光剧,知否知否应是绿肥红瘦'
1 全模式 cut_all=True
![](http://img.e-com-net.com/image/info10/21fe74164b6842139b4dd4c089cb73a4.gif)
seq_list=jieba.cut(text,cut_all=True)
print(seq_list) #
print(list(seq_list))
'''
['赵', '丽', '颖', '主演', '的', '正午', '阳光', '剧', '', '', '知', '否', '知', '否', '应', '是', '绿肥', '绿肥红瘦']
'''
![](http://img.e-com-net.com/image/info10/7b8420d1f6174335b3786006af3fd72d.gif)
2 精确模式 (默认模式) cut_all =False
![](http://img.e-com-net.com/image/info10/e19d2565e90640b790611c94378577e0.gif)
# 02精确模式
seq_list=jieba.cut(text,cut_all=False)
print(list(seq_list))
'''
['赵丽颖', '主演', '的', '正午', '阳光', '剧', ',', '知否', '知否', '应', '是', '绿肥红瘦']
'''
![](http://img.e-com-net.com/image/info10/91f2feb51c8243be91349c84cab279d4.gif)
3 搜索引擎模式 cut_for_search
seq_list=jieba.cut_for_search(text,)
print(list(seq_list))
'''
['赵丽颖', '主演', '的', '正午', '阳光', '剧', ',', '知否', '知否', '应', '是', '绿肥', '绿肥红瘦']
'''
四 自定义分词器(jieba.Tokenizer)
1 创建词典内容的格式
一个词语占一行(分三部分)
格式: 词语 词频 词性
如:张三 5
李四 10 eng
2 自定义词典的导入(load_userdict)
![](http://img.e-com-net.com/image/info10/23c755a8fe554281a877af172bfd47a2.gif)
text='赵丽颖主演的正午阳光剧,知否知否应是绿肥红瘦'自定义词典
jieba.load_userdict('自定义词典.txt')
sep_list=jieba.lcut(text)
print('userdict>>>',sep_list)
![](http://img.e-com-net.com/image/info10/93896f26bb2c4bf1acaac2ed19834413.gif)
userdict>>> ['赵丽颖', '主演', '的', '正午', '阳光剧', ',', '知否', '知否', '应是', '绿肥红瘦']
五 利用jieba 进行关键词的抽取
1 基于TF-IDF算法的关键词抽取
详解自然语言处理之TF-IDF模型和python实现
2 python 实现关键提取
![](http://img.e-com-net.com/image/info10/766eb806821e4f8098b9d1d8cc6714ee.gif)
jieba.analyse.extract_tags(text,topK=20,withWeight=False,allowPOS=())
'''
text:为待提取的文本;
topK:返回几个TF/IDF权重最大的关键字,默认值为20;
withWeight:是否一并返回关键词权重值,默认False;
'''
jieba.analyse.TFIDF(idf_path=None) #新建tf-idf实例,idf_path为IDF实例
![](http://img.e-com-net.com/image/info10/1e4bec31025d47789fcc79fe9f5416ee.gif)
五 使用结巴的词云实例
1 数据准备
文档:
![](http://img.e-com-net.com/image/info10/cbed11b4337d4c76b662fe0b883c1282.gif)
死了都要爱.txt
![](http://img.e-com-net.com/image/info10/2df1d37cbff54a8aa63f86df12799295.gif)
dream ispossible.txt
图片:(红心.jpg)
![](http://img.e-com-net.com/image/info10/8bc31cbee5ed4d41a159b580d5a7dcb9.gif)
# 数据获取
with open('死了都要爱.txt','r',encoding='utf8')as f:
text=f.read()with open('dream is possible.txt','r',encoding='utf8')as f:
text=f.read()
图片获取
mask=np.array(Image.open('红心.jpg'))
![](http://img.e-com-net.com/image/info10/a2ebce0e1835438d95c6b2a1030e532b.gif)
2 数据清洗
屏蔽不需要的数据和分词
# 数据清洗屏蔽死了都要爱
STOPWORDS.add('死了都要爱')
sep_list=jieba.lcut(text,cut_all=False)
sep_list=" ".join(sep_list) #转为字符串
自定义画布
![](http://img.e-com-net.com/image/info10/adc8c8be1d4544039d03c04ccf5be8db.gif)
wc=WordCloud(
font_path=font,#使用的字体库
margin=2,
mask=mask,#背景图片
background_color='white', #背景颜色
max_font_size=25,
max_words=200,
stopwords=STOPWORDS, #屏蔽的内容
)
![](http://img.e-com-net.com/image/info10/dc14338664fb42df857edbdc9456d013.gif)
生成词语,保存图片
wc.generate(text) #制作词云
wc.to_file('新增图片.jpg') #保存到当地文件
3 数据展示
plt.imshow(wc,interpolation='bilinear')
plt.axis('off')
plt.show()
完整代码和效果展示
![](http://img.e-com-net.com/image/info10/1a2babdb43e8439ab280185f7d126693.gif)
完整代码
图片一(未分词):
图片二(分词效果)