十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
本篇内容主要讲解“Python如何制作词云”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python如何制作词云”吧!
我们提供的服务有:成都做网站、成都网站制作、微信公众号开发、网站优化、网站认证、兴安ssl等。为成百上千家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的兴安网站制作公司
效果如下:
(词云--出现频率越多的词,字体越大 )
1、安装可视化库
pip3 install matplotlib
3、安装 “结巴” 库, 这个名字起的真接地气, 给开发者点个赞
pip3 install jieba
这个库用来解析中文,把一句话解析成一个个的词,
我们中文不像英文每个词之间有空格。需要根据语义分析拆分成词组
我们用《剑雨》的一段对话举例:
import jieba #引入结巴库 str='师傅,他为何说禅机已到,\ 佛祖点化世人讲究机缘,\ 禅机一过缘即灭矣,\ 而禅机未到虽点亦不中 我愿化身石桥又是何意' print(str) # 解析拆分词组 lcut的方法 words = jieba.lcut(str) print(words)
效果如下:
( 把完整的句子拆分成一个个的词,看着断断续续,可能这就是结巴的由来吧,【拆词】最难的这部分,结巴库都做好了,这也是python强大的原因吧,各式各样的库都有了 )
网上下载txt格式的《西游记》,
下载完成后转换成utf-8格式再保存一下。
转化方法:记事本另存为的时候,选择编码格式UTF-8
format 格式化输出:
#列标题 format print("{0:<5}{1:<8}{2:<5}".format('序号','词语', '频率'))
{0:<5} :
0 表示序号:第一个参数,第一列,
< 左对齐, > 右对齐
5 代表宽度
任务一:统计西游记里面出现频率最高的10个词:
后面为了方便,我们把这个叫主代码。
#引入结巴库 import jieba #open 内置函数 不需要引用 直接使用 #开打文件西游记和python 文件放到同一个目录,可直接引用不需要路径 f = open('西游记.txt', 'r' ,encoding='utf-8' ) # 查看文件的编码格式 print('文件的编码格式:'+f.encoding) #读取文件 txt = f.read() #关闭文件,良好的习惯 f.close() # 使用精确模式对文本进行分词 # 使用结巴库把西游拆分成一个个的词组 words = jieba.lcut(txt) # 通过键值对的形式存储词语及其出现的次数 # 大括号表示 python的字典类型对应, # 键值对 key:value1 ,类似java的map对象和list counts = {} chiyun = [] for word in words: # == 1 单个词语不计算在内 if len(word) < 2 : continue else: # 遍历所有词语,每出现一次其对应的值加 1 counts[word] = counts.get(word, 0) + 1 #将键值对转换成列表 items = list(counts.items()) # 根据词语出现的次数进行从大到小排序 items.sort(key=lambda x: x[1], reverse=True) #列标题 format print("{0:<5}{1:<8}{2:<5}".format('序号','词语', '频率')) #需要显示的范围 10即显示前10个,0到9 for i in range(10): word, count = items[i] print("{0:<5}{1:<8}{2:>5}".format(i+1,word, count))
效果如下:
还是没有观音, 放出前100,200,300 到500在看:
终于出现了,在349位,重复61次,
应该是有哪里问题,直觉判断不止61次重复
预知后事如何,请听下回分解,‘下回分解’排第二合理。
悟空每次打妖怪都要吹下牛,在洞口报个名:我是五百年前大闹天宫的齐天大圣,这两个词出现在前10 合理。
我们在梳理下流程:
注意下:结巴库不是必须,主要是用来把句子拆分成词,如果你已经有统计好的词组,可直接用词云显示。
试一个简单的:我们手工创建个词组,直接用词云显示出来。即绕开结巴库了
from wordcloud import WordCloud # python的可视化库,也是二级考试推荐的可视化库 import matplotlib.pyplot as plt str=['齐天大圣','大圣','大圣','八戒','嫦娥'] #数组里面添加内容 str.append('玉兔') str.append('女儿国') str.append('牛魔王') str.append('大圣') str.append('土地公公') str.append('小神仙') str.append('八戒') print(str) #join 函数 用斜杆拼接词组mask =maskph, #这里一定要join拼接一下 转成字符串 text_cut = '/'.join(str) #看一下连接后的样子 #关键点 text_cut 是词云要处理的内容 print(text_cut) wordcloud = WordCloud( background_color='white',font_path = 'msyh.ttc', width=1000, height=860, margin=2).generate(text_cut) # 显示图片 plt.imshow(wordcloud) plt.axis('off') plt.show()
可观察下效果图:主要join后的输出,用/拼接成了一个字符串:
效果图:
(大圣和八戒出现次数多,字体最大)
先把全代码放上,后面实例在解析:
这段可先略过,下面直接看效果图:
#引入结巴库 import jieba #词云库 from wordcloud import WordCloud # python的可视化库,也是二级考试推荐的可视化库 import matplotlib.pyplot as plt from PIL import Image #处理图片的 #矩阵 好像也是协助处理图片的 import numpy as np #open 内置函数 不需要引用 直接使用 #开打文件西游记和python 文件放到同一个目录,可直接引用不需要路径 f = open('西游记.txt', 'r' ,encoding='utf-8' ) # 查看文件的编码格式 print('文件的编码格式:'+f.encoding) #读取文件 txt = f.read() #关闭文件,良好的习惯 f.close() # 使用精确模式对文本进行分词 # 使用结巴库把西游拆分成一个个的词组 words = jieba.lcut(txt) # 通过键值对的形式存储词语及其出现的次数 # 大括号表示 python的字典类型对应, # 键值对 key:value1 ,类似java的map对象和list counts = {} #数组对象 用来接收需要传递给词云的内容 chiyun = [] for word in words: # == 1 单个词语不计算在内 if len(word) < 2 : continue else: # 遍历所有词语,每出现一次其对应的值加 1 counts[word] = counts.get(word, 0) + 1 #将键值对转换成列表 items = list(counts.items()) # 根据词语出现的次数进行从大到小排序 items.sort(key=lambda x: x[1], reverse=True) #列标题 format print("{0:<5}{1:<8}{2:<5}".format('序号','词语', '频率')) #需要显示的范围 10即显示前10个,0到9 for i in range(80): word, count = items[i] print("{0:<5}{1:<8}{2:>5}".format(i+1,word, count)) chiyun.append(word) #print(chiyun) #加载图片信息 maskph = np.array(Image.open('山东舰航母.png')) #join 函数 用斜杆拼接词组 text_cut = '/'.join(chiyun) wordcloud = WordCloud(mask =maskph, background_color='white',font_path = 'msyh.ttc', width=1000, height=860, margin=2).generate(text_cut) # 显示图片 plt.imshow(wordcloud) plt.axis('off') plt.show()
效果1:全部显示
即:结巴库处理好的词组,不做限制,全部送给词云显示:
显示二:限定内容显示
比如改成 只输出前20个词:(显示密度会稀好多)
即:结巴库处理好后,取前20个高频词传给词云显示:
再试一下前20的 四个字的词:
到此,相信大家对“Python如何制作词云”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!