微信聊天记录生成词云图

微信聊天记录生成词云图

  1. 基本材料准备

电脑微信客户端、手机微信客户端、电脑mumu安卓模拟器(安装微信和RE文件管理器)、sqlcipher.exe、idea

  1. 获取微信聊天记录
  1. 电脑微信客户端备份聊天记录

微信左下角点击备份与恢复按钮出现如下弹窗

然后点击左侧备份聊天记录至电脑,需在手机确认(可以选择部分聊天记录也可以全部记录),注意手机要与电脑在同一网络中

备份完成后,点击管理备份文件出现如下弹窗

记住备份文件存储位置,以及备份的文件

2、恢复电脑备份记录到mumu安卓模拟器中微信中

先设置mumu模拟器,点击模拟器左上角进入设置中心,在基本设置中开启Root权限,在属性设置中随机一个IMEI编码,记录这个编码,后续会用到,然后点击保存并关闭。

然后登录模拟器的微信

电脑微信选择恢复聊天记录至手机,则会恢复刚才备份的记录到模拟器的微信中

3、在mumu模拟器中找到备份的聊天记录库

打开RE文件管理器找到以下路径/data/data/com.tencent.mm/MicroMsg/,在这个路径下打开对应的账号的文件夹,在文件夹中找到EnMicroMsg.db。

然后鼠标左键长点击这个文件会出现复制按钮,点击复制,复制这个db文件到 mumu模拟器与电脑的共享文件夹中(一般都是sdcard下,放在电脑的什么位置 由安装模拟器时自己设置,也可以通过模拟器最下一排功能中文件共享按钮设置)

 这样就获取了聊天记录的数据库

  1. 解密微信聊天数据库
  1. 获取加密库密码

在木木模拟器中打开/data/data/com.tencent.m/shared_prefs中auth_info_key_prefs.xml文件

打开这个文件可以看到

这个_auth_uin标签中对应的值,这个值需要记录下来,作为密码的一部分,通过 1234567890ABCDEF拼接上这个值,进行MD5加密获取小写32位字符后截取 7位作为数据库密码

2、解密数据库

点击选择数据库后会弹出要输入密码的输入框输入上边得到的密码

然后选则Browse Data,再打开message表,这张表里的数据就是聊天记录的数据,这里的数据可以通过工具导出,导出后就随便怎么使用了。

  1. 统计聊天记录
  1. 引入jar包

<dependency>

    <groupId>org.ansj</groupId>

    <artifactId>ansj_seg</artifactId>

    <version>5.1.1</version>

</dependency>

  1. 统计词频代码

import org.ansj.splitWord.analysis.NlpAnalysis;

import java.io.*;

import java.util.*;

public class statistical {

    public static void main(String[] args) throws IOException {

        wordFrequency();

    }

    public static void wordFrequency() throws IOException {

        Map<String, Integer> map = new HashMap<>();

        String article = getString();

        String result = NlpAnalysis.parse(article).toStringWithOutNature();

        String[] words = result.split(",");

        for(String word: words){

            String str = word.trim();

            // 过滤空白字符

            if (str.equals(""))

                continue;

                // 过滤一些高频率的符号

            else if(str.matches("[||.|||+|-|“|”|||\\s]"))

                continue;

                // 此处过滤长度为1str

            else if (str.length() < 2)

                continue;

            if (!map.containsKey(word)){

                map.put(word, 1);

            } else {

                int n = map.get(word);

                map.put(word, ++n);

            }

        }

        Iterator<Map.Entry<String, Integer>> iterator = map.entrySet().iterator();

        while (iterator.hasNext()){

            Map.Entry<String, Integer> entry = iterator.next();

            System.out.println(entry.getKey() + ": " + entry.getValue());

        }

        List<Map.Entry<String, Integer>> list = new ArrayList<>();

        Map.Entry<String, Integer> entry;

        while ((entry = getMax(map)) != null){

            list.add(entry);

        }

        System.out.println(Arrays.toString(list.toArray()));

    }

    /**

     * 找出mapvalue最大的entry, 返回此entry, 并在map删除此entry

     * @param map

     * @return

     */

