用到的知识点

  1. python读写文件
  2. python正则表达式过滤无用信息
  3. jieba分词自定义字典
  4. 停用词筛选、统计词频
  5. 调用wordcloud绘制词云

第一步

从电脑版蛐蛐导出聊天记录。(手机一般不可以)

点击消息管理,右键点击想导出的联系人

点击导出消息记录即可,选择保存方式为.txt

这里是在电脑消息记录和手机同步的情况下的操作。如果在自己不常用的电脑上可能消息记录并不全。需要手机进行消息记录同步,网上也有教程。


txt文件格式是这样子滴,xxx是昵称

第二步

时间和昵称是无用文本消息,需要进行过滤【1,2】。

emmm先来用到的python包

import jieba
import matplotlib.pyplot as plt
from wordcloud import WordCloud
import numpy as np
import PIL.Image as Image
import re

读写文件和正则表达式过滤的代码如下:

with open('2-month.txt', encoding="utf8") as fp:text = fp.read()text1 = re.sub(r"\d{4}-\d{2}-\d{2} \d{1,2}:\d\d:\d\d|[表情]|[图片]|\[|\]", "", text)  # 得到过滤时间后的文本
text2 = text1.replace('y','xxx') #y是原本的昵称,xxx是需要替换为的字符串
fh = open('2_clean_temp.txt', 'w', encoding='utf-8')
fh.write(text2)
fh.close()

Python 正则表达式|菜鸟教程
python re模块(正则表达式) sub()函数详解
简单来说,sub函数传入三个必选参数,分别是pattern, repl, string

pattern

模式字符串 ,即要匹配的字符串
代码中

"\d{4}-\d{2}-\d{2} \d{1,2}:\d\d:\d\d|[表情]|[图片]|\[|\]"

表示匹配4位整数-2位整数-2位整数 1或2位整数:2位整数:2位整数 ------匹配时间
[表情] 和 [图片] ------匹配txt无法显示的表情和图片

repl

要替换为的字符串,代码中替换为空字符串

string

要处理的文本

过滤完成后将文本保存

第三步

接着打开过滤后的文本进行jieba分词,同时定义自己的词典。即某些词不会被分开【3】

你们肯定会有一些属于你们之间的称呼哈哈哈哈,或者是一些地名等等,为了不让它们被分开,所以定义自己的词典。

with open('2_clean_temp.txt', encoding="utf8") as fp:text1 = fp.read()
jieba.load_userdict("./dict.txt")#加载自定义字典
word_list = jieba.lcut(text1, cut_all=False)  # 分词
# print(word_list) # 查看分词结果,更新自定义词典

词典格式为:一个词占一行;每一行分三部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒。

例如:

这里用新建txt文件作为词典比较方便。

jieba分词

jieba分词详解
有三种匹配模型,精确模式、全模式和搜索引擎模式:

jieba.cut(sentence,cut_all=False,HMM=True) # 精确模式
jieba.cut(sentence,cut_all=True,HMM=True) # 全模式
jieba.cut_for_search (sentence, HMM=True) # 搜索引擎模式

得到结果

sentence = "今天天气真好。"
#---------------result----------------
'今天天气 真 好' # 精确模式
'今天 今天天气 天天 天气 真好' # 全模式
'今天 天天 天气 今天天气 真 好' # 搜索引擎模式

如果调用lcut,则得到list结果

第四步

删除停用词并统计词频方便后续词云绘制【4】

word_count={} #定义字典进行存储,较为方便
stopwords = [line.strip() for line in open("stopword.txt",encoding="UTF-8").readlines()] #加载停用词,逐行读取
for word in word_list:if word not in stopwords: #如果不在停用词列表中word_count[word] = word_count.get(word, 0) + 1 #就将次数加一
items = list(word_count.items())
items.sort(key=lambda x: x[1], reverse=True) #进行排序
dictItems = dict(items) #重新转换为字典,绘制词云要用到

这里停用词用到哈工大的停用词列表,自己再添加了一些。
中文停用词表——哈工大停用词表
可以自己新建txt文件,将停用词复制进去。

第五步

用wordcloud绘制词云

