说到词云应该不陌生,不知道的童靴往下看

词云,就是把网络文本中出现频率较高的

"关键词"予以视觉上的突出

浏览者只要一眼扫过文本就可以领略其主旨

瞧 这是不是一个有声音、有画面的小爱心~

今天 我们采集情侣们之间的聊天日常

用此制作一份只属于你们的小浪漫!


第一步,我们需要导出自己和对象的数据~

微信的备份功能并不能直接给你导出文本格式,它导出来其实是一种叫sqlite的数据库。如果说用网上流传的方法提取文本数据,iOS则需要下载itunes备份整机,安卓则需要本机的root权限,无论是哪种都非常麻烦,在这里给大家介绍一种不需要整机备份和本机root权限,只导出和对象的聊天数据的方法。

那就是使用安卓模拟器导出,这样既能ios/安卓通用,又能够避免对本机造成不良影响,首先需要用电脑版的微信备份你和你对象的聊天记录。以windows系统为例:

1. 下载夜神模拟器
2. 在夜神模拟器中下载微信
3. 使用windows客户端版的微信进行备份,如图左下角

4. 点击备份聊天记录至电脑

5. 手机端选择备份的对象

点击进入下方的选择聊天记录,然后选择和你对象的记录就可以啦

6. 导出完毕后打开模拟器,登录模拟器的微信

7. 登录成功后返回电脑版微信登录,打开备份与恢复,选择恢复聊天记录到手机

  1. 勾选我们刚刚导出的聊天记录,并在手机上点击开始恢复
9. 打开夜神模拟器的root权限

10. 用模拟器的浏览器百度搜索RE文件管理器,下载(图一)安装后打开,会弹出对话框让你给予root权限,选择永久给予,打开RE文件管理器(图二),进入以下文件夹(图三), 这是应用存放数据的地方。

/data/data/com.tencent.mm/MicroMsg

然后进入一个由数字和字母组合而成的文件夹,如上 图三 的 4262333387ddefc95fee35aa68003cc5

11. 找到该文件夹下的EnMicroMsg.db文件,将其复制到夜神模拟器的共享文件夹(图四)。共享文件夹的位置为 /mnt/shell/emulated/0/others ( 图五 ),现在访问windows的 C:\Users\你的用户名\Nox_share\OtherShare 获取该数据库

12. 导出该数据库后,使用一款叫 **sqlcipher **的软件读取数据

在这之前,我们还需要知道该数据库的密码,根据前人的经验,该密码的公式如下

字符串 " IMEI (手机序列号) UIN(用户信息号)"

将该字符串进行MD5计算后的前七位便是该数据库的密码,如 “355757010761231 857456862” 实际上中间没有空格,然后放入MD5计算取前面七位数字,后续会详细介绍。

哇,真是“简单易懂”啊,没关系,接下来告诉大家IMEI和UIN怎么获得。

首先是IMEI,在模拟器右上角的系统设置 —— 属性设置里就可以找得到啦,如图所示。

现在我们获得了IMEI号,那UIN号呢?

同样地,用RE文件管理器打开这个文件

/data/data/com.tencent.mm/shared_prefs/system_config_prefs.xml

长按改文件,点击右上角的三个点—选择打开方式—文本浏览器,找到default_uin,后面的数字就是了 !

得到这两串数字后,就可以开始计算密码啦,如果我的IMEI是355757010762041,Uin是857749862,那么合起来就是355757010762041857749862,将这串数字放入免费MD5在线计算

得到的数字的前七位就是我们的密码了,像这一串就是 6782538.

然后我们就可以进入我们的核心环节:使用 **sqlcipher **导出聊天文本数据!

点击 File - open database - 选择我们刚刚的数据库文件,会弹出框框让你输入密码,我们输入刚刚得到的七位密码,就可以进入到数据库了,选择message表格,这就是你与你的对象的聊天记录!

我们可以将它导出成csv文件:File - export - table as csv.