    public static Map.Entry<String, Integer> getMax(Map<String, Integer> map){

        if (map.size() == 0){

            return null;

        }

        Map.Entry<String, Integer> maxEntry = null;

        boolean flag = false;

        Iterator<Map.Entry<String, Integer>> iterator = map.entrySet().iterator();

        while (iterator.hasNext()){

            Map.Entry<String, Integer> entry = iterator.next();

            if (!flag){

                maxEntry = entry;

                flag = true;

            }

            if (entry.getValue() > maxEntry.getValue()){

                maxEntry = entry;

            }

        }

        map.remove(maxEntry.getKey());

        return maxEntry;

    }

    /**

     * 从文件中读取待分割的文章素材.

     * 文件内容来自简书热门文章: https://www.jianshu.com/p/5b37403f6ba6

     * @return

     * @throws IOException

     */

    public static String getString() throws IOException {

        FileInputStream inputStream = new FileInputStream(new File("E://ciyuntu/android/db/2.txt"));

        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));

        StringBuilder strBuilder = new StringBuilder();

        String line;

        while((line = reader.readLine()) != null){

            String s = "";

            int n = 0;

            for(int i = 0; i < line.length(); i++) {

                n = (int)line.charAt(i);

                if(19968 <= n && n <40869) {

                    s+=line.charAt(i);

                }

            }

            strBuilder.append(s);

        }

        reader.close();

        inputStream.close();

        return strBuilder.toString();

    }

}

  1. 生成词云图
  1. 引入jar包

<dependency>

    <groupId>com.kennycason</groupId>

    <artifactId>kumo-core</artifactId>

    <version>1.27</version>

</dependency>

<dependency>

    <groupId>com.kennycason</groupId>

    <artifactId>kumo-tokenizers</artifactId>

    <version>1.27</version>

</dependency>

  1. 生成词云图代码

package com.java.code.citu;

import com.kennycason.kumo.CollisionMode;

import com.kennycason.kumo.WordCloud;

import com.kennycason.kumo.WordFrequency;

import com.kennycason.kumo.bg.CircleBackground;

import com.kennycason.kumo.bg.PixelBoundryBackground;

import com.kennycason.kumo.font.KumoFont;

import com.kennycason.kumo.font.scale.SqrtFontScalar;

import com.kennycason.kumo.nlp.FrequencyAnalyzer;

import com.kennycason.kumo.nlp.tokenizers.ChineseWordTokenizer;

import com.kennycason.kumo.palette.LinearGradientColorPalette;

import java.awt.*;

import java.io.IOException;

import java.util.*;

import java.util.List;

public class citu {

    public static void main(String[] args) throws IOException {

        createWordCountPic();

    }

    private static void createWordCountPic() throws IOException {

        FrequencyAnalyzer frequencyAnalyzer = new FrequencyAnalyzer();

        frequencyAnalyzer.setWordFrequenciesToReturn(600);

        frequencyAnalyzer.setMinWordLength(2);

        frequencyAnalyzer.setWordTokenizer(new ChineseWordTokenizer());

        // 可以直接从文件中读取

        //List<WordFrequency> wordFrequencies = frequencyAnalyzer.load(getInputStream("E://ciyuntu/android/db/1.txt"));

        List<WordFrequency> wordFrequencies = new ArrayList<>();

        String strValue = "嗯嗯=3060, 破涕为笑=2417, 今天=1831";

        String[] split = strValue.split(", ");

        String word = "";

        int count = 0;

        for (int i = 0; i < split.length; i++) {

            String[] wordInfo = split[i].split("=");

            word = wordInfo[0];

            count = Integer.valueOf(wordInfo[1]);

            wordFrequencies.add(new WordFrequency(word, count));

        }

        //加入分词并随机生成权重,每次生成得图片都不一样

        //test.stream().forEach(e-> wordFrequencies.add(new WordFrequency(e,new Random().nextInt(test.size()))));

        //此处不设置会出现中文乱码

        java.awt.Font font = new java.awt.Font("STSong-Light", 2, 18);

        //设置图片分辨率

        Dimension dimension = new Dimension(1360, 1020);

        //此处的设置采用内置常量即可,生成词云对象

        WordCloud wordCloud = new WordCloud(dimension, CollisionMode.PIXEL_PERFECT);

        //设置背景图片

        wordCloud.setBackground(new PixelBoundryBackground("E://1.png"));

        //设置边界及字体

        wordCloud.setPadding(5);

        //因为我这边是生成一个圆形,这边设置圆的半径

        //wordCloud.setBackground(new CircleBackground(255));

        wordCloud.setFontScalar(new SqrtFontScalar(12, 42));

        //设置词云显示的三种颜色,越靠前设置表示词频越高的词语的颜色

        wordCloud.setColorPalette(new LinearGradientColorPalette(Color.RED, Color.BLUE, Color.GREEN, 30, 30));

        wordCloud.setKumoFont(new KumoFont(font));

        wordCloud.setBackgroundColor(new Color(255, 255, 255));

        wordCloud.build(wordFrequencies);

        //生成词云图路径

        wordCloud.writeToFile("E:\\wordCount.png");

    }

}

