1、引言
小鱼:小屌丝,你在干啥呢?
小屌丝:鱼哥,你看, 我的PPT写的 高大尚不。
小鱼:这有啥高大尚的啊,
小屌丝:你仔细看, 往下翻一页
小鱼:额。你这那是PPT,就是浴皇大帝、昂科旗等车系的测评吗。
小屌丝:别管内容了, 鱼哥,你就说,这个样式怎么样, 帅不帅气吧。
小鱼:嗯,样式嘛, 还可以的。
小屌丝:鱼哥,你这么淡定, 你的意思, 你也会?
小鱼:额… 我可没说, 休想套路我。
小屌丝:鱼哥,我这就要说到公道话了, 独乐乐不如众乐乐。
小鱼:有的时候,需要独乐乐。
小屌丝:鱼哥,别整没用的, 你就说分不分享吧?
小鱼:额… 这个… 你说啥?
小屌丝:我说,你把这个代码分享出来呗。
小鱼:你说分享什么啊?
小屌丝:分享词云生成器的代码
小鱼:分享什么代码啊?
小屌丝:去泡温泉…
小鱼:好嘞,早说不就完事了嘛。
2、代码实战
2.1 库介绍
说到词云的制作, 不得不提的第三方库, stylecloud:简洁易用的词云库
当然仅仅有stylecloud 还是不够的, 还需要一个库,即 jieba:中文分词库
所以, 今天我们就用stylecloud 和jieba来完成本次的代码实战。
接下来, 我们先了解 这两个库。
2.1.1 jieba
jieba: 中文分词库
1、运行原理
- 初始化:加载词典文件,获取每个词语和它出现的词数
- 切分短语:利用正则,将文本切分为一个个语句,之后对语句进行分词
- 构建DAG:通过字符串匹配,构建所有可能的分词情况的有向无环图,也就是DAG
- 构建节点最大路径概率,以及结束位置:计算每个汉字节点到语句结尾的所有路径中的最大概率,并记下最大概率时在DAG中对应的该汉字成词的结束位置。
- 构建切分组合:根据节点路径,得到词语切分的结果,也就是分词结果。
- HMM新词处理:对于新词,也就是jieba词典中没有的词语,我们通过统计方法来处理,jieba中采用了HMM(隐马尔科夫模型)来处理。
- 返回分词结果:通过yield将上面步骤中切分好的词语逐个返回。yield相对于list,可以节约存储空间。
2、主要模式
- 精确模式:把文本精确的切分开,不存在冗冗余单词
- 全模式:把文本中所有可能的词语都扫描出来,有冗余
- 搜索引擎模式:在精确模式基础上,对长词再次切分
3、主要功能
- jieba.cut 方法接受四个输入参数:
- 需要分词的字符串;
- cut_all 参数用来控制是否采用全模式;
- HMM 参数用来控制是否使用 HMM 模型;
- use_paddle 参数用来控制是否使用paddle模式下的分词模式,
- paddle模式采用延迟加载
- 方式,通过enable_paddle接口安装paddlepaddle-tiny,并且import相关代码;
- jieba.cut_for_search 方法接受两个参数:
- 需要分词的字符串;
- 是否使用 HMM 模型。
- 该方法适合用于搜索引擎构建倒排索引的分词,粒度比较细
- jieba.cut 以及 jieba.cut_for_search 返回的结构都是一个可迭代的 generator,可以使用 for 循环来获得分词后得到的每一个词语(unicode),或者用 jiieba.lcut 以及 jieba.lcut_for_search 直接返回 list
- jieba.Tokenizer(dictionary=DEFAULT_DICT) 新建自定义分词器,可用于同时使用不同词典。
- jieba.dt 为默认分词器,所有全局分词相关函数都是该分词器的映射。
2.1.2 stylecloud
关于词云生成工具, 常用的无非这3种:
- pyecharts
- 简单易用;
- 上手快;
- 不够美观;
- wordcloud
- 使用频次最高;
- 使用最广泛;
- stylecloud
- 简单易用
- 最接近完美
接下来,我们就使用 sytlecloud第三方库,看看它完美到什么程度。
2.2 库安装
涉及到第三方库,肯定就需要安装
老规矩,pip 安装
pip install jieba pip install stylecloud
然后就是等待着安装。
其它安装方式,直接看这两篇:
2.2 代码实战
代码示例
# -*- coding:utf-8 -*- # @Time : 2023-01-10 # @Author : Carl_DJ ''' 实现功能: 词云生成器 ''' import json import stylecloud import codecs import jieba from collections import Counter #过滤掉高频出现的词汇 passwords = set() #读取词汇文档 content = [line.strip() for line in open('./data/passwords.txt', 'r',encoding='utf8').readlines()] passwords.update(content) #获取文档词汇, 并截取长度为3个 def make_words(txt): make_list = jieba.cut(txt) c = Counter() words_list = [] #获取词汇文本 for x in make_list: #长度为3,超过截取 if len(x) == 3 and x !='\r\n': c[x] += 1 words_list.append(x) for k,v in c.most_common(50): if k not in passwords: # print(f'{k,v}') #组合词云内容 return " ".join(words_list) #读取中大型suv测评.txt内容 with codecs.open('./data/中大型suv测评.txt','r','utf8') as f: #格式需要utf8 否则会报错 txt = f.read() # words_txt = make_words(txt) #设置词云展示的样式,字体,生成文件名称等, stylecloud.gen_stylecloud(text=words_txt,custom_stopwords=content, background_color='#1A1A1A', colors=['#dd4444', '#fec42c', '#fac858'], max_font_size=100, output_name='xt6测评.jpg', font_path="C:/Windows/Fonts/FZSTK.TTF" )
结果展示
注:
这里需要准备两个文件
- password.txt : 过滤文本中出现太多次数的词汇;
- suv测评.txt:词云的主要显示的文本内容;
文本内容示例:
这里强调一点:
- 文本的内容,你可以一行写很多字,
- 但是,为了词云展示的内容更丰富, 列数,一定要多。
当然,文档内容, 也可以是下载的小说,或者你自己写的任何内容。
3、总结
看到这里, 今天的分享就结束了。
回头看一下,
其实词云生成器,并不难。
主要就是对 jieba、stylecloud 这两个库的使用。
这里我仅仅列举了 stylecloud 第三方库,
当然,如果你有兴趣,也可以使用 pyecharts、 wordcloud ,看看生成的词云如何。
也就当是你自己的练手了。
好了,就唠叨这里了。
我是小鱼:
- 51认证讲师;
- 金牌面试官;
关注小鱼,带你学习更多更有趣的python知识。
当然,
- 如果你想晋升自己的技能,;
- 如果你想提升自己的面试成功率;
- 如果你现在处在职业迷茫期,想重新规划职业生涯;
都可以找小鱼聊聊的。
CSDN 私信留言, 或者扫描小鱼主页的二维码,都可以找到的。