python聊天记录分析

微信一次只能选一百条记录还得手动。作为邮件发送。按日期换行。
现在先复制黏贴了保存为txt文件。
读txt文件:

msg = open('path',encoding='utf-8',errors='ignore')

按日期劈开(按换行符’\n’分)再用正则表达式 按 talker 时间 内容 劈开:

date=str.split('\n')
datemsg=[]
import re
for i in date:
    i=re.split('(talker1)|(talker2)|(0[0-9]:[0-5][0-9]|1[0-9]:[0-5][0-9]|2[0-3]:[0-5][0-9])',i)
    datemsg.append(list(filter(lambda x:x!=''and x!=None,i)))
for i in datemsg:
    print(i)

所有内容的集合:

date=str.split('\n')
content0=[]
import re
for i in date:
    i=re.split('(talker1)|(talker2)|0[0-9]:[0-5][0-9]|1[0-9]:[0-5][0-9]|2[0-3]:[0-5][0-9]',i)
    content0.append(list(filter(lambda x:x!=''and x!=None and x!='talker1' and x!='talker2',i)))  

#分词
import jieba
jieba.add_word('好呀')
jieba.add_word('呲牙')
...
#按日期分开的
content1=[]
for day in content0:
    for w in day:
        a=jieba.lcut(w,cut_all=False)
        content1.append(a)
#不按日期分开的
content=[]
for msg in content1:
    for str in msg:
        if ((str != '表情') and (str !=' ') and (str !='[') and (str !=']') and (str !='的') and (str !='了') and (str !='我') and (str !='你') and (str !=',')):
            content.append(str)

手动词频统计:

counts = {}
for word in content:
    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(20):
    word, count = items[i]
    print("{0:<10}{1:<5}".format(word, count))

云词图代码:

import collections # 词频统计库
import numpy as np # numpy数据处理库
import wordcloud # 词云展示库
from PIL import Image # 图像处理库
import matplotlib.pyplot as plt # 图像展示库

# 词频统计
word_counts = collections.Counter(content) # 对分词做词频统计
word_counts_top10 = word_counts.most_common(10) # 获取前10最高频的词
print (word_counts_top10) # 输出检查

# 词频展示
#backgroud_Image = plt.imread('wordcloud.jpg')  
wc = wordcloud.WordCloud(
    font_path='C:/Windows/Fonts/simhei.ttf', # 设置字体格式
#    mask=backgroud_Image, # 设置背景图
    max_words=200, # 最多显示词数
    max_font_size=300,# 字体最大值
    background_color='white',width=2000,height=1600,margin=0
)

wc.generate_from_frequencies(word_counts) # 从字典生成词云
plt.imshow(wc) # 显示词云
plt.axis('off') # 关闭坐标轴
#plt.savefig('D:\\picture.jpg',dpi=1000)
plt.show() # 显示图像
plt.show() # 显示图像

时间维度的分析:


notes for jieba:

jieba.load_userdict(file_name) # file_name 为文件类对象或自定义词典的路径
jieba.cut(s)  # 精确模式,返回一个可迭代的数据类型

jieba.cut(s,cut_all=True)  # 全模式,输出文本s中所有可能的单词

jieba.cut_for_search(s)   #搜索引擎模式,适合搜索引擎建立索引的分词结果

jieba.lcut(s)   # 精确模式,返回一个列表类型,建议使用

jieba.lcut(s,cut_all=True)  #全模式,返回一个列表类型,建议使用

jieba.lcut_for_search(s)  # 搜索引擎模式,返回一个列表类型,建议使用

jieba.add_word(w)  # 向分词词典中增加新词w
发布了36 篇原创文章 · 获赞 0 · 访问量 1755

猜你喜欢

转载自blog.csdn.net/Oneiro_qinyue/article/details/104978420