image_background = Image.open('2.jpg')
MASK = np.array(image_background)font=r'C:\\Windows\\Fonts\\simhei.ttf'
my_wordcloud = WordCloud(background_color="white", max_words=500, max_font_size=45,font_path=font,scale=20,mask =MASK).generate_from_frequencies(dictItems)plt.imshow(my_wordcloud)  # 显示词云图
plt.axis('off') # 是否显示x轴、y轴下标
plt.show()

如果只想得到矩形图片的词云,例如:

那就不需要前两行代码

如果想生成这样效果的:

那就需要抠图。需要将想要词云覆盖的部分抠出来,其他部分设置为白色背景。写入前两行代码,以及调用如下代码:

my_wordcloud = WordCloud(background_color="white", max_words=500, max_font_size=45,font_path=font,scale=20,mask =MASK).generate_from_frequencies(dictItems)

Python之wordcloud库使用

一般来说。词云的清晰度可以通过scale这个参数调节
或者根据图片的分辨率、大小,调节max_words和max_font_size两个参数调整,得到字体清晰的词云

python词云库wordcloud的使用方法与实例详解
用到wordcloud的函数:generate_from_frequencies(dictItems)。这是根据词频绘制

其实也可以直接根据文本进行绘制,但是可能得不到自己想要的效果。如 generate_from_text(text)

为了显示中文,需要自己将字体路径加进来
font=r'C:\\Windows\\Fonts\\simhei.ttf' 路径都是C:\Windows\Fonts\,需要什么字体调整后面的simhei.ttf’即可,这个是黑体。

全部代码

import jieba
import matplotlib.pyplot as plt
from wordcloud import WordCloud
import numpy as np
import PIL.Image as Image
import re'''
保存过滤时间后的文本
'''
with open('2-month.txt', encoding="utf8") as fp:text = fp.read()text1 = re.sub(r"\d{4}-\d{2}-\d{2} \d{1,2}:\d\d:\d\d|[表情]|[图片]|\[|\]", "", text)  # 得到过滤时间后的文本
text2 = text1.replace('渡','王彦景')
fh = open('2_clean_temp.txt', 'w', encoding='utf-8')
fh.write(text2)
fh.close()
'''
进行结巴分词
'''
with open('2_clean_temp.txt', encoding="utf8") as fp:text1 = fp.read()
jieba.load_userdict("./dict.txt")#加载自定义字典
word_list = jieba.lcut(text1, cut_all=False)  # 分词
# print(word_list)word_count={}
stopwords = [line.strip() for line in open("stopword.txt",encoding="UTF-8").readlines()]
for word in word_list:if word not in stopwords:word_count[word] = word_count.get(word, 0) + 1
items = list(word_count.items())
items.sort(key=lambda x: x[1], reverse=True)
dictItems = dict(items)
# print(dictItems)
image_background = Image.open('2.jpg')
MASK = np.array(image_background)font=r'C:\\Windows\\Fonts\\simhei.ttf'
my_wordcloud = WordCloud(background_color="white", max_words=500, max_font_size=45,font_path=font,scale=20,mask =MASK).generate_from_frequencies(dictItems)plt.imshow(my_wordcloud)  # 显示词云图
plt.axis('off') # 是否显示x轴、y轴下标
plt.show()

到此就结束啦,俩人都很傻哈哈哈哈,情人节一天没咋理对方,都在制作情人节礼物哈哈哈哈。
到了晚上才发现我给她做了词云,她给我做了音乐视频嘿嘿。
这是最终我做的视频的效果:附上b站链接

