微信聊天记录生成词云

目录

    • 前置准备
    • 一、获取微信聊天记录
      • (一)配置MuMu模拟器
      • (二)微信数据备份与恢复
      • (三)获取微信聊天记录文件至电脑
      • (四)获取EnMicroMsg.db的密钥
      • (五)使用SQLcipher解密
      • (六)导出message
    • 二、根据聊天记录生成词云
    • 三、参考博客

前置准备

为了获取到微信聊天记录,我们需要在电脑上准备以下软件

  • MuMu模拟器

MuMu模拟器中安装微信与RE文件管理器。这里是为了微信聊天记录的恢复与导出EnMicroMsg.db文件

  • sqlcipher

EnMicroMsg.db为sqlLite数据库文件,需要解密。

提取码: zbkw

为了生成词云,我们需要在电脑上安装python环境,当然也可以使用其他方式生成词云

  • python环境准备

环境搭建教程:https://www.runoob.com/python/python-install.html

一、获取微信聊天记录

(一)配置MuMu模拟器

  1. 开启root权限,并且记录IMEI编码。

在这里插入图片描述

  1. 下载微信与RE文件管理器
    在这里插入图片描述

(二)微信数据备份与恢复

在这里插入图片描述

手机与电脑连接同一网络,利用微信的备份与恢复,将手机上的聊天记录备份至电脑。(这里可以指定联系人的聊天记录)

备份完成后,进入模拟器中的微信,登录后恢复聊天记录到模拟器中。(这里需要重新登陆微信)

(三)获取微信聊天记录文件至电脑

打开RE文件管理器,从根目录/下开始,路径为:/data/data/com.tencent.mm/MicroMsg/xxx/EnMicroMsg.db,其中,为一数字字母组成的字符串,因微信号不同而不同,EnMicroMsg.db就是我们的数据库文件了。

在这里插入图片描述

将此文件复制到共享文件夹中,这样在电脑的文档中即可看到。

在这里插入图片描述
在这里插入图片描述

(四)获取EnMicroMsg.db的密钥

微信对该数据库文件进行了加密,加密规则是:先对IMEI和UIN进行拼接,然后利用MD5算法对拼接后的字符串进行转换,转换后的前7位字符为密码。

由于我们使用的是模拟器,所以IMEI为:1234567890ABCDEF

UIN是微信的用户信息号,你可以在模拟器中的RE根据以下路径找到:/data/data/com.tencent.mm/shared_prefs,然后直接用RE打开其中的system_config_prefs.xml,找到其中name为default_uin的标签所对应的value的值,就是UIN。

至此,我们已经拿到了IMEI和UIN的信息,打开这个网站MD5散列计算器然后把你的IMEI和UIN输入进去(UIN我乱输的,你们就输入你们的UIN就好) ,如果你的UIN前面有“-”或者“+”一定要输进去!!!然后得到的散列值前7位即为密钥。

在这里插入图片描述

(五)使用SQLcipher解密

打开SQLcipher,然后右上角Open Database,然后选中EnMicroMsg.db文件。输入上面的七位密钥,即可打开。
在这里插入图片描述
在这里插入图片描述

(六)导出message

在这里插入图片描述

选中message,点击export,导出为csv。
在这里插入图片描述
在这里插入图片描述

打开之后,即可获得微信聊天记录了,可以把content的无效信息删除,然后粘贴进入txt文件,一定要保存为UTF8编码。
在这里插入图片描述

至此,我们就得到了一份完整的聊天记录了。后面就是使用python处理这些数据了。

二、根据聊天记录生成词云

照着下图,准备这几个文件:

  • chat_records.txt (这里就是微信聊天记录)
  • mywords.txt (自己创建空文件夹)
  • picture.jpg (词云形状)
  • run.py (下面有)
  • stopwords.txt (需要过滤的字符串,可以点击从这里复制过去)
    在这里插入图片描述

run.py

# coding: utf-8
import jieba
import re
import pandas as pd
import matplotlib.pyplot as plt
from wordcloud import WordCloud, ImageColorGenerator
from imageio import imread
 
def load_file_segment():
    # Load the text file and segment words
    jieba.load_userdict(r"E:\STUDY\word_cloud\mywords.txt")
    # Load our own dictionary
    with open(r"E:\STUDY\word_cloud\chat_records.txt",'r',encoding='utf-8') as f:
        # Open the file
        content = f.read()
        # Read the file content
 
    # Retain Chinese content
    content = re.sub(r'[^\u4e00-\u9fa5]', '', content)
 
    # cut word modle: https://zhuanlan.zhihu.com/p/611419520
    segs = jieba.cut(content, cut_all=False) 
    # Segment the whole text
    segment = [seg for seg in segs if 2 <= len(seg) <= 4 and seg != '\r\n']
    # Add results to list if the length of the segmented word is between 2-4, and is not a newline character
    return segment
 
