七夕给女友的小惊喜(微信聊天记录做成的词云)


前言

最近在学习机器学习,恰逢昨天七夕,想给女友做个有意思的纪念品。之前用keras的tokenize分词记录词频,但做出展示效果不太好看,上网学习以后发现wordcloud意外的好用。
网上关于微信记录导出和做成词云的代码很多,所以也踩了一些坑。这边分享一下我导入微信聊天记录和做成词云的经验,希望对大家有帮助。


一、注意避开的坑

1.微信聊天记录EnMicroMsg.db库的导出

储存微信聊天记录的EnMicroMsg.db库需要在ROOT情况下导出。但目前的手机ROOT软件下载,我个人并不放心。这篇文章说明了如何在不手机ROOT的情况下导出库文件。

2.EnMicroMsg.db库的解密

关于解密网上已有很多资料,钥匙 KEY = IMEI (手机序列号) + UIN(用户信息号)
计算KEY值MD5加密以后的前7位的值,这就是库的密码。
(但是输出密码以后一直显示错误,上网查发现微信在7.017版本之后貌似会出现这种情况,当时试了好久,试了很多其他办法和密码。解决办法就是过一段时间再尝试就可以了,所以如果你碰见这样的情况,可以不用着急,等过会输入就可以了)

二.词云

2.1停用词(stopword.txt)

停用词可以用这个
chat.txt就导入自己想做词云的文本吧
图片如果自定义的话(因为代码设置是白色)背景需要自己处理下。

2.2代码示例

#coding:utf-8
import jieba    #分词包
import matplotlib.pyplot as plt
from wordcloud import WordCloud#词云包
import collections

#文件读入
file=open("chat.txt",'r',encoding='utf-8')
content=file.read()
file.close()

segment=[]
segs=jieba.cut(content) #切词

#停用词读入
stopwords=open("stopword.txt",'r',encoding="utf-8")
s=stopwords.read()
stopwords.close()

s = s.split("\n")

#循环输出需要的词追加到列表
for word in segs: 
    if word not in s and len(word)>1:
        segment.append(word) 

#查看词频记录
word_counts = collections.Counter(segment) # 对分词做词频统计
word_counts_top10 = word_counts.most_common(10) # 获取前10最高频的词
print(word_counts_top10) # 输出检查

#制作词云
text = ' '.join(segment)#将文本变为str格式
bimg=plt.imread('heart.jpg')
wc = WordCloud(background_color="white",mask=bimg,font_path='simhei.ttf',collocations=False).generate(text)
plt.imshow(wc,interpolation='bilinear')#按双线性插值输出
plt.axis('off')
plt.show()
 
# 保存到文件
wc.to_file('wordcloud.png')

三.词云效果

展示如下(感觉甜甜的和大家分享下嘻嘻):

在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值