接下来,我们将使用Python代码,将里面真正的聊天内容:content信息提取出来,如下所示。虽然这个软件也允许select,但是它select后不允许导出,非常不好用,因此还不如我们自己写一个:

在学习过程中有什么不懂得可以加我的
python学习qun,855408893
群里有不错的学习视频教程、开发工具与电子书籍。
与你分享python企业当下人才需求及怎么从零基础学习好python,和学习什么内容 #!/usr/bin/python
import pandas
import csv, sqlite3
conn= sqlite3.connect('chat_log.db')
# 新建数据库为 chat_log.db
df = pandas.read_csv('chat_logs.csv', sep=",")
# 读取我们上一步提取出来的csv文件,这里要改成你自己的文件名
df.to_sql('my_chat', conn, if_exists='append', index=False)
# 存入my_chat表中conn = sqlite3.connect('chat_log.db')
# 连接数据库
cursor = conn.cursor()
# 获得游标
cursor.execute('select content from my_chat where length(content)<30')
# 将content长度限定30以下,因为content中有时候会有微信发过来的东西
value=cursor.fetchall()
# fetchall返回筛选结果data=open("聊天记录.txt",'w+',encoding='utf-8')
for i in value:data.write(i[0]+'\n')
# 将筛选结果写入 聊天记录.txtdata.close()
cursor.close()
conn.close()
# 关闭连接

记得把csv文件的编码格式转换成utf-8哦,不然可能会运行不下去:

当然你还可以用正则表达式去除以下内容

  1. 微信送的数据:wxid.*
  2. 表情:[.*]

不过我觉得这些也是必要的聊天信息之一,留着也无妨,因此在这里就不加入进去啦

最后得到的文本格式就是一行一句聊天内容,处理后我们就准备好进入下一个环节了!那就是令人激动的!生成词云

第二步,根据第一步得到的聊天数据生成词云

1. 导入我们的聊天记录,并对每一行进行分词

聊天记录是一行一行的句子,我们需要使用分词工具把这一行行句子分解成由词语组成的数组,这时候我们就需要用到结巴分词了。

分词后我们还需要去除词语里一些语气词、标点符号等等(停用词),然后还要自定义一些词典,比如说你们之间恩恩爱爱的话,一般结巴分词是无法识别出来的,需要你自行定义,比如说:小傻瓜别感冒了,一般分词结果是

小/傻瓜/别/感冒/了

如果你把“小傻瓜”加入到自定义词典里(我们下面的例子里是mywords.txt),则分词结果则会是

小傻瓜/别/感冒/了

下面对我们的聊天记录进行分词:

# segment.py
import jieba
import codecs
def load_file_segment():# 读取文本文件并分词jieba.load_userdict("mywords.txt")# 加载我们自己的词典f = codecs.open(u"聊天记录.txt",'r',encoding='utf-8')# 打开文件content = f.read()# 读取文件到content中f.close()# 关闭文件segment=[]# 保存分词结果segs=jieba.cut(content) # 对整体进行分词for seg in segs:if len(seg) > 1 and seg != '\r\n':# 如果说分词得到的结果非单字,且不是换行符,则加入到数组中segment.append(seg)return segment
print(load_file_segment())

在这个函数里,我们使用了codecs打开我们的聊天记录文件,然后进行结巴分词,最终返回一个包含所有词语的数组。记得运行前要安装jieba分词包,默认你已经安装了python3.

windows打开CMD/macOS系统打开Terminal 输入:

pip install jieba

安装完成后,在编辑器中输入我们刚刚的python代码,我将其命名为segment.py,切记在同个目录下放置 聊天记录.txt 及 自定义词表 mywords.txt, 然后在CMD/Terminal中输入命令运行

python segment.py

你就可以看见你们的聊天记录分词后的效果啦

2. 计算分词后的词语对应的频数

