当前位置 博文首页 > 盛夏温暖流年:Python 将 QQ 聊天记录生成词云(分手了如何欢度

    盛夏温暖流年:Python 将 QQ 聊天记录生成词云(分手了如何欢度

    作者:[db:作者] 时间:2021-06-02 16:09

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

    所以,当大家都一致地在这个活动里各种秀恩爱时,我决定走一条不一样的路来为单身狗和刚分手的小伙伴们打打气:时间能改变的,是那些原本就不坚定的东西,未来的路还很长,一切都会过去的~

    言归正传,我们要做的任务是,把 QQ 分手聊天记录导出,使用 Python 分词后做成分开的桃心形状的词云进行展示。听着就很有意思,来吧,开始动手!

    步骤一:创建和导出聊天记录

    1.创建聊天记录内容

    选择 QQ 聊天记录是因为比较简单,而微信导出相对麻烦。考虑到个人隐私问题,我申请了 QQ 小号,和大号之间发了一些分手语录作为提取素材:

    在这里插入图片描述

    2.导出聊天记录

    使用TIM,点击右下角的主菜单,选择“设置”:
    在这里插入图片描述
    选择“消息记录” ->> “安全设置” ->> “打开消息管理器” :
    在这里插入图片描述
    选择需要导出的关系人,右键点击“导出消息记录”:

    在这里插入图片描述
    保存到 F:\csdn 目录下,保存类型选择文本文件,命名为 chat.txt:
    在这里插入图片描述
    第一步导出操作完成。

    步骤二:安装需要的库

    1.安装 jieba 库

    pip install jieba -i https://pypi.douban.com/simple/
    

    在这里插入图片描述
    2.安装 Wordcloud 库

    使用 pip install 安装 Wordcloud 会有问题,所以我们先下载到本地:

    Wordcloud 下载链接

    选择适合自己环境的安装包(cp 后面的数字代表 Python 版本,一定要对应起来),下载到 Python 安装目录下的 Scripts 文件夹中:
    在这里插入图片描述

    打开cmd,进入该路径,执行安装命令:

    pip install wordcloud-1.8.1-cp38-cp38-win_amd64.whl
    

    安装成功截图如下:
    在这里插入图片描述

    步骤三:代码实现

    选择一张分开的心图片:
    在这里插入图片描述
    在选择生成配色方案的图片时,要求背景白色,边缘越清晰越好,不满足要求的话可以用PS处理一下。

    qqChat.py 代码实现:

    import matplotlib.pyplot as plt
    from wordcloud import WordCloud
    import jieba
    from wordcloud import WordCloud, ImageColorGenerator, STOPWORDS
    import os
    import numpy as np
    import PIL.Image as Image
     
    newtext = []
    #打开聊天记录文件
    for word in open('F:\\csdn\\chat.txt', 'r',encoding='utf-8'):
        tmp = word[0:4]
        #过滤掉聊天记录的时间和qq名称
        if (tmp == "2021"):
            continue
        tmp = word[0:2]
        #print(tmp)
        newtext.append(word)
     
    #将过滤后的文本重新写入文件并保存
    with open('F:\\csdn\\chat_final.txt', 'w', encoding='utf-8') as f:
        for i in newtext:
            f.write(i)
    #打开新生成的聊天记录文件
    text = open('F:\\csdn\\chat_final.txt', 'r',encoding = 'utf-8').read()
    word_jieba = jieba.cut(text, cut_all=True)
    word_split = " ".join(word_jieba)
    #去掉一些意义不大的字
    stop_words = set(STOPWORDS)
    stop_words.add("的")
    stop_words.add("我")
    stop_words.add("你")
    stop_words.add("是")
    stop_words.add("就")
    #根据心形图片生成配色方案,这里的路径要配置正确
    alice_coloring = np.array(Image.open(os.path.join('F:\\','heart.jpg')))
    my_wordcloud = WordCloud(scale=16,background_color="white", max_words=800, stopwords=stop_words, mask=alice_coloring,max_font_size=80, random_state=42,font_path='C:/Windows/Fonts/simhei.ttf')\
        .generate(word_split)
    image_colors = ImageColorGenerator(alice_coloring)
    plt.imshow(my_wordcloud.recolor(color_func=image_colors))
    plt.imshow(my_wordcloud)
    plt.axis("off")
    plt.show()
    

    可以根据自己的需求调整参数,比如如果有一些语气词和无意义的字可以通过配置 stopwords 来进行过滤,最后输入命令运行代码:

    python qqChat.py
    

    效果如下,还是很漂亮的。
    在这里插入图片描述
    词云里面频率最高的几个词分别是“爱”,“自己”,“喜欢”,也恰恰是我想表达的:不管一段爱情有多么甜蜜或多么悲伤,始终都不能失去自己,哪怕说再见也要保持骄傲的姿态,每一段人生经历都有它的意义和价值,平和地接受结果就好了。

    最后从分手语录里面挑一句最喜欢的送给大家:

    我承认定数,笃信所有的遇见和错过,都自有旨趣。
    我提醒自己,这世上风物辽阔,日月有期,不止一恨和一爱,还有四海与四季。
    至于冗杂的感情,我只奉行一句:“我用真心待你,但不执着于你。活在缘分中,而非关系里。”