利用微信聊天记录,送女友个小礼物

1. 导出微信聊天记录

话说这微信真是的,不支持导出聊天记录,费了不少劲,也踩了很多坑,才摸索出一条完美的路,话不多说,直接开始。
1)备份聊天记录至苹果设备
由于此方法利用到软件只支持苹果设备,因此,如果是Android用户,需要将微信聊天记录备份至iphone或者ipad上,iPhone用户可忽略此步骤。该过程利用微信自带的工具即可简单实现,具体路径是:我 -> 设置 -> 聊天 -> 聊天记录备份和迁移 -> 迁移到另一台设备上。注意,可以只备份自己女朋友的聊天记录即可,以免花费过长时间。
2)连接Mac,对iPhone或者ipad设备进行备份
将ipad连接到mac,并打开Mac的itunes开始对ipad进行备份,如下图,注意不要选择加密,否则后续将无法识别。另外,要找到备份文件存储的地方:/Users/yourname/Library/Application Support/MobileSync/Backup,Library(资源库)文件夹默认是隐藏的,百度下怎么显示出来。
在这里插入图片描述
3)利用WX Back工具进行聊天记录的导出。
WX Back是一款良心软件,无广告,免安装,且可以秒导出,下载地址为 http://wxbackup.imxfd.com/ ,提供了Mac和Windows版本的,但Windows版本可能有bug,我最后导出是乱码的,Mac版本亲测没问题。将步骤2中得到的备份文件夹拷贝(move也可)到某个固定的路径下,如桌面,并放到名为MobileSyns的文件夹中,即:/Users/yourname/Desktop/MobileSyns/Backup路径,该步骤较为重要,务必确保成功。接着双击下载好的WX Back文件即可,会提示手动切换路径,填写/Users/yourname/Desktop/MobileSyns/Backup即可。
在这里插入图片描述

最后,将会成功导出聊天记录,如下图:
在这里插入图片描述
可以切换微信号,也可指定联系人,最后将聊天记录输出到制定的路径中即可。
4)聊天记录一览
在这里插入图片描述
格式整齐,我太喜欢了,其中index.html是聊天记录的前端展示,可在线展示所有记录;js和css里面是展示所用到的脚本,js里面保存这文字聊天记录相关的内容,audio、video和image里面分别保存这语音、视频和图片的相关信息。
至此,微信聊天记录导出完成!

2. 聊天记录大揭秘

Talk is cheap, Here is the code

1) 解析聊天记录
步骤1中js文件夹下的message.js文件即为所有的聊天记录,包含文字、语音、emoji、图片、视频等各种信息,词典msg_type_cnt可以帮你统计你们发送的各种信息的条数,变量msg_word_num记录了你们的聊天字数,函数最后返回文字聊天的所有句子。注意,此步骤中,需要打开message.js文件,并将第一行中的“var data = ”字符删除,这样该文件中内容才是json格式,以便被python处理。

'''
m_uiMessageType 表示了聊天类型
1: 文字, 3: 图片, 47: emoji, 34: 语音, 43: 视频, 49: 分享, 10000: 撤回
'''
def read_chat_rec(file):
    stences = []
    with open(file, 'r') as f:
        s = f.read()
    f.close()
    s1 = json.loads(s)
    message = s1['message']
    print "total num of chat is: ", len(message)
    msg_type_cnt = {}
    msg_word_num = 0
    ### msg_word_num 记录聊天中汉字的数量, msg_type_cnt记录聊天的类型
    for i in range(len(message)):
        item = message[i]["m_nsContent"]
        itype = int(message[i]["m_uiMessageType"])
        usr = message[i]["m_nsFromUsr"]
        ### usr 字段用来区分身份,为空则代表自己,否则是对方
        ### 此处是解析自己的聊天记录,若是解析对方的,可改为:usr == ""
        if usr != "":  
            continue
        if itype not in msg_type_cnt:
            msg_type_cnt[itype] = 1
        else:
            msg_type_cnt[itype] += 1
        if itype == 1:
            msg_word_num += cal_ch_num(item)
            stences.append(item.encode('utf8'))
    print "msg_word_num is %d, msg_type_cnt is %s:" %(msg_word_num, msg_type_cnt)
    return stences

2)分词
分词采用了结巴分词,效果还不错,这里面会设计到中文编码的坑,以下的代码较为精简,但是效果很不错,返回聊天原文,以及他们的分词结果。

def get_chat_words(texts, stop_words):
    text2words= []
    for t in texts:
        try:
            words = jieba.cut(t.decode('utf8'))
        except:
            continue
        res = []
        for w in words:
            if w.encode('utf8') in stop_words:
                continue
            ## 此处比较关键,需先解码为Unicode,才能判断长度
            if len(w.decode('utf8')) <= 1: 
                continue
            res.append(w.encode('utf8'))
        text2words.append((t, set(res)))
    return text2words

结果示例如下图
在这里插入图片描述

3. 生成词云

网上有些免费的生成工具,但要么收费,要么不能批量导入,所以干脆自己写一个吧,有现成的包wordcloud,导入即可用,可以根据单词的频率生成词云,也可以特定图片生成特定的形状,代码如下:

def gen_word_cloud(wc_file, input_pic_name, output_pic_name):
    word_count = get_word_cnt(wc_file)
    print ("word_count", len(word_count))
    mk = imageio.imread(input_pic_name)
    wc = WordCloud(
        font_path="./SimHei.ttf",
        max_words=1000,  # 词云中最多显示的词数
        background_color="white",  # 背景颜色
        width = 1500,  # 图片宽度
        height= 960,  # 图片高度
        margin= 10,  # 图片边缘
        mask = mk,  # 根据输入图片生成词云的形状
        random_state=1, 
        contour_width=1, # 设置图片的边缘,最好加上,否则轮廓不明显
        contour_color='blueviolet' # 边缘线条颜色
    )
    wc.generate_from_frequencies(word_count)  # 从字典生成词云
    plt.imshow(wc)
    plt.axis('off')  # 关闭坐标轴
    plt.show()
    wc.to_file(output_pic_name)  # 保存图片

结果示例如下图:
在这里插入图片描述

4. 写文案

其实有了统计数据,你可以得出来很多有意思的结论,比如分析top1的词,top10的词,分析排名接近的词,比较你和对方用词的差异……,我是做了一个简单的ppt:
在这里插入图片描述
总之,大家发挥自己的聪明才智吧,从聊天记录中发现专属你们两个的浪漫和甜蜜!

5. 参考链接

  1. http://wxbackup.imxfd.com/
  2. https://blog.csdn.net/weixin_26713521/article/details/108134350
  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值