def get_words_count_dict():
    segment = load_file_segment()
    # Get the segmented result
    df = pd.DataFrame({'segment':segment})
    # Convert segmented array to pandas DataFrame
    stopwords = pd.read_csv(r"E:\STUDY\word_cloud\stopwords.txt", index_col=False, quoting=3, sep="\t", names=['stopword'], encoding="utf-8")
    # Load stop words
    df = df[~df.segment.isin(stopwords.stopword)]
    # Exclude stop words
    words_count = df.groupby('segment')['segment'].size().reset_index(name='count')
    # Group by word, calculate the count of each word
    words_count = words_count.reset_index().sort_values(by="count",ascending=False)
    # Reset index to retain segment field and sort in descending order of count
    return words_count
 
words_count = get_words_count_dict()
# Get word count
 
bimg = imread(r'E:\STUDY\word_cloud\picture.jpg')
# Read the template image for word cloud generation
 
wordcloud = WordCloud(width=1080, 
                     height=1080,
                     background_color='white',
                     mask=bimg, 
                     font_path='simhei.ttf', 
                     max_words=200, 
                     scale=10
                     )
# Get WordCloud object, set the background color, image, font of the word cloud
 
# If your background color is transparent, replace above two lines with these two
# 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()
# Convert words and frequencies to dictionary
wordcloud = wordcloud.fit_words(words["count"])
# Map the words and frequencies to the WordCloud object
bimgColors = ImageColorGenerator(bimg)
# Generate colors
plt.axis("off")
# Turn off the axes
plt.imshow(wordcloud.recolor(color_func=bimgColors))
# Apply colors
plt.show()

picture.jpg

在这里插入图片描述

启动run.py,有缺少的类库,使用下述命令安装:

xxxxxx为类库名称

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple xxxxxx

三、参考博客

  • 【微信聊天记录制作词云】超详细保姆级教学!!!(详细步骤+代码)https://blog.csdn.net/m0_53943702/article/details/132018093

  • Python——jieba优秀的中文分词库(基础知识+实例)https://blog.csdn.net/m0_63244368/article/details/126837925

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/344378.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

详解线性分组码(linear code)

目录 一. 介绍 二. 线性分组码 三. 生成矩阵 四. 对偶编码 五. 校验矩阵 六. 陪集编码 七. 小结 一. 介绍 Low-density parity-check&#xff0c;简称LDPC码&#xff0c;翻译为低密度奇偶校验码。 我们所熟悉的LDPC码就是一个典型的线性分组码&#xff08;linear bloc…

2023年度AI盘点 AIGC|AGI|ChatGPT|人工智能大模型

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 2023年是人工智能大语言模型大爆发的一年&#xff0c;一些概念和英文缩写也在这一年里集中出现&#xff0c;很容易混淆&#xff0c;甚至把人搞懵。 文章目录 前言01 《ChatGPT 驱动软件开…

气象条件对铸铁平台地基深度有哪些影响呢——河北北重

气象条件对铸铁平台地基有以下影响&#xff1a; . 1.地震 地震可能导致地基的震动和错动&#xff0c;因此地震活跃区域的建筑物通常需要更深的地基以提供更大的稳定性。 2..温度变化&#xff1a;气温的变化会导致地基中的土壤膨胀和收缩&#xff0c;从而影响地基的稳定性。特…

展厅设计更好的方法

一、与公司形象契合 在展厅规划时必定要留意公司的LOGO、主色调&#xff0c;以及企业文明。在展现时使用丰满的展厅规划传达出企业的理念。而在功用设置上&#xff0c;应当考虑内涵功用&#xff0c;从展厅作业人员的视点动身&#xff0c;为展厅作业人员提供杰出的环境&#xff…

书生·浦语大模型实战营-学习笔记6

目录 OpenCompass大模型测评1. 关于评测1.1 为什么要评测&#xff1f;1.2 需要评测什么&#xff1f;1.3 如何评测&#xff1f;1.3.1 客观评测1.3.2 主观评测1.3.3 提示词工程评测 2. 介绍OpenCompass工具3. 实战演示 OpenCompass大模型测评 1. 关于评测 1.1 为什么要评测&#…

《WebKit 技术内幕》学习之五(4): HTML解释器和DOM 模型

4 影子&#xff08;Shadow&#xff09;DOM 影子 DOM 是一个新东西&#xff0c;主要解决了一个文档中可能需要大量交互的多个 DOM 树建立和维护各自的功能边界的问题。 4.1 什么是影子 DOM 当开发这样一个用户界面的控件——这个控件可能由一些 HTML 的标签元素…

单域名证书,多域名证书,通配符证书怎么选?了解这些就够了

首次购买证书时&#xff0c;我们经常遇到不知道选择那种证书&#xff0c;由于缺乏相关的了解&#xff0c;稍不留神&#xff0c;就会踩坑&#xff01;那初次购买证书时&#xff0c;了解这几点其实就足够了&#xff01; 第一点&#xff0c;了解证书的类型。 证书一般分为DV&am…

<蓝桥杯软件赛>零基础备赛20周--第16周--GCD和LCM