情人节礼物------用她的照片和我们的聊天记录生成词云~相关推荐

  1. Python将我与王心凌的QQ聊天记录,生成词云(情人节的后续)

    在这个情人节前夕,我把现任对象回收掉了,这段感情积攒了太多的失望,也给了我太多的伤害,所以我看到这个活动的第一反应是拒绝的.然而人生嘛,最重要的就是体验,沉浸在过去的回忆里没有意义,积极面对才能让自己 ...

  2. 适合送女朋友的情人节礼物?畅销火热的好物分享

    这不马上就到2.14情人节了吗,大家都准备好情人节礼物送给女/男朋友了吗?如果还没有,不妨来看看我为大家推荐的几款畅销火热的好物,总有一款是喜欢的. 一.南卡小音舱蓝牙耳机 蓝牙耳机了解一下,很多人都 ...

  3. 情人节礼物推荐,送给男朋友的情人节礼物

    2022年的情人节马上就要到了,又到了很多女生头疼的时候,因为不知道送什么礼物比较好,别小看送礼物这件事,一份好的情人节礼物,不仅能让男友感受到你的用心,还能成为爱情的保鲜剂之一,所以挑选一件好的礼物 ...

  4. HTML5适合的情人节礼物,学生送什么情人节礼物?适合学生的情人节礼物有哪些?...

    情人节到了,很多在校的学生都开始积极准备过情人节了.一般情况下,学生都是靠父母给钱,因此,很多学生囊中羞涩.那么,学生送什么情人节礼物?适合学生的情人节礼物有哪些? 学生送什么情人节礼物 一般来说学生 ...

  5. 女生最喜欢的情人节礼物,华为nova高清图赏

    每年的2月14日对于情侣们来说都是一个重要的日子,因为这一天是西方传统节日情人节.在这一天,除了要与心爱的人共同度过之外,互送情人节礼物也是必不可少的事情,尤其是男生为了获得女生的欢心,更是会精心挑选 ...

  6. NLP之WordCloud:基于jieba+matplotlib库对一段文本生成词云图~~情人节最好的礼物(给你一张过去的词云图,看看那时我们的爱情)

    NLP之WordCloud:基于jieba+matplotlib库对一段文本生成词云图~~情人节最好的礼物(给你一张过去的词云图,看看那时我们的爱情) 目录 输出词云图结果 输出文本统计 设计思路 实 ...

  7. html玫瑰花效果代码,html5渲染3D玫瑰花情人节礼物js特效代码

    情人节马上就要到来了,这里给程序员前端设计师们献上一个,html5渲染而成的3D玫瑰花js效果,可以作为虚拟的情人节礼物送给自己的爱人.支持html5的浏览器查看. 查看演示 下载资源: 16 次 下 ...

  8. 洛谷——P2525 Uim的情人节礼物·其之壱

    P2525 Uim的情人节礼物·其之壱 题目描述 情人节到了,Uim打算给他的后宫们准备情人节礼物.UIm一共有N(1<=N<=9)个后宫妹子(现充去死 挫骨扬灰!). 为了维护他的后宫的 ...

  9. 洛谷——P2524 Uim的情人节礼物·其之弐

    P2524 Uim的情人节礼物·其之弐 题目描述 前传:详见洛谷P2525 Uim成功地按照顺序将礼物送到了N个妹子的手里并维持她们的和谐. Uim现在想知道,他最终选择的顺序是所有给N个妹子送礼顺序 ...

最新文章

  1. java注解简单实例
  2. 匈牙利命名法的优缺点
  3. 外观模式和代理模式的联系和区别_设计模式之代理设计模式
  4. Java二十三设计模式之------迭代子模式
  5. Dummies Guide to Trains in Japan
  6. Java软件开发流程
  7. 【1194】移动路线
  8. 【BZOJ2813】奇妙的Fibonacci(结论,线性筛)
  9. Unity合规检测处理
  10. 安卓各国语言对应缩写和时区查询
  11. frp服务实现内网穿透SSH远程内网虚拟机
  12. R语言ggplot2可视化散点图(scatter plot)、aes函数中的fill参数为连续变量、使用scale_fill_distiller函数自定义指定连续变量的颜色填充方案
  13. system()函数详解
  14. uniapp配合colorUI制作简单的信封
  15. 地理信息系统GIS和增强现实技术AR
  16. Python计算向量夹角:向量夹角计算方法详解
  17. :-1: error: dependent ‘..\camera3d\qss\main.qss‘ does not exist.
  18. 夏令营导师自荐信计算机专业,保研夏令营自荐信
  19. UI自动化测试如何去实现无头模式必踩的坑
  20. ddt python_Python 之数据驱动工具:DDT

热门文章

  1. 【Spring Boot 2.0学习之旅-15】SpringBoot2.0响应式编程
  2. MD5、SHA1、SHA256、SHA512
  3. php扩展 sockets,php sockets扩展安装配置详解
  4. 裸金属服务器启动之PXE与IPXE实践
  5. 多用户MIMO在移动通信系统中的应用
  6. php实现登录验证码_PHP实现登录验证码功能
  7. 操作系统--05输入输出
  8. 修复Microsoft Edge上“无法到达此页面”错误的5种方法
  9. vue3.0+vite跑项目遇到的问题
  10. 怎么用计算机求平均值,电脑教程:计算机平均值怎么求