有這個想法是因為看到了itchat包,做了微信簽名詞云,微信好友熱圖,然后就想著那么QQ不是也可以做嗎,像QQ群成員地圖熱圖騰訊已經有了,好吧我就把QQ聊天記錄做一下,主要也是導出.txt很方便
只是有以下問題:
1.有很多垃圾字符,字符串清洗方案可以再完善;
2.大的群聊天記錄內容是否需要多線程來處理大文件。。。。。
3.QQ有類似itchat的包或接口嗎嘿嘿嘿
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:continueelse: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('鏈接')
總結
以上是生活随笔為你收集整理的【代码】QQ群最近聊天记录做成词云的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。