【代码】QQ群最近聊天记录做成词云

没有太多的环境配置,只是有以下问题:
1.有很多垃圾字符,字符串清洗方案可以再完善;
2.大的群聊天记录内容是否需要多线程来处理大列表。。。。。

import re
import os
import jieba
from wordcloud import WordCloud, ImageColorGenerator
import numpy as np
import PIL.Image as Image
import matplotlib.pyplot as plt


# 导出聊天记录.txt
file_path = r'C:\Users\XPS-15\PycharmProjects\PythonProject\owners_group.txt'
with open(file_path, 'r', encoding='utf-8') as fp:
    # 读取到列表,方便操作
    lines = fp.readlines()

# 去掉群说明(分组,对象)
lines = lines[8:]

# 提取聊天内容文本到长字符串
lines_cp = []
for line in lines:
    # 去掉聊天标志项(日期,用户名,QQ号)
    if line.startswith('2018'):
        continue
    # 去掉聊天内容项中的非文本项(空行,链接。。。。)
    if line.startswith('http') \
            or line == '' \
            or '发表动态' in line or '分享图片' in line or '查看' in line \
            or '@' in line or '撤回了一条' in line\
            or line.startswith('1') and len(line) == 11:
        continue
    else:
        lines_cp.append(line)
raw_text = ''.join(lines_cp)

# 去掉图片,表情,空行,以及一系列表情元素:
# 方案一:使用表情元素列表,但是很可能会漏掉
replace_ls = ['[图片]', '[表情]', '\n', '[呲牙]', '[感谢]', '[愉快]', '[撇嘴]', '[切]', '[色色]',
              '[太美了]', '[好美]', '[口水]', '[发呆]', '[傻了]', '[得意]', '[好酷]', '[帅呆]',
              '[牛逼]', '[流泪]', '[伤心]', '[桑心]', '[闭嘴]', '[不说了]', '[说错话了]', '[抱拳]',
              '[哭了]', '[哭哭]', '[大哭]', '[哭死]', '[尴尬]', '[冷汗]', '[汗死]', '[生气]',
              '[发怒]', '[气死了]', '[不理你了]', '[调皮]', '[无聊]', '[^_-]', '[捣蛋]', '[古灵精怪]',
              '[淘气]', '[呲牙]', '[哈哈]', '[^_^]', '[呵呵]', '[呵:)]', '[难过]', '[伤了]',
              '[很伤]', '[想吐]', '[要吐]', '[吐了]', '[惊恐]', '[惊吓]', '[害怕]', '[怕怕]',
              '[惊呆啦]', '[吓死了]', '[好吓人]', '[流汗]', '[真汗]', '[好汗]', '[- -!]', '[郁闷]',
              '[无语]', '[好紧张]', '[偷笑]', '[嘻嘻]', '[;)]', '[暗喜]', '[窃喜]', '[可爱]', '[好Q]',
              '[好萌]', '[卡哇伊]', '[鄙视]', '[飘过]', '[傲慢]', '[随便]', '[弱爆]', '[好饿]',
              '[饿了]', '[有吃的么]', '[打盹]', '[困了]', '[呼呼]', '[睡了]', '[好困]', '[打个盹]',
              '[顶]', '[好棒]', '[yeah]', '[去死吧]', '[去你的]', '[白痴]', '[尼玛]', '[抓狂]',
              '[烦死了]', '[恼火]', '[头晕]', '[好晕]', '[晕了]', '[可怜]', '[亲一个]', '[啵一个]',
              '[飞吻]', '[思考]', '[让我想想]', '[想一下]', '[考虑一下]'
]

# 方案二:正则提取待替换集合(表情元素等)
# 匹配,提取所有表情元素
face = re.compile('[[]\w+[]]')
faces = face.findall(raw_text)
# 将表情元素转成集合
replace_set = {'[图片]', '[表情]', '\n'}
replace_set = replace_set | set(faces)
# print(replace_set)

# 如果待替换集合非空,则进行替换
if replace_set:
    for i in replace_set:
        raw_text = raw_text.replace(i, '')

# print(raw_text)
text = jieba.cut(raw_text, cut_all=True)
jb_text = ' '.join(text)

# 提取中文,最终没用到,因为国内大家都是用中文。。。。
# chinese = re.compile('^[\u4E00-\u9FFF]+$')

# 制作词云
group_cloud = WordCloud(background_color='white',
                        max_words=2000,
                        max_font_size=40,
                        random_state=42,
                        font_path=r'C:\Windows\Fonts\ARIALUNI.TTF',
                        ).generate(jb_text)