为了方便计算,我们需要引入一个叫pandas的包,然后为了计算每个词的个数,我们还要引入一个叫numpy的包,cmd/terminal中输入以下命令安装pandas和numpy:

  • pip install pandas
  • pip install numpy

详细的解析我都写在下方的注释里啦,大家可以自行阅读并实践。不过需要注意的是,里面的load_file_segment()是我们第一步里的函数,如果你不知道如何把这两个步骤合在一起,没关系,最后我们会提供一份完整的代码.

import pandas
import numpy
def get_words_count_dict():segment = load_file_segment()# 获得分词结果df = pandas.DataFrame({'segment':segment})# 将分词数组转化为pandas数据结构stopwords = pandas.read_csv("stopwords.txt",index_col=False,quoting=3,sep="\t",names=['stopword'],encoding="utf-8")# 加载停用词df = df[~df.segment.isin(stopwords.stopword)]# 如果不是在停用词中words_count = df.groupby(by=['segment'])['segment'].agg({"计数":numpy.size})# 按词分组,计算每个词的个数words_count = words_count.reset_index().sort_values(by="计数",ascending=False)# reset_index是为了保留segment字段,排序,数字大的在前面return words_count
print(get_words_count_dict())

同第一步一样,运行这份代码你就可以看到每个词语及其对应的频数。需要注意的是,这里有个加载停用词的操作,你需要把停用词表放在当前文件夹下,我们这里提供一份停用词表下载:stopwords.txt

3. 生成词云

