100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 绿皮书——iOS导出微信聊天记录 并用python制作词云

绿皮书——iOS导出微信聊天记录 并用python制作词云

时间:2024-02-24 13:40:35

相关推荐

绿皮书——iOS导出微信聊天记录 并用python制作词云

The Green-Book——iOS微信聊天词云

引言目录1.提取微信聊天记录1.1 iTunes备份1.2 解密备份文件1.3 找到指定好友1.4 导出为xlsx2.python读取分析画图2.1 数据筛选2.2 分析词频2.3 生成词云3.成果展示最后

引言

某天突发奇想,想把微信聊天里的美好记录下来,作为给某人的一份小礼物。酝酿了一周,最终花了一下午加一晚上才算有点小成果。写下来主要是分享一下流程,希望后面有这种想法的朋友节约时间少踩点坑,最后感叹下自己一点一点解决问题到最终成功的感觉很好。嗯,最重要的是某人甚喜~

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 sqlite3import pandas as pdwith sqlite3.connect(r'你的路径\DB\MM.sqlite') as con: # 你的MM.sqlite的全部路径df1 = pd.read_sql_query("select * from Chat_2d51723beec***************", con) # 上面的Chat_文件名# 保存为excelwriter = 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.analyseimport stringfilename = 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.txtfor 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 WordCloudfrom scipy.misc import imreadimport wordclouddef 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.成果展示

version1.0——3月18日

version2.0——5月12日

最后

算是第一篇真正意义上的博客,心中蓦地松了一口气,好像做了一件很久以前就该做的事,好在某人开心,什么都值得~

参考:

[1]: /contr4l/MicromsgHistory

[2]: /h1997l1997/Analysis-of-Wechat-history-

[3]: /p/40814102

[4]: /p/32511173

[5]: /contr4l_/article/details/80531222

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。