plt.imshow(group_cloud)
plt.axis('off')
plt.show()

dr = os.path.dirname(__file__)
coloring = np.array(Image.open(os.path.join(dr, 'gropu_pic.jpg')))
group_cloud = WordCloud(background_color='white',
                        max_words=2000,
                        mask=coloring,
                        scale=1.5,
                        max_font_size=50,
                        min_font_size=10,
                        font_step=3,
                        random_state=42,
                        font_path=r'C:\Windows\Fonts\ARIALUNI.TTF',
                        ).generate(jb_text)

image_colors = ImageColorGenerator(coloring)
plt.imshow(group_cloud.recolor(color_func=image_colors))
plt.imshow(group_cloud)
plt.axis('off')
plt.show()
group_cloud.to_file('group_cloud.png')

在这里插入图片描述

以下是清洗后的词云
在这里插入图片描述
人工数据清洗机。。。。。。

replace_set.add('哈')
replace_set.add('你们')
replace_set.add('什么')
replace_set.add('不是')
replace_set.add('可以')
replace_set.add('这个')
replace_set.add('就是')
replace_set.add('没有')
replace_set.add('现在')
replace_set.add('知道')
replace_set.add('开始')
replace_set.add('时候')
replace_set.add('这么')
replace_set.add('今天')
replace_set.add('还是')
replace_set.add('现在')
replace_set.add('我们')
replace_set.add('一个')
replace_set.add('真的')
replace_set.add('感觉')
replace_set.add('不会')
replace_set.add('怎么')
replace_set.add('已经')
replace_set.add('还行')
replace_set.add('然后')
replace_set.add('看到')
replace_set.add('这样')
replace_set.add('那么')
replace_set.add('自己')
replace_set.add('还有')
replace_set.add('有人')
replace_set.add('有点')
replace_set.add('但是')
replace_set.add('那个')
replace_set.add('所以')
replace_set.add('只有')
replace_set.add('出来')
replace_set.add('不要')
replace_set.add('好像')
replace_set.add('反正')
replace_set.add('不能')
replace_set.add('可能')

replace_set.add('觉得')
replace_set.add('之前')
replace_set.add('因为')
replace_set.add('哪里')
replace_set.add('不过')
replace_set.add('应该')
replace_set.add('没人')
replace_set.add('这种')

replace_set.add('的话')
replace_set.add('这里')
replace_set.add('不用')
replace_set.add('一样')
replace_set.add('好多')
replace_set.add('昨天')

replace_set.add('时间')
replace_set.add('估计')
replace_set.add('记得')
replace_set.add('地方')
replace_set.add('分享')
replace_set.add('文件')
replace_set.add('刚刚')

replace_set.add('明天')
replace_set.add('他们')
replace_set.add('直接')
replace_set.add('发现')
replace_set.add('只能')
replace_set.add('只是')
replace_set.add('肯定')
replace_set.add('还要')

replace_set.add('多少')
replace_set.add('表情')
replace_set.add('很多')
replace_set.add('哪个')
replace_set.add('以前')
replace_set.add('没事')
replace_set.add('不多')
replace_set.add('以后')
replace_set.add('那种')
replace_set.add('不行')
replace_set.add('大家')
replace_set.add('不了')
replace_set.add('别人')

replace_set.add('东西')
replace_set.add('不好')
replace_set.add('问题')
replace_set.add('一直')
replace_set.add('不到')
replace_set.add('以为')
replace_set.add('说话')
replace_set.add('别算了')
replace_set.add('居然')
replace_set.add('毕竟')

replace_set.add('看看')
replace_set.add('意思')
replace_set.add('其实')
replace_set.add('虽然')
replace_set.add('还好')
replace_set.add('一下')
replace_set.add('突然')
replace_set.add('小时')

replace_set.add('不想')
replace_set.add('原来')
replace_set.add('不然')
replace_set.add('下午')
replace_set.add('可是')
replace_set.add('准备')
replace_set.add('人家')
replace_set.add('只要')

replace_set.add('最后')
replace_set.add('基本')
replace_set.add('终于')
replace_set.add('几天')
replace_set.add('一天')
replace_set.add('一年')
replace_set.add('本来')

replace_set.add('成为')
replace_set.add('当然')
replace_set.add('出去')
replace_set.add('竟然')
replace_set.add('晚上')
replace_set.add('两个')


