一、导出聊天记录.txt。
二、通过正则表达式对txt匹配得到:日期,时间,QQ号码,聊天内容四个列表。
正则表达式分析:
1、'r'是防止字符转义的 如果路径中出现'\t'的话 不加r的话\t就会被转义 而加了'r'之后'\t'就能保留原有的样子。 raw string。
2、[]定义字符范围。[\d-]匹配数字和-格式的字符;\s+ 匹配多个空格。
[^\n]代表任何字符除了\n,任何字符有不同的含义,一般是不包括空白符号、换行,有些情况会包含.。
(?:x|y)非捕获分组,x 和y 任何一个都可以完成正则表达式的匹配。\) 匹配 “)”。
import re
import wordcloud as wc
import jieba
import matplotlib.pyplot as plt
from scipy.misc import imread
re_pat = r'20[\d-]{8}\s[\d:]{7,8}\s+[^\n]+(?:\d{5,11}|@\w+\.[comnetcn]{2,3})\)' # 正则语句,匹配记录头
fn = r'./in/1.txt'
with open(fn, 'r', encoding='utf-8', errors='ignore') as reader:
txt = reader.read()
# find 匹配出pattern对应的字符串列表
log_title_arr = re.findall(re_pat, txt) # 记录头数组['2016-06-24 15:42:52 张某(40**21)',…]
# split根据pattern对文章进行分割,[:1]表示把后面的对话记录。把所有聊天记录保存到一个列表里,和保存qq号码的列表一一对应
log_content_arr = re.split(re_pat, txt)[1:] # 记录内容数组['\n', '\n选修的\n\n', '\n就怕这次…]
分别得到四个部分。(?<=\()