Python 情人节超强技能 导出微信聊天记录生成词云

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

在这里插入图片描述

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

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

在这里插入图片描述

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

在这里插入图片描述

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

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

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

在这里插入图片描述

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

在这里插入图片描述

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

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

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’)

将筛选结果写入 聊天记录.txt

data.close()

cursor.close()

conn.close()

关闭连接

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

在这里插入图片描述

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


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

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

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

小/傻瓜/别/感冒/了

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

小傻瓜/别/感冒/了

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

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())

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

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

pip install pandas

pip install numpy

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())

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

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 WordCloud

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

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})

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值