终于到了最后一部分啦!你是不是开心而又满怀激动的心情呢(滑稽,在这一步开始之前,我们需要先安装需要使用的包,我们需要用到的包有:

  • pip install matplot
  • pip install scipy
  • pip install wordcloud

打开CMD/Terminal 输入以上命令即可安装,加上之前两个步骤的包,有:

  • pip install jieba
  • pip install codecs
  • pip install pandas
  • pip install numpy

如果你在安装这些包的时候出现了什么问题,请记得在我们下方评论区提出,我们会一一解答的哦。

运行目录的文件结构如下:

  • 聊天记录.txt
  • mywords.txt(如果你没有自定义的词的话可以为空)
  • stopwords.txt
  • wordCloud.py
  • ai.jpg (可以为任意的图片,你喜欢就行)

完整代码,wordCloud.py 如下,附有详细的解析:

在学习过程中有什么不懂得可以加我的
python学习qun,855408893
群里有不错的学习视频教程、开发工具与电子书籍。
与你分享python企业当下人才需求及怎么从零基础学习好python,和学习什么内容 # coding:utf-8
import jieba
import numpy
import codecs
import pandas
import matplotlib.pyplot as plt
from scipy.misc import imread
import matplotlib.pyplot as plt
from wordcloud import WordCloud, ImageColorGenerator
from wordcloud import WordClouddef load_file_segment():# 读取文本文件并分词jieba.load_userdict("mywords.txt")# 加载我们自己的词典f = codecs.open(u"聊天记录.txt",'r',encoding='utf-8')# 打开文件content = f.read()# 读取文件到content中f.close()# 关闭文件segment=[]# 保存分词结果segs=jieba.cut(content) # 对整体进行分词for seg in segs:if len(seg) > 1 and seg != '\r\n':# 如果说分词得到的结果非单字,且不是换行符,则加入到数组中segment.append(seg)return segmentdef get_words_count_dict():segment = load_file_segment()# 获得分词结果df = pandas.DataFrame({'segment':segment})# 将分词数组转化为pandas数据结构stopwords = pandas.read_csv("stopwords.txt",index_col=False,quoting=3,sep="\t",names=['stopword'],encoding="utf-8")# 加载停用词df = df[~df.segment.isin(stopwords.stopword)]# 如果不是在停用词中words_count = df.groupby(by=['segment'])['segment'].agg({"计数":numpy.size})# 按词分组,计算每个词的个数words_count = words_count.reset_index().sort_values(by="计数",ascending=False)# reset_index是为了保留segment字段,排序,数字大的在前面return words_countwords_count = get_words_count_dict()
# 获得词语和频数bimg = imread('ai.jpg')
# 读取我们想要生成词云的模板图片
wordcloud = WordCloud(background_color='white', mask=bimg, font_path='simhei.ttf')
# 获得词云对象,设定词云背景颜色及其图片和字体# 如果你的背景色是透明的,请用这两条语句替换上面两条
# bimg = imread('ai.png')
# wordcloud = WordCloud(background_color=None, mode='RGBA', mask=bimg, font_path='simhei.ttf')words = words_count.set_index("segment").to_dict()
# 将词语和频率转为字典
wordcloud = wordcloud.fit_words(words["计数"])
# 将词语及频率映射到词云对象上
bimgColors = ImageColorGenerator(bimg)
# 生成颜色
plt.axis("off")
# 关闭坐标轴
plt.imshow(wordcloud.recolor(color_func=bimgColors))
# 绘色
plt.show()

值得注意的是这里面的bimg和wordcloud对象的生成,我们知道png格式背景一般是透明的,因此如果你的图像是png格式的话,其生成词云的时候背景色应该设为None,然后mode应该设为RGBA。

我们还可以控制词云字体的大小和数目的多少,使用下面这两个参数:

max_font_size=60, max_words=3000

将其放入 wordcloud = WordCloud(background_color=‘white’, mask=bimg, max_font_size=60, max_words=3000, font_path=‘simhei.ttf’) 即可

运行前,确保安装了所有的包,并且当前目录下有我们所需要的所有文件哦

下面就可以用我们的聊天记录,画心型词云啦!!!

CMD/Terminal 进入代码所在文件夹,运行:python wordcloud.py

得到的图像如下:

喜欢吗?喜欢就拿去用吧!

最后,祝大家有情人终成眷属!

为解决初学者学习上的困难,专门建立的Python学习扣QUN:⑧⑤⑤-④零⑧-⑧⑨③从零基础开始到Python各领域的项目实战教程、开发工具与电子书籍。与你分享企业当下对于python人才需求及学好python的高效技巧,不停更新最新教程!点击加入我们的 python学习圈

【趣味案例】谁说程序员不浪漫?Python导出微信聊天记录生成爱的词云图相关推荐

  1. 谁说程序员不浪漫?Python导出微信聊天记录生成爱的词云图

    明天又双叒叕是一年一度的七夕恋爱节了! 又是一波绝好的机会!恩爱秀起来! 购物车清空!礼物送起来!朋友圈晒起来! 需要Python软件工具和学习资料的小伙伴可以点击下方链接自行获取 http://no ...

  2. 程序员的浪漫,你值得拥有!

    作者 | 小游子: 来源 | CSDN 博客 今天我们就来盘点一下 GitHub 程序员开源的情人节表白的代码.来一睹大牛们是怎么过情人节的,是怎么跟自己的女朋友表白的?(文中图片均来自项目本身) 前 ...

  3. object转成实体对象_程序员的浪漫,new一个对象

    程序员都喜欢 面向对象编程,但如果你没有对象怎么办?当然是 new 一个对象出来. 面向对象编程 是一种程序设计思想,而不是真正的面向你的对象去编程.如果你真的这么做了,恭喜你获得:你爱我还是爱电脑? ...

  4. python浪漫代码-使用Python代码的程序员也浪漫

    原标题:使用Python代码的程序员也浪漫 代码也浪漫:用Python放一场圣诞节烟花秀! 天天敲代码的朋友,有没有想过代码也可以变得很酷炫又浪漫?今天就教大家用Python模拟出绽放的烟花庆祝昨晚法 ...

  5. 她说程序员不懂浪漫,生日宴上惨变单身狗,其实,程序员的浪漫你不懂!

    css蛋糕 谁说程序员不懂得浪漫,只是程序员的浪漫你不懂!PS:人家都不懂,你再浪漫有啥用,最后还不是单身狗? 说实在的,以前也分享过一个程序员用纯CSS画的一个MAC,代码就三千多行,这个蛋糕虽然代 ...

  6. Java程序员情人节_盘点程序员情人节的表白,前端程序员最浪漫,后端不服来战...

    今天是 2 月 14 日情人节,我看公众号后台有好多人在回复关键字:情人节表白代码.我想,我作为大家的校长,必须给大家送一波福利代码啊!我是真没想到,竟然很多程序员都想用代码表白,还整的挺浪漫的,看来 ...

  7. 生日快乐程序员的浪漫代码_python告白代码,只属于程序员的浪漫

    不知何时,不知何因,程序员这个行业成为大家茶余饭后取乐的无辜群体.只要说到程序员,脑海中就浮现出刻板印象,标配穿搭:格子衫,牛仔裤,黑框眼镜.当然秃顶也是必须的,更狠的吐槽还有邋里邋遢,不懂浪漫,不知 ...

  8. c++获取子类窗口句柄位置_干货分享:用一百行代码做一个C/C++表白小程序,程序员的浪漫!...

    前言:很多时候,当别人听到你是程序员的时候.第一印象就是,格子衫.不浪漫.直男.但是程序员一旦浪漫起来,真的没其他人什么事了.什么纪念日,生日,情人节,礼物怎么送? 做一个浪漫的程序给她,放上你们照片 ...

  9. OSChina 周一乱弹 —— 程序员的浪漫你不懂

    2019独角兽企业重金招聘Python工程师标准>>> 又是新的一周了,你们周末过得怎样呢?你们是在好好地陪妹子玩耍,还是在撸代码? 本人苦逼男程一枚,异地恋.每次女友打电话问我在干 ...

最新文章

  1. 《机器学习》 梯度下降
  2. HTML5新特性之WebRTC
  3. ITK:创建高斯导数内核
  4. python高手之路(第3版)_Python高手之路(第3版)
  5. 【笔记】LR录制方式和常用函数
  6. 【转载国外好文】代工开发一个iOS应用没有那么容易
  7. P4145 上帝造题的七分钟2 / BZOJ3211花神游历各国
  8. nodejs真的是单线程吗?
  9. jquery weui 上拉加载,下拉刷新,问题解答。
  10. coreos 安装 mysql_在 UOS 上体验 CoreOS
  11. 电气防火限流式保护器应用场景及选型指南
  12. Win10登陆界面卡住,进去后无法打开网络相关的设置,谷歌浏览器无法上网
  13. grasps什么意思中文_中文和日文微信名字是什么意思 163个
  14. 【项目实战】Python基于孤立森林算法(IsolationForest)实现数据异常值检测项目实战
  15. 影视后期制作需要用到哪些软件?
  16. 警告关于测试人员的职场生存,千万要避开这5个坑(不看后悔)
  17. JS实现将汉字转成拼音实例
  18. BZOJ 1941: [Sdoi2010]Hide and Seek KDtree + 估价函数
  19. Mac环境下pandas的安装与学习
  20. 张小龙现场“约战”跳一跳,发布2018微信全新计划(内附演讲全文)

热门文章

  1. pytorch torch.Storage学习
  2. 【计算机网络】万字总结
  3. 89s52单片机的硬件资源基本使用
  4. 计算机桌面组成部分教案,‘教案’计算机教案
  5. xp系统无法自动修复此计算机该怎么解决,xp系统启动修复无法自动修复此计算机的具体办法...
  6. 饭局上领导劝你喝酒,别说“我不能喝”,高手都用这4种拒酒话术
  7. spark运行自带例子_运行spark自带的例子出错及解决
  8. [吴恩达机器学习笔记]11机器学习系统设计3-4/查全率/查准率/F1分数
  9. poi操作Word创建超链接
  10. Dr16DT7的使用方法