wrodcloud 基于Python的词云生成类库,这里用来做QQ聊天记录的分析,参考别人的代码做了个demo,安装对应的库后就能执行。QQ聊天记录导出存储为txt格式。
# coding:utf-8
"""
author:@
"""
import re
import matplotlib.pyplot as plt
import jieba
from wordcloud import WordCloud,STOPWORDS
from PIL import Image
import numpy as np
# 词云制作
def get_wordcloud(text_data):
word_list = [" ".join(jieba.cut(sententce)) for sententce in text_data]
new_text = ' '.join(word_list)
# 背景图片的设置,图片有要求,颜色过多的貌似不能生成,我用了一个黑白两色的。
pic = Image.open('d:\\tmp\\1\\ti.jpg')
mang_mask = np.array(pic)
wordcloud = WordCloud(
background_color="white",
# width=1928, height=1048, 不用背景图的时候,这里设置词云的宽高
font_path='C:\\Windows\\Fonts\\STXINWEI.TTF', #词云字体设置,对中文的支持好像不够,需要自己选择宋体?
mask=mang_mask,
stopwords=STOPWORDS, ).generate(new_text)
plt.imshow(wordcloud)
plt.axis('off')
wordcloud.to_file('guanlie.png')
# 匹配文本内容,调用上一个函数
def get_content(data):
pa = re.compile(r'\d{4}-\d{2}-\d{2}.*?\d+:\d{2}:\d{2}.*?\n(.*?)\n\n', re.DOTALL)
content = re.findall(pa, data)
get_wordcloud(content)
def main():
filename = "d:\\tmp\\guanliqun.txt"
# encoding一下,防止乱码
with open(filename, encoding="UTF-8") as f:
data = f.read()
get_content(data)
plt.show()
if __name__ == '__main__':
main()
存在的问题:
QQ聊天记录,很多词汇都无实际的意义,所以需要先对文本进行处理后再生成,具体的处理可以根据自己的要求,在生成第一次的时候,看看哪些分词是不需要的,就可以通过脚本进行替换,直到最后得到自己想要的。个人觉得用来分析文档这类的比较好,可以统计文档的侧重点等信息。对文本处理的时候,要注意文本的格式
file = open("d:\\tmp\\luqun.txt",encoding='utf-8', errors='ignore')
file1 = open('d:\\tmp\\lunqun11.txt', 'a',encoding='utf-8')
for value in file.readlines():
result=value.replace('[图片]','').replace('表情','').replace('这个','')
file1.write(result)