CBL-XG 发表于 2020-4-12 15:48

python词云-和女朋友的微信聊天记录

本帖最后由 CBL-XG 于 2020-4-12 17:01 编辑

由于疫情,微信的聊天记录比以前多了很多,所以用python看看自己都聊了些什么事
初学python,果然发现我是那个举三反一的困难户~
下面是源码和效果图:
import csv, jieba, re
from itertools import islice
import pandas as pd
import imageio
import matplotlib.pyplot as plt
from wordcloud import WordCloud, ImageColorGenerator


# 从导出的csv格式聊天记录中提取中文存入txt文件中
def csv_to_txt():
    chat_csv = open("my_chat.csv","r",encoding="utf-8") #chatlog.csv 改成自己的聊天记录文件名
    my_chat = csv.reader(chat_csv)
    fp = open("chat.txt", "w+", encoding="utf-8")
    for line in islice(my_chat, 1, None):
      if re.search("[\u4e00-\u9fa5]", line) and len(line) < 50:
            fp.write(line + "\n")
    fp.close()


# 对聊天记录文件进行分词
def cut_words():
    # 把聊天内容读取给content
    fp = open("chat.txt", "r", encoding="utf-8")
    content = fp.read()
    fp.close()
    jieba.load_userdict("custom_dict.txt")# 载入自定义词典(格式:一个词占一行;每行分为:词语、词频(可省略)、词性(可省略),用空格隔开)
    words = jieba.cut(content)# 进行分词,模式:精确模式
    word_L = []# 把分词结果存入word_L中
    # 加载停用词
    with open("stopwords.txt", 'r', encoding="utf-8") as ss:
      stopwords = ss.read()
    # 把符合的词语存入word_L中
    for word in words:
      if word not in stopwords and word != '\n' and len(word) > 1:
            word_L.append(word)
    return word_L


# 生成词云
def word_cloud(words):
    # 对分词结果进行频率统计再转换成字典
    count_word_df = pd.DataFrame({"word":words}).groupby(["word"]).size()
    count_word_dt = count_word_df.to_dict()
    mk = imageio.imread('my_pic.jpg')# 设置词云形状
    mk_color = ImageColorGenerator(mk)# 设置词云颜色
    # 配置词云参数
    wx_wc = WordCloud(
      background_color="white",# 如果是透明背景,设置background_color=None
      mode="RGB",# 如果是透明背景,设置mode="RGBA"
      mask=mk,# 词云形状
      font_path="青鸟华光简胖头鱼.TTF",# 字体可以更改为自己喜欢的字体,在C:\Windows\Fonts文件夹
      scale=3,# 如果输出图片大小不满意,则修改此值
    )
    wx_wc = wx_wc.generate_from_frequencies(count_word_dt)# 把带频率的分词结果导入词云
    wx_wc.to_file("wordcloud.png")# 输出词云图片,未设置颜色

    # plt输出图片
    plt.axis("off")# 关闭坐标轴
    plt.imshow(wx_wc.recolor(color_func=mk_color)) # 设置颜色
    plt.savefig('pltwordcloud.png', dpi=400)# 输出词云图片,以原图片为背景色


def run():
    csv_to_txt()
    words = cut_words()
    word_cloud(words)

if __name__ == '__main__':
    run()
效果图:

=================================================================================
一、如何获取聊天记录
       1.你需要和谁的聊天记录生成词云,就把和她的聊天记录通过电脑版微信备份一下,然后通过安卓模拟器再把她的聊天记录从 电脑版微信 恢复到 模拟器的微信 里面。
       2.通过re或者类似文件管理器找到这个/data/data/com.tencent.mm/MicroMsg路径,下面有一个数字和字母组成名称很长的文件夹,把里面EnMicroMsg.db文件取出到电脑里备用
       3./data/data/com.tencent.mm/shared_prefs路径下有一个auth_info_key_prefs.xml文件,记住里面的_auth_uin值(这个值可能是9位,10位或者负数)备用
       4.打开模拟器的设置界面,记住IMEI值
       5.用你得到的IMEI值 拼接 UIN值(例如IMEI:865166023282877 UIN:1002623291 拼接结果:8651660232828771002623291)放在MD5计算网站加密,得到一个32位小写的值,取前七位
       6.用 sqlcipher 软件打开之前的第2步得到的EnMicroMsg.db文件(File - Open Database 或者文件直接拖拽进去),把第5步得到的七位值输进去
       7.把聊天记录文件导出为csv格式(File - Export - Table as CSV file),选择message然后点击Export,命名为my_chat.csv,用记事本打开次文件,以utf-8格式保存。
      
二、需要用到的文件及python库
       1. sqlcipher 软件 、电脑版微信 、夜神(雷电等)模拟器
       2. stopwords.txt、 custom_dict.txt、 my_chat.csv(第一步获取到的)、my_pic.jpg(网上自行下载喜欢的图片后改名)、青鸟华光简胖头鱼.TTF(本帖效果图字体文件,可以自行选择)
       3. python库:jieba pandas matplotlib wordcloud
三、源码及所需文件
      链接:https://pan.baidu.com/s/16AMDo-TT2umc23gGYKuSbw 提取码:00cg

我是人 发表于 2020-4-12 16:17

感谢您的分享!

请问苹果手机备份聊天记录,是不是按照您的方法也可以呢?
会导致手机中的微信记录丢失吗?

希望得到您的回复!谢谢!

CBL-XG 发表于 2020-4-14 14:19

zhuhedong520 发表于 2020-4-14 14:13
楼主,我用你这个方法出来的md5 密码一直错误,请问是为啥子

如果你的uin是10位,直接拼接以后得出的密码是错误的,那就用uin减去4294967296得到的值再接在IMEI后面去计算,看看得到的密码对不对。还是不对的话,你可以换个模拟器再试试~

446917139 发表于 2020-4-12 16:16

感谢分享 之前一直想分析QQ聊天记录来着后来一直懒的弄了

CBL-XG 发表于 2020-4-12 16:19

我是人 发表于 2020-4-12 16:17
感谢您的分享!

请问苹果手机备份聊天记录,是不是按照您的方法也可以呢?


微信记录丢失不会的,苹果应该也可以这样吧,你可以试一试。或者搜索咱们论坛,好像有苹果的工具

hshcompass 发表于 2020-4-12 16:31

这是好东东 ,没技术背景,希望成品。收藏了。

Vincent00001 发表于 2020-4-12 17:08

不明觉厉(⊙o⊙)!

我是人 发表于 2020-4-12 18:42

CBL-XG 发表于 2020-4-12 16:19
微信记录丢失不会的,苹果应该也可以这样吧,你可以试一试。或者搜索咱们论坛,好像有苹果的工具

好的。

谢谢你!

CBL-XG 发表于 2020-4-12 19:32

hshcompass 发表于 2020-4-12 16:31
这是好东东 ,没技术背景,希望成品。收藏了。

我试试吧,可以的话明天发。

wangdachui 发表于 2020-4-13 00:10

微信不是已经自带备份功能了吗?

vagrantear 发表于 2020-4-13 09:32

可以,没有女朋友。
页: [1] 2 3 4 5 6
查看完整版本: python词云-和女朋友的微信聊天记录