赵走x博客
网站访问量:151434
首页
书籍
软件
工具
古诗词
搜索
登录
24、nonlocal
23、Python functools.wraps 深入理解
21、Image.rotate旋转90度图片被截取了
20、python的__get__方法看这一篇就足够了
19、结巴分词(自然语言处理之中文分词器)
18、virtualenv
17、Python string 去掉标点符号 最佳实践
16、python 字符串相似度
15、StringIO和BytesIO
14、基于Python __dict__与dir()的区别详解
13、 set()去重的底层原理
12、顺序表的原理与python中的list类型
11、psutil实现系统监控
10、NSQ
9、utf-8的中文是一个汉字占三个字节长度吗?
8、supervisor+gunicorn部署python web项目
7、socket编程
6、async
5、Python的共享经济
4、Python 内存分配时的小秘密
3、Python中的“特权种族”是什么?
2、装饰器
1、序列化与反序列化
19、结巴分词(自然语言处理之中文分词器)
资源编号:76602
Python
Python 查缺补漏
热度:122
来源:https://www.cnblogs.com/angle6-liu/p/10223957.html
jieba分词算法使用了基于前缀词典实现高效的词图扫描,生成句子中汉字所有可能生成词情况所构成的有向无环图(DAG), 再采用了动态规划查找最大概率路径,找出基于词频的最大切分组合,对于未登录词,采用了基于汉字成词能力的HMM模型,使用了Viterbi算法。 jieba分词支持三种分词模式: 1. 精确模式, 试图将句子最精确地切开,适合文本分析: 2. 全模式,把句子中所有的可以成词的词语都扫描出来,速度非常快,但是不能解决歧义; 3. 搜索引擎模式,在精确模式的基础上,对长词再词切分,提高召回率,适合用于搜索引擎分词。 # 一 结巴分词的安装 ``` pip3 install jieba ``` # 二 结巴分词的主要功能 ``` 1. jieba.cut:该方法接受三个输入参数: 参数1:需要分词的字符串; 参数2:cut_all参数用来控制是否采用全模式,默认为精确模式; cut_all=True 全模式 cut_all=false 精确(默认)模式 参数3:HMM参数用来控制是否适用HMM模型 ``` ``` 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 ``` seq_list=jieba.cut(text,cut_all=True) print(seq_list) #
print(list(seq_list)) ''' ['赵', '丽', '颖', '主演', '的', '正午', '阳光', '剧', '', '', '知', '否', '知', '否', '应', '是', '绿肥', '绿肥红瘦'] ''' ``` ### 2 精确模式 (默认模式) cut_all =False ``` # 02精确模式 seq_list=jieba.cut(text,cut_all=False) print(list(seq_list)) ''' ['赵丽颖', '主演', '的', '正午', '阳光', '剧', ',', '知否', '知否', '应', '是', '绿肥红瘦'] ''' ``` ### 3 搜索引擎模式 cut_for_search ``` seq_list=jieba.cut_for_search(text,) print(list(seq_list)) ''' ['赵丽颖', '主演', '的', '正午', '阳光', '剧', ',', '知否', '知否', '应', '是', '绿肥', '绿肥红瘦'] ''' ``` # 四 自定义分词器(jieba.Tokenizer) ### 1 创建词典内容的格式 ``` 一个词语占一行(分三部分) 格式: 词语 词频 词性 如:张三 5 李四 10 eng ```  ### 2 自定义词典的导入(load_userdict) ```python text='赵丽颖主演的正午阳光剧,知否知否应是绿肥红瘦' # 自定义词典 jieba.load_userdict('自定义词典.txt') sep_list=jieba.lcut(text) print('userdict>>>',sep_list) ``` ``` userdict>>> ['赵丽颖', '主演', '的', '正午', '阳光剧', ',', '知否', '知否', '应是', '绿肥红瘦'] ``` # 五 利用jieba 进行关键词的抽取 ### 1 基于TF-IDF算法的关键词抽取 [详解自然语言处理之TF-IDF模型和python实现](http://mp.weixin.qq.com/s?__biz=MzIwNzYzNjA1OQ==&mid=2247484212&idx=1&sn=8a1f402fcdbf5c982c71859ce7e08c25&chksm=970e1000a079991611e03948ba0a74e6e45f6c2d64dcc0d65d9848d266ef751a0cb6a48864d2&scene=21#wechat_redirect) ### 2 python 实现关键提取 ``` 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实例 ``` # 五 使用结巴的词云实例 ### 1 数据准备 文档: 死了都要爱.txt ``` 死了都要爱 不淋漓尽致不痛快 感情多深只有这样 才足够表白 死了都要爱 不哭到微笑不痛快 宇宙毁灭心还在 把每天当成是末日来相爱 一分一秒都美到泪水掉下来 不理会别人是看好或看坏 只要你勇敢跟我来 爱不用刻意安排 凭感觉去亲吻相拥就会很愉快 享受现在别一开怀就怕受伤害 许多奇迹我们相信才会存在 死了都要爱 不淋漓尽致不痛快 感情多深只有这样才足够表白 死了都要爱 不哭到微笑不痛快 宇宙毁灭心还在 穷途末路都要爱 不极度浪漫不痛快 发会雪白土会掩埋 思念不腐坏 到绝路都要爱 不天荒地老不痛快 不怕热爱变火海 爱到沸腾才精采 ``` dream ispossible.txt ``` Dream it possible I will run, I will climb, I will soar. I'm undefeated Jumping out of my skin, pull the chord Yeah I believe it The past, is everything we were don't make us who we are so I'll dream, until I make it real, and all I see is stars It's not until you fall that you fly When you dreams come alive you're unstoppable take a shot, chase the sun, find the beautiful We will glow in the dark turning dust to gold And we'll dream it possible I will chase, I will reach, I will fly Until I'm breaking, until I'm breaking Out of my cage, like a bird in the night I know I'm changing, I know I'm changing In,into something big, better than before And if it takes, takes a thousand lives Then it's worth fighting for ``` 图片:(红心.jpg)  ``` # 数据获取 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')) ``` ### 2 数据清洗 屏蔽不需要的数据和分词 ``` # 数据清洗 # 屏蔽死了都要爱 STOPWORDS.add('死了都要爱') sep_list=jieba.lcut(text,cut_all=False) sep_list=" ".join(sep_list) #转为字符串 ``` 自定义画布 ``` wc=WordCloud( font_path=font,#使用的字体库 margin=2, mask=mask,#背景图片 background_color='white', #背景颜色 max_font_size=25, max_words=200, stopwords=STOPWORDS, #屏蔽的内容 ) ``` 生成词语,保存图片 ``` wc.generate(text) #制作词云 wc.to_file('新增图片.jpg') #保存到当地文件 ``` ### 3 数据展示 ``` plt.imshow(wc,interpolation='bilinear') plt.axis('off') plt.show() ``` 完整代码和效果展示 ``` from wordcloud import WordCloud import matplotlib.pyplot as plt import numpy as np from PIL import Image import jieba # 数据获取 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')) # 数据清洗 # 屏蔽死了都要爱 # STOPWORDS.add('死了都要爱') font=r'C:\Windows\Fonts\simhei.ttf' sep_list=jieba.lcut(text,cut_all=False) sep_list=" ".join(sep_list) wc=WordCloud( font_path=font,#使用的字体库 margin=2, mask=mask,#背景图片 background_color='white', #背景颜色 max_font_size=200, # min_font_size=1, max_words=200, # stopwords=STOPWORDS, #屏蔽的内容 ) wc.generate(sep_list) #制作词云 wc.to_file('关羽新增.jpg') #保存到当地文件 # 图片展示 plt.imshow(wc,interpolation='bilinear') plt.axis('off') plt.show() ``` 图片一(未分词):  图片二(分词效果)   推荐文章 [https://blog.csdn.net/gzmfxy/article/details/78994396](https://blog.csdn.net/gzmfxy/article/details/78994396)