replace_set.add('上好')
replace_set.add('发红')
replace_set.add('比较')
replace_set.add('不在')
replace_set.add('除了')
replace_set.add('回来')


replace_set.add('进来')
replace_set.add('正常')
replace_set.add('今晚')
replace_set.add('真是')
replace_set.add('其他')

replace_set.add('几个')
replace_set.add('最近')
replace_set.add('果然')

replace_set.add('一般')
replace_set.add('要是')
replace_set.add('加入')
replace_set.add('刚才')
replace_set.add('找到')

replace_set.add('这边')
replace_set.add('算了')
replace_set.add('而已')
replace_set.add('上次')

replace_set.add('看过')
replace_set.add('那些')
replace_set.add('就行了')
replace_set.add('难道')
replace_set.add('结果')
replace_set.add('为了')

replace_set.add('看见')
replace_set.add('为啥')
replace_set.add('进去')
replace_set.add('里面')
replace_set.add('听说')
replace_set.add('太多')
replace_set.add('看完')

replace_set.add('完事')
replace_set.add('或者')
replace_set.add('就要')
replace_set.add('如果')
replace_set.add('不如')
replace_set.add('没看')

replace_set.add('不来')
replace_set.add('每次')
replace_set.add('之后')
replace_set.add('没了')
replace_set.add('随便')

replace_set.add('想要')
replace_set.add('表示')
replace_set.add('那边')
replace_set.add('大概')


replace_set.add('对了')
replace_set.add('一句')
replace_set.add('我会')
replace_set.add('马上')
replace_set.add('别说')
replace_set.add('高速')
replace_set.add('各位')

replace_set.add('告诉')
replace_set.add('家里')
replace_set.add('下载')
replace_set.add('后面')
replace_set.add('明年')
replace_set.add('不敢')
replace_set.add('使用')
replace_set.add('忘记')
replace_set.add('想去')
replace_set.add('完全')
replace_set.add('再见')
replace_set.add('新版')
replace_set.add('早上')
replace_set.add('可惜')
replace_set.add('这次')
replace_set.add('难受')
replace_set.add('继续')
replace_set.add('出现')
replace_set.add('差点')
replace_set.add('个人')
replace_set.add('认识')

replace_set.add('看着')
replace_set.add('简单')
replace_set.add('过来')
replace_set.add('这些')
replace_set.add('而且')
replace_set.add('查收')
replace_set.add('不了')
replace_set.add('起来')
replace_set.add('需要')
replace_set.add('后来')
replace_set.add('一些')
replace_set.add('事情')
replace_set.add('无所')
replace_set.add('无所谓')
replace_set.add('不对')
replace_set.add('想到')
replace_set.add('了了')
replace_set.add('你好')
replace_set.add('过分')
replace_set.add('最好')
replace_set.add('办法')
replace_set.add('没办')
replace_set.add('好好')
replace_set.add('一会')
replace_set.add('一次')
replace_set.add('当时')
replace_set.add('下来')
replace_set.add('今年')
replace_set.add('看来')
replace_set.add('我家')
replace_set.add('别的')
replace_set.add('最新')
replace_set.add('推荐')
replace_set.add('不错')
replace_set.add('不算')
replace_set.add('明明')
replace_set.add('试试')
replace_set.add('一群')

replace_set.add('那里')
replace_set.add('可怕')
replace_set.add('看不懂')
replace_set.add('下次')
replace_set.add('群友')
replace_set.add('群主')
replace_set.add('特别')
replace_set.add('没用')
replace_set.add('中午')
replace_set.add('了解')
replace_set.add('斜眼')
replace_set.add('禁言')
replace_set.add('分钟')
replace_set.add('管理')
replace_set.add('管理员')
replace_set.add('头像')
replace_set.add('关注')
replace_set.add('成员')
replace_set.add('一点')
replace_set.add('啊')
replace_set.add(' ')
replace_set.add('干嘛')
replace_set.add('考虑')
replace_set.add('回去')
replace_set.add('到底')
replace_set.add('听到')
replace_set.add('没错')
replace_set.add('接收')
replace_set.add('打扰')
replace_set.add('不存')
replace_set.add('星期')
replace_set.add('上去')
replace_set.add('情况')
replace_set.add('三个')
replace_set.add('过去')
replace_set.add('聊天')
replace_set.add('链接')

猜你喜欢

转载自blog.csdn.net/C_Python_/article/details/84489132
今日推荐