资源:

木木模拟器下载地址:MuMu模拟器官网_安卓模拟器_网易MuMu手游模拟器

下载地址:sqlcipher.exe,简易的数据库客户端-Android文档类资源-CSDN下载

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

txt文件英语单词词频统计

目录 一、需求分析 二、相关库列表 三、代码在此 四、一些问题 一、需求分析 把txt文件里的英语单词按照出现次数排序并生成csv文件&#xff0c;如果次数相同按照单词的md5值来排序 二、相关库列表 pandasrecollectionshashlib 三、代码在此 打开文件 txt_file open(f…

从文本中提取单词生成单词本

词频统计及单词提取 对一段英文文本做词频统计&#xff0c;提取单词&#xff0c;查词&#xff0c;最终生成一个单词本&#xff0c;生成的单词本可以导入Anki中学习。 问题分析 考虑到单词的变形&#xff0c;分词后先做词形还原&#xff0c;之后再进行词频统计。去除掉较为简…

给英文文章加音标,建生词表

先上个效果图 10. Thats WhyJimmy/ˈʤɪmi/ 吉米more/mɔː/ adj.更多的adv.更started/ˈstɑːtɪd/[start]v.开始&#xff0c;着手&#xff0c;发动were/wɜː/ (be/biː/ was/were been) v.是&#xff0c;存在painting/ˈpeɪntɪŋ/ n.画&#xff0c;绘画(艺术)different/…

生词提取方法,学以致用(用于生成学习计划)

为了能够更加便捷的吸收英文文章的养分,从下周开始,计划边读文章,边学习。在拿到一片英文材料后,首先识别其中已经知道的单词,然后识别自己不会的单词。根据不会的单词制定单词学习计划。单词掌握以后,学习内容,既确保学以致用,又确保能够吸收到优秀文章的养分。 我的初…

英语词缀与英语派生词词典读书笔记,并总结输出思维导图

大部分构词法知识在词根章节已说到&#xff0c;这里以词缀相关知识点作为重点讲述&#xff1b; 本文摘抄总结于 “英语词缀与英语派生词词典 - 李武平“ 往期文章&#xff1a; 英语词根与说文解字词典读书笔记&#xff0c;并总结输出思维导图 目录 思维导图 一、词缀概述…

英语ai文章生成器,英语文章生成器在线

英语AI文章生成器是一种基于人工智能技术的语言处理工具&#xff0c;能够自动生成各类英语文章。然而&#xff0c;由于其自动化特性&#xff0c;有时候生成的文章可能存在一些问题&#xff0c;比如语法错误、逻辑不清等。那么&#xff0c;如何提高英语AI文章生成器的写作质量呢…

文本挖掘之WordCloud+Python3快速生成中英文词云图

引言: “词云”&#xff0c;又称文字云&#xff0c;是由词汇组成类似云的彩色图形。可对网络文本中出现频率较高的“关键词”予以视觉上的突出&#xff0c;形成"关键词云层"或"关键词渲染"&#xff0c;从而过滤掉大量的文本信息&#xff0c;使浏览网页者只…

python统计文章中高频词汇并生成词云

LZ的同事写的文章经常被公司或者上级部门发表&#xff0c;LZ对此觉得同事写的文章一定有什么套路或者经常使用的词句&#xff0c;所以LZ收集了6篇同事的文章希望统计出其文章的高频词语以此可以效仿。 首先&#xff0c;把6篇文章放在同一个Text文档中&#xff0c;准备好词云需…

掌阅科技让数字化阅读更便捷

阅读是快速让人提高的方法,不需要你花很多的钱只需要你沉下心耐着性子从书中得到知识与经验,掌阅科技作为一家在国内领先的数字化阅读平台更是为无数爱好阅读的人提供便利。古书有云“书中自有颜如玉,书中自有黄金屋”。现在社会的阅读可能没有颜如玉和黄金屋,但是阅读还是可以…

掌阅科技与厦门航空联合推出首个机上阅读服务“天际悦读”