报名明年4月蓝桥杯软件赛的同学们&#xff0c;如果你是大一零基础&#xff0c;目前懵懂中&#xff0c;不知该怎么办&#xff0c;可以看看本博客系列&#xff1a;备赛20周合集 20周的完整安排请点击&#xff1a;20周计划 每周发1个博客&#xff0c;共20周。 在QQ群上交流答疑&am…

acwing 动态规划dp 0 1背包问题

前言 hello小伙伴们&#xff0c;最近由于个人放假原因颓废了一段时间很长时间没有更新CSDN的内容了&#xff0c;唉&#xff0c;毕竟懂得都懂寒暑假静下心来学习的难度远比在学校里大的多。 但是&#xff0c;也不是毫无办法克服&#xff0c;今天我来了我们当地的一家自习室来学习…

大数据开发之Spark(RDD弹性分布式数据集)

第 1 章&#xff1a;rdd概述 1.1 什么是rdd rdd&#xff08;resilient distributed dataset&#xff09;叫做弹性分布式数据集&#xff0c;是spark中最基本的数据抽象。 代码中是一个抽象类&#xff0c;它代表一个弹性的、不可变、可分区、里面的元素可并行计算的集合。 1.1…

【操作工具】IDEA的properties文件变为灰色的解决办法

背景 赋值了一份properties文件放到项目下面&#xff0c;但是里面的key都是灰色的 解决方案 去掉下面3后面对应的勾 去掉之后

Java零基础学习18:字符串

编写博客目的&#xff1a;本系列博客均根据B站黑马程序员系列视频学习和编写目的在于记录自己的学习点滴&#xff0c;方便后续回忆和查找相关知识点&#xff0c;不足之处恳请各位有缘的朋友指正。 一、字符串拼接 第一题&#xff1a;false 第二题&#xff1a;true 二、 字符串…

Java项目:12 Springboot的垃圾回收管理系统

作者主页&#xff1a;舒克日记 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 1.介绍 垃圾分类查询管理系统&#xff0c;对不懂的垃圾进行查询进行分类并可以预约上门回收垃圾。 让用户自己分类垃圾&#xff0c; 按国家标准自己分类&#x…

LabVIEW高级CAN通信系统

LabVIEW高级CAN通信系统 在现代卫星通信和数据处理领域&#xff0c;精确的数据管理和控制系统是至关重要的。设计了一个基于LabVIEW的CAN通信系统&#xff0c;它结合了FPGA技术和LabVIEW软件&#xff0c;主要应用于模拟卫星平台的数据交换。这个系统的设计不仅充分体现了FPGA在…

CSS实现文本和图片无限滚动动画

Demo图如下&#xff1a; <style>* {margin: 0;padding: 0;box-sizing: border-box;font-family: Poppins, sans-serif;}body {min-height: 100vh;background-color: rgb(11, 11, 11);color: #fff;display: flex;flex-direction: column;justify-content: center;align-i…

2024 年值得收藏的 6 大 iPad 恢复软件

众所周知&#xff0c;数据丢失是 iOS 用户的普遍问题。由于意外删除、软件更新、被盗等多种原因&#xff0c;您可能会丢失重要文件。通过备份&#xff0c;您可以轻松找回 iPad上丢失的文件。但是&#xff0c;当您没有可用的备份时&#xff0c;麻烦就开始了。那么&#xff0c;如…

如何高效挖掘Web漏洞?

简介 SRC漏洞平台&#xff1a;安全应急响应中心&#xff08;SRC, Security Response Center&#xff09;&#xff0c;是企业用于对外接收来自用户发现并报告的产品安全漏洞的站点。说白了&#xff0c;就是连接白帽子和企业的平台&#xff0c;你去合法提交漏洞给他们&#xff0…

数据结构之树和森林

数据结构之树和森林 1、树的存储结构2、树和森林的遍历2.1、树的遍历2.2、森林的遍历 3、树、森林和二叉树之间的相互转换 数据结构是程序设计的重要基础&#xff0c;它所讨论的内容和技术对从事软件项目的开发有重要作用。学习数据结构要达到的目标是学会从问题出发&#xff0…

一键拥有你的GPT4

这几天我一直在帮朋友升级ChatGPT&#xff0c;现在已经可以闭眼操作了哈哈&#x1f61d;。我原本以为大家都已经用上GPT4&#xff0c;享受着它带来的巨大帮助时&#xff0c;但结果还挺让我吃惊的&#xff0c;还是有很多人仍苦于如何进行升级。所以就想着写篇教程来教会大家如何…

记录xxl-job重复执行引发业务问题

业务问题描述 1.创建运单&#xff0c;发现重复&#xff08;同一个车架号两条记录&#xff09; 2.通知重复反馈&#xff0c;A系统读取中间表状态为未处理数据&#xff0c;推送到B系统 原因分析 1.以上两个问题都是xxljob定时执行的 2.通过日志分析&#xff0c;读取中间表数…