The Green-Book——iOS微信聊天词云
引言
某天突发奇想,想把微信聊天里的美好记录下来,作为给某人的一份小礼物。酝酿了一周,最终花了一下午加一晚上才算有点小成果。写下来主要是分享一下流程,希望后面有这种想法的朋友节约时间少踩点坑,最后感叹下自己一点一点解决问题到最终成功的感觉很好。嗯,最重要的是某人甚喜~
PS:安卓手机需先root,下载Root Explorer,请移步这里
目录
1.提取微信聊天记录
工具:
1. iTunes
2. 楼月免费iTunes备份管理器
3. sqlcipher
相关工具下载:百度云
提取码:3dxp
1.1 iTunes备份
先把iPhone备份到电脑中,不加密
备份文件在如下路径,C:\Users\用户名\AppData\Roaming\Apple Computer\MobileSync\Backup
1.2 解密备份文件
打开“楼月免费iTunes备份管理器”,自动刚显示备份的文件
导出Documents文件夹
观察刚刚导出的Documents文件,这个一长串编码的文件表示一个微信账号的聊天记录
1.3 找到指定好友
用sqlcipher.exe打开在该文件夹的DB里的MM.sqlite
打开之后长这样,一个table代表一个聊天,以Chat_开头,一串数字字母(其由微信ID经过MD5加密而成)结尾代表和某个人的聊天记录,我这里特意用旧手机只备份一个人的聊天记录,所以要找的就是Chat_2d51723…
倘若你有很多Chat_文件,只需要找到你要的微信好友ID,经过MD5在线加密即可得到这一长串密文
列如某人的ID是这个,经过MD5加密可得上述密文
1.4 导出为xlsx
相关模块请用pip安装
import sqlite3
import pandas as pd
with sqlite3.connect(r'你的路径\DB\MM.sqlite') as con: # 你的MM.sqlite的全部路径
df1 = pd.read_sql_query("select * from Chat_2d51723beec***************", con) # 上面的Chat_文件名
# 保存为excel
writer = pd.ExcelWriter('小红.xlsx')
df1.to_excel(writer, 'Sheet1')
writer.save()
至此,第一步从iOS导出微信聊天记录完成,如果你仅仅想保存下你们美好的回忆以便于以后翻阅的话,推荐下载wxbackup,软件由hangcom大神开发,导出后可直接浏览,聊天内容为HTML网页文件,文字内容以js格式保存,名为‘message’的JavaScript文件。编写词云还可参考这里python 将微信聊天记录生成词云。
2.python读取分析画图
python包:
1. jieba
2. wordcloud
3. scipy
wordcloud的安装直接使用pip install wordcloud貌似会有问题,所以请直接下载.whl文件,链接https://www.lfd.uci.edu/~gohlke/pythonlibs/#wordcloud,下载对应32位或64系统,对应python版本的.whl文件,具体安装方法自行百度谷歌。
2.1 数据筛选
打开得到的小红.xlsx,将message那一列复制粘贴到新的xlsx中,并另存为.txt格式
2.2 分析词频
以下代码从contr4l的github下载
import jieba.analyse
import string
filename = r'小红.txt的路径,注意不包括.txt'# 读取txt文件路径
# 此模块用于分析文件中的字频,输出结果形如 词语 --- 权重频次
def AnalyzeData():
f = open(filename + '.txt', 'r', encoding='gb18030')
fcontent = f.read()
alpha = 'qwertyuiopasdfghjklzxcvbnm1234567890QWERTYUIOPASDFGHJKLZXCVBNM'# 去除非中文部分
tags = jieba.analyse.extract_tags(fcontent, topK=250, withWeight=True)
new_tags = {}
for k in range(len(tags)):
uchar = tags[k][0][0]
if uchar not in alpha:
new_tags[tags[k][0]] = int(tags[k][1] * 10000)
# 将词频-词语保存为文件,注意格式化对齐的方式
with open(filename + '_Word.txt', 'w') as f: # 生成小红_Word.txt
for i, j in tags:
if i[0] not in alpha:
f.write('{:15}\t{:15}'.format(i, int(j * 10000)) + '\n')
# print('{:8}\t{:10}'.format(i,int(j*10000)))
f.close()
# 返回字典为wordcloud提供依据
return new_tags
2.3 生成词云
from wordcloud import WordCloud
from scipy.misc import imread
import wordcloud
def cloudplot():
# 设置模板图像的路径
target_coloring = imread(r'需要找一个背景图\welove.jpg')
# 以词频和背景模板为依据生成词云对象
word_cloud = WordCloud(font_path=r'C:\Windows\Fonts\simhei.ttf',
background_color="white", max_words=2000, mask=target_coloring).generate_from_frequencies(
AnalyzeData())
# 生成颜色分布
image_color = wordcloud.ImageColorGenerator(target_coloring)
# image_color =
import matplotlib.pyplot as plt
# 仅按照词频、边界、默认颜色生成词云图像
plt.imshow(word_cloud)
plt.axis("off")
plt.figure()
# 重新上色,按照图像色彩分布生成
plt.imshow(word_cloud.recolor(color_func=image_color))
plt.axis("off")
plt.figure()
# 绘制原始图像
plt.imshow(target_coloring, cmap=plt.cm.gray)
plt.axis("off")
plt.show()
word_cloud.to_file(filename + '.png')
cloudplot()
3.成果展示
最后
算是第一篇真正意义上的博客,心中蓦地松了一口气,好像做了一件很久以前就该做的事,好在某人开心,什么都值得~
参考:
[1]: https://github.com/contr4l/MicromsgHistory
[2]: https://github.com/h1997l1997/Analysis-of-Wechat-history-
[3]: https://zhuanlan.zhihu.com/p/40814102
[4]: https://zhuanlan.zhihu.com/p/32511173
[5]: https://blog.csdn.net/contr4l_/article/details/80531222