您的位置:首页 > 编程语言 > Python开发

python运用jieba和wordcloud库简单实现对QQ聊天记录制作词云

2017-04-07 16:41 771 查看
首先说一下什么是词云,顾名思义就是很多个单词,然后通过出现的频率或者比重之类的标准汇聚成一个云朵的样子嘛

就比如这样的


那其实呢现在网上已经有很多能自动生成词云的工具了,比如Wordle,Tagxedo等等

那么呢其实用python也能实现这样的效果,我们通过jieba库和wordcloud库也能十分轻松的完成词云的构建

前期工作:安装Anaconda平台和安装jieba库和wordcloud库

Anaconda平台是使用python进行数据分析的一个集成平台,里面已经帮你安装好了许多常用的库,并且环境变量路径啥的都不用自己配置了,非常方便,可自行百度(安装基本一直下一步就可以了

安装完成呢可以看见有

第一个的Anaconda
Prompt就和Windows的cmd,Linux的shell是差不多的,新手最常用的就是conda命令,比如conda list 查看安装了哪些package,conda install xxx  安装第三方库,和pip的用法是雷同的,至于更多的想了解可以自行搜索

那么因为环境变量等等这个平台都帮我们配置好了,所以我们可以直接在pycharm上呢选取它的解释器就可以了,和你原来安装的是不冲突的

下一步呢直接进入Anaconda Prompt,通过pip命令来安装jieba库(不知道为啥,这里我使用conda无法下载



同样的我们继续安装wordcloud库



基本上这是所有windows用户安装都会遇到的问题,这时候怎么办呢(当然是弃坑保平安啊喂

不用着急,有一个非常简单的办法呢就是去到 http://www.lfd.uci.edu/~gohlke/pythonlibs/#wordcloud  这个库的官网下载对应版本的whl,然后进入你存放whl目录下再通过pip安装就能完美解决了



这样呢,我们就经历千辛万苦把前期工作做完了,下一步就是编写代码了

直接show me the code!

import matplotlib.pyplot as plt
from wordcloud import WordCloud
import jieba

text = open('1.txt','r',encoding = 'utf-8').read()
word_jieba = jieba.cut(text,cut_all=True)
word_split = " ".join(word_jieba)
my_wordclud = WordCloud(max_words=100,width = 1600,height=800).generate(word_split)
plt.imshow(my_wordclud)
plt.axis("off")
plt.show()

什么?就这么短?没错。。。就是这么强悍,分析下代码呢

首先读入txt文件,而我们对QQ聊天记录进行导出的话里面有一些文字编码是gbk格式的,一般来说在jieba的cut方法中是不推荐直接读入gbk格式,很容易造成未知的错误,所以这里我们读入的同时使用utf-8编码来读

第6-7行就是对输入的字符串进行分词和空格来间隔,jieba.cut()方法就是重要的分词函数了,接受三个参数,分别是需要分词的字符串,是否采用全模式以及是否使用HMM模型,具体的可以自行查阅资料

第8行就是对已经分隔好的字符生成词云啦,里面WordCloud()构造函数有多达22个重载,可以供使用者实现很多的功能,比较常见的有

#my_wordcloud = WordCloud().generate(wl_space_split) 默认构造函数
my_wordcloud = WordCloud(
background_color='white',    # 设置背景颜色
mask = abel_mask,        # 设置背景图片
max_words = 200,            # 设置最大现实的字数
stopwords = STOPWORDS,        # 设置停用词
font_path = C:/Users/Windows/fonts/simkai.ttf',# 设置字体格式,如不设置显示不了中文
max_font_size = 50,            # 设置字体最大值
random_state = 30,            # 设置有多少种随机生成状态,即有多少种配色方案
scale=.5
).generate(wl_space_split)


而最后9-11行呢就是用pyplot展示云图了

将你导出的QQ聊天记录放在项目的根目录下,然后运行,等1分钟左右属于你的聊天记录的云图也就出来了!


23333在毒奶粉一个交流群的云图

补充:可能会有同学在运行代码的时候出来的时候是没有中文的,原因是因为wordcloud的云库中默认的ttf是不支持中文的,我们可以通过进入自己的C盘/Windows/Fonts中找到一个支持中文的ttf,然后打开wordcloud.py源代码,将


最后的参数改为自己修改的ttf,或者在生成云图里面的构造函数自己定义一个新的ttf也是滋瓷的

另外呢如果是QQ的聊天记录导出,查看的时候会有很多行都是记录那个人说话的时间,或者是表情图片,那么我们可以通过自己写一个小过滤器呢,去掉记录时间的记录和一些不必要的纯表情

#newtext = []
for word in open('sb.txt',encoding='utf-8'):
tmp = word[0:4]
if(tmp == "2016" or tmp == "2017"):
continue
tmp = word[0:2]
if(tmp[0]=='['):
continue
newtext.append(word)

with open('ssb.txt','w',encoding='utf-8') as f:
for i in newtext :
f.write(i)


最后呢我们可以留意到其实这样生成出来的云图会有很多不必要的词汇,比如上面云图中的“那样”,“一个”,“现在”,“不是” 这样的没有意义的词汇,怎么实现关键词的目的性选择呢?值得思考思考和以后继续改进这个小程序

感谢以下参考材料

Python 3.6 模块安装“error: Microsoft Visual C++ 14.0 is required...”问题解决

Python中遇到"UnicodeDecodeError: ‘gbk’ codec can’t decode bytes in position 2-3: illegal multibyte
sequence"之类的编码或解码的错误时如何处理

python 结巴分词(jieba)学习

Python +wordcloud 生成词云
python 分词工具 jieba

10行Python代码的词云
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: