百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

如何用python制作一个QQ聊天记录的云图

toyiye 2024-06-21 12:05 10 浏览 0 评论

想知道你可以的女朋友或者你的gay友整天在聊些什么东西吗?是学习,学习,还是学习吗?那就一起动手做一个这样的云图来看一下吧。

前提准备:

pycharm + python3.5

1、安装wordcloud和jieba


 pip install wordcloud
 pip install jieba

wordcloud是用于生成词云图的模块,jieba是一个强大的分词库,并且完美支持中文分词。

在通过pip安装wordcloud的时候,可能会出错,这时候可以去网上下载个轮子进行本地安装。地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/#wordcloud

2、从QQ中导出一份聊天记录

不会的可以参考百度:https://jingyan.baidu.com/article/2a138328541fcb074a134f81.html

导出格式选择txt就可以了,这样就有了用于制作云图的文本文件,同理,如果是制作其他内容的云图,这里的聊天记录文件也可以用其他的文本文件来替代。

3、在pycharm创建项目架构



其中data里面存放的ignore_words.txt填写几个需要忽略的词语,如姓名、一些助词或者一些比较隐私的东西,否则一些其他的文字会由于出现频率较高而显示在云图中。

record.txt存放的是聊天记录。

IMG.JPG是准备的一张图片,最终的云图将会按照这个图片的形状生成。

Yuan.otf是字体文件,防止出现无法识别中文的问题。

代码编写:

1、导入模块


# coding:utf-8
from scipy.misc import imread
from wordcloud import WordCloud
import jieba.posseg as pseg
import matplotlib.pyplot as plt
from scipy.misc import imread
import re


2、筛选词汇

下面这个函数的作用就是读取聊天记录和忽略词汇的文件,然后遍历整个聊天记录文件,遇到空格或者正则匹配到时间戳就跳过;然后将预处理之后的所有行数据进行分词处理,只选择名词词性的词汇。


def createText():
 record_file = open('./data/record.txt', 'r', encoding='utf-8')
 ignore_file = open('./data/ignore_words.txt','r', encoding='utf-8')
 
 # strip()去除字符前面的空格
 line_list = []
 for line in record_file:
 if line.isspace():
 continue
 if re.match(r'(\d{4}-\d{1,2}-\d{1,2})',line[:10]) is not None:
 continue
 line_list.append(line.strip())
 
 stop_words = set(line.strip() for line in ignore_file)
 
 word_list = []
 
 for line in line_list:
 word_map = pseg.cut(line)
 for word, type in word_map:
 if word not in stop_words and type == 'n':
 word_list.append(word)
 
 record_file.close()
 ignore_file.close()
 return ' '.join(word_list)


3、生成云图

通过将上面生成的文件传递到下面这个函数中,就可以根据词汇出现的频率来生成云图了。


def createCloud(text):
 mask_img = imread('./IMG.JPG')
 wordCloud = WordCloud(font_path='./Yuan.otf', background_color='#fff', mask=mask_img).generate(text)
 plt.imshow(wordCloud)
 plt.axis('off')
 plt.show()

其中关于WordCloud的参数有很多,可以根据需要来设置:


font_path : string //字体路径,需要展现什么字体就把该字体路径+后缀名写上,如:font_path = '黑体.ttf'
 
width : int (default=400) //输出的画布宽度,默认为400像素
 
height : int (default=200) //输出的画布高度,默认为200像素
 
prefer_horizontal : float (default=0.90) //词语水平方向排版出现的频率,默认 0.9 (所以词语垂直方向排版出现频率为 0.1 )
 
mask : nd-array or None (default=None) //如果参数为空,则使用二维遮罩绘制词云。如果 mask 非空,设置的宽高值将被忽略,遮罩形状被 mask 取代。除全白(#FFFFFF)的部分将不会绘制,其余部分会用于绘制词云。如:bg_pic = imread('读取一张图片.png'),背景图片的画布一定要设置为白色(#FFFFFF),然后显示的形状为不是白色的其他颜色。可以用ps工具将自己要显示的形状复制到一个纯白色的画布上再保存,就ok了。
 
scale : float (default=1) //按照比例进行放大画布,如设置为1.5,则长和宽都是原来画布的1.5倍。
 
min_font_size : int (default=4) //显示的最小的字体大小
 
font_step : int (default=1) //字体步长,如果步长大于1,会加快运算但是可能导致结果出现较大的误差。
 
max_words : number (default=200) //要显示的词的最大个数
 
stopwords : set of strings or None //设置需要屏蔽的词,如果为空,则使用内置的STOPWORDS
 
background_color : color value (default=”black”) //背景颜色,如background_color='white',背景颜色为白色。
 
max_font_size : int or None (default=None) //显示的最大的字体大小
 
mode : string (default=”RGB”) //当参数为“RGBA”并且background_color不为空时,背景为透明。
 
relative_scaling : float (default=.5) //词频和字体大小的关联性
 
color_func : callable, default=None //生成新颜色的函数,如果为空,则使用 self.color_func
 
regexp : string or None (optional) //使用正则表达式分隔输入的文本
 
collocations : bool, default=True //是否包括两个词的搭配
 
colormap : string or matplotlib colormap, default=”viridis” //给每个单词随机分配颜色,若指定color_func,则忽略该方法。


4、完整代码


# coding:utf-8
from scipy.misc import imread
from wordcloud import WordCloud
import jieba.posseg as pseg
import matplotlib.pyplot as plt
from scipy.misc import imread
import re
 
def createText():
 record_file = open('./data/record.txt', 'r', encoding='utf-8')
 ignore_file = open('./data/ignore_words.txt','r', encoding='utf-8')
 
 # strip()去除字符前面的空格
 line_list = []
 for line in record_file:
 if line.isspace():
 continue
 if re.match(r'(\d{4}-\d{1,2}-\d{1,2})',line[:10]) is not None:
 continue
 line_list.append(line.strip())
 
 stop_words = set(line.strip() for line in ignore_file)
 
 word_list = []
 
 for line in line_list:
 word_map = pseg.cut(line)
 for word, type in word_map:
 if word not in stop_words and (type == 'n' or type == 'v'):
 word_list.append(word)
 
 ignore_file.close()
 record_file.close()
 
 return ' '.join(word_list)
 
def createCloud(text):
 mask_img = imread('./IMG.JPG')
 wordCloud = WordCloud(font_path='./Yuan.otf', background_color='#fff', mask=mask_img).generate(text)
 plt.imshow(wordCloud)
 plt.axis('off')
 plt.show()
 
 
if __name__ == '__main__':
 txt = createText()
 createCloud(txt)


关于云图的应用有很多,用于ppt展示、写博客、可视化文字等等,可以根据自身需要来修改代码。

最后小编准备了一份Python学习资料,给那些正在学习Python的同学,或者准备学习Python的同学,关注,转发,私信小编“01”即可免费获取!

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码