python 将微信聊天记录生成词云

问题描述:将微信的聊天记录导出,生成词云,留作纪念。

先看效果:
在这里插入图片描述
非常多的哈哈哈 (◕ˇ∀ˇ◕)

**

第一步:导出微信聊天记录

**

将微信聊天记录导出成文档,知乎上有很多种方法,其中主要是两类,第一种是通过root手机,获取权限;第二种为通过Apple iTunes 备份。

这里选择第二类方法(小米note3不支持root),具体过程也较为简便,感谢知乎**@hangcom**提供的免费工具,万分。
具体过程可移步查看https://zhuanlan.zhihu.com/p/32511173,不再赘述。

导出后,生成文件夹,包含视频、图片和聊天内容子文件,其中视频图片不再多说,单说聊天内容。
聊天内容HTML网页文件,文字内容以js格式保存,名为‘message’的JavaScript文件。
这里需要先将js文件用文本编辑器以txt格式打开,打开后显示包含中英文及各种字符。

这里含有所有的聊天内容。
接下来,对其中的中文汉字进行提取(假设聊天内容都是汉字)。
**

第二步:从聊天记录中提取所有的汉字

import re
import codecs
with codecs.open('*filepath*', 'r' ,encoding = 'utf-8') as file:
    f = file.readline()
    k = re.findall(r'[\u4e00-\u9fa5]+', f)

**

第三步:用jieba分词

import jieba
ls = jieba.lcut(k)
excludes = {"不是", "就是", "这么", "怎么"} 
#此方法可以排除特定词组,(本代码运行过程中excludes失效,未果)改用其他方法实现,方法如下:
for word in ls:
    if len(word)==1: 
        continue
    elif word in ["不是", "就是", "这么", "怎么", "这个", "不能", "什么", "没有"]:
        continue
    else:
        fname = open('jilu', 'a') #新建并追加写入名为'jilu.txt'的文件,不含指定词组
        fname.writelines(word)
fname.close()
#也可以逆向操作,删除指定词组,此外还可以添加定义分词规则

**

第四步:统计词频最高的前10个词(可略

需要统计各词组出现频次,进行排序,并输出。

    for word in ls:
    if len(word)==1:
        continue
    else:
        counts[word] = counts.get(word, 0) +1
items = list(counts.items())
items.sort(key = lambda x:x[1], reverse=True)
for i in range(10):
    word, count = items[i]
    print('{0:<10}{1:>5}'.format(word, count))

**

第五步:wordcloud生成词云

也即最后一步,按照指定图形生成词云。

import wordcloud
txt = ' '.join(ls)
w = wordcloud.WordCloud(font_path = 'msyh.ttc' , width = 1000, height = 700, background_color = 'white') #使用微软雅黑字体
w.generate(txt)
w.to_file('Welove.png')

大功告成,女友甚喜。

展开阅读全文

没有更多推荐了,返回首页