目录
1 概述
2 数据准备
2.1 安卓设备
2.1.1 Root手机,安装Root Explorer
2.1.2 用Root Explorer将聊天记录的数据文件导出并存入电脑
2.1.3 对EnMicroMsg.db进行解密
2.1.4 数据库表的分析和提取
2.1.5 建立message数据库
2.2 ios设备
2.2.1 备份手机记录到电脑
2.2.2 数据库结构
2.2.3 关于加密
3 目标好友聊天记录筛选
3.1 安卓
3.2 ios版本
4 制作词云
4.1 准备相关依赖包
4.1.1 jieba安装
4.1.2 WordCloud安装
4.2 调用相关包
4.3 导入聊天记录筛选.txt,用分词包进行切词
4.4 去停用词
4.5 统计频率并排序
4.6 画词云图
5 总结
1 概述
python的词云分析功能很是强大,不少网友早已提出众多利用python对聊天记录进行词云分析的方法。但是在实践过程中,有许多的bug和不太切合实际的地方,本文对目前网上已有的方法进行总结,并结合自己在实际操作中遇到的一些问题,给出一篇较为详细的步骤分解,让刚刚学习python的小白,也可以快速上手,体验python的强大和乐趣~
2 数据准备
要对微信聊天记录进行分析,必须将记录从手机或者电脑导出。
网上也有不少软件据说可以直接导出聊天记录,但大多都是收费的~
我们借鉴众多机智网友的做法自力更生(没钱买软件)
2.1 安卓设备
原文链接:https://www.zhihu.com/question/19924224/answer/69982884
本部分感谢知乎大神“画头像的dada”
2.1.1 Root你的手机,安装Root Explorer。
不同的手机root办法不同,依据自己的手机型号自行百度。
Root Explorer在任何一个安卓市场都可以下载,请自行下载并安装。
2.1.2用Root Explorer将聊天记录的数据文件导出并存入电脑
利用Root Explorer,打开以下路径:
路径:/data/data/com.tencent.mm/MicroMsg/一大串字符命名的长文件夹
并在该文件夹下找到EnMicroMsg.db文件
你的手机登录过几个微信号,就有几个这样的“一大串字符命名的长文件夹”,要是分不清楚哪个是自己,可以选择都复制。
把数据库文件EnMicroMsg.db拷贝到手机根目录,链接数据线,将其拷贝到电脑。
EnMicroMsg.db是一个sqlite3的数据库文件,Python内置了SQLite3,所以,在Python中使用import sqlite3可以直接调用sqlite3,并利用sql语句实现查询功能。但是EnMicroMsg.db是一个加密数据库,需要进行解密,才能操作,目前尚未找到直接通过python进行解密的手法,所以还需要一个解密过程。
2.1.3 对EnMicroMsg.db进行解密
微信对于用户的聊天记录还是有保护的,不是谁拿到数据文件都能看的,要进行解密。
钥匙 KEY = IMEI (手机序列号) + UIN(用户信息号)
手机输入 *#06# 能得到IMEI
利用Root Explorer访问/data/data/com.tencent.mm/shared_prefs/system_config_prefs.xml文件,并将其复制到电脑,用记事本打开,uin在最下面文本处,为11位数字,或者10位数字加一个符号,差多如下图,value值所指就是。
把IMEI (手机序列号) 和 UIN(用户信息号)连起来写成一串,计算其MD5值,免费MD5散列计算器
对计算结果取前7位为数据库密码
至此,数据库的密码拿到了,就可以进行数据提取了。
感谢网友提供的解密sqlite3数据库神器,sqlcipher。下载地址:百度网盘
点击File,OpenDatabase,选择刚才的EnMicroMsg.db文件,出现弹框,输入刚才拿到的7位密码,就能进入数据库。
2.1.4数据库表的分析和提取
数据库中chatroom表包含了所有群的相关信息,而rcontact表中包含了所有联系人的信息(包括好友和非好友)。如下图:
我们需要通过rcontact表来找到想要分析的聊天对象的username,以便于找到对应的聊天内容。下图中,昵称为“文件传输助手”的username是filehelper。
然后我们找到一个名为message的表,里边记录了所有的聊天记录。createtime是信息创建时间,talker是聊天者,用上一步提到的username来标识,而content就是聊天内容了。
虽然sqlcipher提供sql语句查询功能,但是,查询出来的数据并不能导出,所以,通过文件导出功能,将message表整体导出,再通过python进行筛选查询。我们将表message储存为csv格式。命名为“聊天记录.csv”
有可能这个csv文件会有上百兆,如果用excel打开,会非常卡,无法对目标talker筛选,从而找到目标聊天记录内容。
通过tableau进行文本数据源的导入,进行筛选也是一个不错的选择,本文不做详述。
2.1.5 建立message数据库
为了快捷简便的对message表进行筛选,找到与目标talker的聊天内容,我们将上一步导出的csv文件导入到一个新建的sqlite3数据库中。用sql语句进行筛选。
利用pandas,将csv导入新建的“聊天记录.db”数据库。
代码如下(会自动创建“聊天记录.db”文件):
import pandas
import csv, sqlite3
conn= sqlite3.connect