【TechWeb】6月27日消息&#xff0c;掌阅科技和厦门航空今日联合宣布&#xff0c;将推出全国首个常态化空中阅读服务“天际阅读”。 厦门航空空中乘务部副总经理张玉晶指出&#xff0c;厦航经过对旅客画像、出行习惯与需求&#xff0c;以及行业发展趋势的综合分析后&#xff0c…

高清3D人体解剖图谱

目前见过的高清3D人体模型最好的一个了&#xff0c;截图供大家欣赏&#xff0c;这个可能我通过微信传的时候像素有损失&#xff0c;大家大量&#xff0c;我截取的当然也只有平面图&#xff0c;3D的效果&#xff0c;请恕我的无能&#xff0c;还不知道3D的人体模型要怎么截取。话…

PXI机箱大解剖

上一节给大家介绍了PXI的背景和历史&#xff0c;让我们对PXI的起源有了更多的认识。同时对PXI机箱做了初步介绍。本节将会从10个方面为大家详细解剖PXI机箱。 PXI槽位序号 每一个PXI槽位都有一个对应的槽位号(大部分情况下)被标注在PXI插槽下方。一般为从左到右排列。 图1.3…

经典大脑解剖网站大全

本文首发在个人博客上&#xff08;7988888.xyz&#xff09;&#xff0c;此文章中所有链接均通过博客进行访问。 根据互联网公开资源&#xff0c;整理了部分大脑解剖学习资源网站&#xff0c;仅供学习参考。 在脑科学的研究中&#xff0c;大脑解剖学知识的了解是必不可少的&am…

视网膜生理解剖

Cornea&#xff1a;角膜 Pupil&#xff1a;瞳孔 Lris&#xff1a;虹膜 Lens&#xff1a;晶状体 Retina&#xff1a;视网膜 Macula&#xff1a;黄斑 Optic nerve&#xff1a;视神经 视网膜&#xff08;retina&#xff09;居于眼球壁的内层&#xff0c;是一层透明的薄膜。视网膜…

Maven仓库解剖

介绍 分类 项目从仓库找包顺序 各个仓库的介绍 本地仓库 私服 nexus私服 阿里云云效制品仓库 中央仓库 公共仓库 演示 介绍 所谓的maven仓库&#xff0c;其实就是存放各个依赖包的文件夹&#xff0c;maven不仅是构建工具和依赖管理工具以及项目信息管理工具&#xff…

冠状动脉解剖(CTA)

以下的认知&#xff0c;也是通过其他的文章东挪西凑出来的&#xff0c;结合自己的理解归纳一下。后续还会更正&#xff0c;也望大家指正。 1 基本概念 左冠状动脉&#xff08;Left Coronary artery&#xff09; 左冠状动脉主干&#xff1a;Left Main Artery&#xff08;LM&a…

解剖常见电子元器件,了解其内部结构

作者&#xff1a;TubeTimeUS 排版&#xff1a;晓宇 看一下LED&#xff0c;电阻&#xff0c;电容&#xff0c;二极管等这些迷人且很有教育意义的横截面&#xff0c;喜欢请留言点赞并转发&#xff0c;感谢芯片之家小伙伴的支持&#xff01; 1、电容 这是表面贴装电容的横截面&am…

大脑解剖图(纯图片)

因为上一个排版有问题&#xff0c;本来是左图右字的&#xff0c;但是它一发布就全都乱套了&#xff0c;修改了很多次也没改成&#xff0c;所以就截图重新发布了一个。 图片均来自《神经科学——探索脑》中文版&#xff08;第2版&#xff09;一书&#xff0c;Mark F.Bear [美]…

计算机内存和u盘存储原理,解剖U盘存储结构原理

原标题&#xff1a;解剖U盘存储结构原理 U盘的结构比较简单&#xff0c;主要是由USB插头、主控芯片、稳压IC(LDO)、晶振、闪存(FLASH)、PCB板、帖片电阻、电容、发光二极管(LED)等组成。 U盘的基本工作原理也比较简单&#xff1a;USB端口负责连接电脑&#xff0c;是数据输入或输…

Milvus 数据处理流程解剖

编者按&#xff1a;本文详细解剖 Milvus 2.0 主要的数据处理流程以及访问接入层&#xff08; Access Layer&#xff09;。 主要数据处理流程 MsgStream 接口 写路径 读路径 DDL 流程 建索引流程 Access Layer 代码 主要数据处理流程 Milvus 2.0 中主要的数据处理流程包括…