【Python製作詞雲】分析QQ羣聊信息,記錄詞頻並製作詞雲

Author:AXYZdong 自動化專業 工科男
有一點思考,有一點想法,有一點理性!
定個小小目標,努力成爲習慣!在最美的年華遇見更好的自己!
CSDN@AXYZdong,CSDN首發,AXYZdong原創
唯一博客更新的地址爲: 👉 AXYZdong的博客 👈

在這裏插入圖片描述

▲ 果然 @全體成員 最多


Python大數據搜索


環境:Python 3.7
開發工具:自帶的IDLE


一、前期準備

1.提取QQ聊天記錄

1、QQ 聊天框打開消息管理
在這裏插入圖片描述

2、選擇需要提取聊天記錄的羣,然後右擊選擇導出聊天記錄

在這裏插入圖片描述


3、選擇保存爲 .txt 格式

在這裏插入圖片描述


4、保存後打開是這個樣子:

在這裏插入圖片描述

記得把這個 .txt 文件保存到與後面建立的 .py 文件的同一個目錄裏面

插播一條反爬蟲信息,讀者可以忽略:


在這裏插入圖片描述


2.準備相關的庫

pip install xxx 就可以了

import jieba
import re
import collections
from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator  
from PIL import Image
import matplotlib.pyplot as plt 

wordcloud 這個安裝時可能會報錯,可以嘗試以下方法:

  • 這裏 手動下載
  • cp37表示Python3.7版本,後面win32和win_amd64表示32位和64位
  • 對應自己的Python版本和位數,選擇合適的下載

    在這裏插入圖片描述

二、正則表達提取消息文本


file = open("**通知羣.txt", "r", encoding="utf-8")
one_name = ["***"]
two_name = ["***"]
timepat = re.compile(r"\d{4}-\d{1,2}-\d{1,2}")

1、設置編碼格式,使用 utf-8 編碼:

file = open("**通知羣.txt", "r", encoding="utf-8")

2、正則表達匹配日期,格式爲 年/月/日 或者 年-月-日

  • \d 表示任意一個位的數字(0~9)
  • \d{4} 表示這個數字爲 4 個長度,比如 2020
  • \d{1,2} 表示 1~2 個長度,比如 6,06
\d{4}-\d{1,2}-\d{1,2}

三、提取羣成員的消息


flag = 0
lines = file.readlines()
one_s = []
two_s = []
for line in lines:
	line = line.replace("[圖片]", "")
	line = line.replace("[表情]", "")
	line = line.replace("\n", "")
	if flag == "one":
		one_s.append(line)
		flag = 0
	if flag == "two":
		two_s.append(line)
		flag = 0
	if re.search(timepat, line):
		for w in one_name:
			if w in line:
				flag = "one"
				break
		for w in two_name:
			if w in line:
				flag = "two"
				break
 
print(len(one_s))	# 打印輸出one這個成員消息條數
print(len(two_s))	# 打印輸出twe這個成員消息條數
print(one_s[0:99])	# 打印輸出one這個成員的所有消息

將羣成員發的消息保存至列表中,遍歷所有消息,符合時間正則的留下,並用 flag 進行標記,從而將特定的羣成員消息提取出來。

四、詞彙處理


remove_words = [u'的', u',',u'和', u'是', u'隨着', u'對於', u'對',u'等',u'能',u'都',u'。',u' ',u'、',u'中',u'在',u'了',
                u'通常',u'如果',u'我們',u'需要',u'我',u'你',u'?',u"",u" ",u"就",u"不","啊",
                u"吧",u"也",u"不是",u"就是",u"什麼",u"怎麼",u"這個",u"這麼",u"一個"]
k = 0
words = []
for s in two_s:
	thelist = jieba.cut(s, cut_all = False)
	for word in thelist:
		if word not in remove_words:
			if len(word) > 1:
				words.append(word)
 
word_counts = collections.Counter(words)
words_top10 = word_counts.most_common(10)
print(words_top10)      #打印前10詞頻
  • jieba.cut() 進行分詞,如果是常見詞 (remove_words) 跳過,如果大於1的話就放入列表
  • collections.Counter(words) 將經過分詞過得消息進行詞頻統計
  • word_counts.most_common(10) 統計前10詞頻

五、製作詞雲


## 製作詞雲
backgroud_Image = plt.imread('面紗.jpg')  #選擇背景圖片,圖片要與.py文件同一目錄
print('加載圖片成功!')

## 設置詞雲樣式  
wc = WordCloud(  
    background_color='white',   # 設置背景顏色  
    mask=backgroud_Image,       # 設置背景圖片  
    font_path='C:\Windows\Fonts\msyhl.ttc', # 若是有中文的話,這句代碼必須添加,不然會出現方框,不出現漢字  
    max_words=2000,     # 設置最大現實的字數  
    stopwords=STOPWORDS,        # 設置停用詞  
    max_font_size=150,  # 設置字體最大值  
    random_state=30     # 設置有多少種隨機生成狀態,即有多少種配色方案  
)

wc.generate_from_frequencies(word_counts)  #通過頻率生成詞雲
print('開始加載文本')  

img_colors = ImageColorGenerator(backgroud_Image)       #改變字體顏色  
  
wc.recolor(color_func=img_colors)       #字體顏色爲背景圖片的顏色
 
plt.imshow(wc)  # 顯示詞雲圖
plt.axis('off') # 是否顯示x軸、y軸下標  
plt.show()
print('生成詞雲成功!')

六、效果

在這裏插入圖片描述

當然這個背景、字體啥的都可以自己設置的。


七、完整代碼


# =============================================
# --*-- coding: utf-8 --*--
# @Time    : 2020-06-08
# @Author  : AXYZdong
# @CSDN    : https://blog.csdn.net/qq_43328313
# @FileName: wc.py
# @Software: Python3.7
# =============================================

import jieba
import re
import collections
from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator  
from PIL import Image
import matplotlib.pyplot as plt 

file = open("**通知羣.txt", "r", encoding="utf-8")
one_name = ["***"]
two_name = ["***"]
timepat = re.compile(r"\d{4}-\d{1,2}-\d{1,2}")
 
## 分析羣聊天記錄,並通過jieba分詞
flag = 0
lines = file.readlines()
one_s = []
two_s = []
for line in lines:
	line = line.replace("[圖片]", "")
	line = line.replace("[表情]", "")
	line = line.replace("\n", "")
	if flag == "one":
		one_s.append(line)
		flag = 0
	if flag == "two":
		two_s.append(line)
		flag = 0
	if re.search(timepat, line):
		for w in one_name:
			if w in line:
				flag = "one"
				break
		for w in two_name:
			if w in line:
				flag = "two"
				break
 
print(len(one_s))
print(len(two_s))
##print(one_s[0:99])
 
remove_words = [u'的', u',',u'和', u'是', u'隨着', u'對於', u'對',u'等',u'能',u'都',u'。',u' ',u'、',u'中',u'在',u'了',
                u'通常',u'如果',u'我們',u'需要',u'我',u'你',u'?',u"",u" ",u"就",u"不","啊",
                u"吧",u"也",u"不是",u"就是",u"什麼",u"怎麼",u"這個",u"這麼",u"一個"]
k = 0
words = []
for s in two_s:
	thelist = jieba.cut(s, cut_all = False)
	for word in thelist:
		if word not in remove_words:
			if len(word) > 1:
				words.append(word)
 
word_counts = collections.Counter(words)
words_top10 = word_counts.most_common(10)
print(words_top10)      #打印前10詞頻

## 製作詞雲
backgroud_Image = plt.imread('面紗.jpg')  #選擇背景圖片,圖片要與.py文件同一目錄
print('加載圖片成功!')

## 設置詞雲樣式  
wc = WordCloud(  
    background_color='white',   # 設置背景顏色  
    mask=backgroud_Image,       # 設置背景圖片  
    font_path='C:\Windows\Fonts\msyhl.ttc', # 若是有中文的話,這句代碼必須添加,不然會出現方框,不出現漢字  
    max_words=2000,     # 設置最大現實的字數  
    stopwords=STOPWORDS,        # 設置停用詞  
    max_font_size=150,  # 設置字體最大值  
    random_state=30     # 設置有多少種隨機生成狀態,即有多少種配色方案  
)

wc.generate_from_frequencies(word_counts)  #通過頻率生成詞雲
print('開始加載文本')  

img_colors = ImageColorGenerator(backgroud_Image)       #改變字體顏色   
wc.recolor(color_func=img_colors)       #字體顏色爲背景圖片的顏色
 
plt.imshow(wc)  # 顯示詞雲圖
plt.axis('off') # 是否顯示x軸、y軸下標  
plt.show()
print('生成詞雲成功!')

八、總結

  • 沒事做的時候可以統計一下羣裏龍王發了多少條消息,哈哈哈,再做個詞雲
  • python擁有強大的庫,庫與庫之間相互配合,相互協作,造就了豐富的可視化圖形
  • 在進行代碼移植時,可能會出現不兼容現象,不同的開發工具的規則不同,按照規則來問題不會很大

【參考文獻】:
[1] https://blog.csdn.net/zhr1030635594/article/details/105348459
[2] https://blog.csdn.net/fly910905/article/details/77763086



  本次的分享就到這裏


11

好書不厭百回讀,熟讀自知其中意。將學習成爲習慣,用知識改變命運,用博客見證成長,用行動證明努力。
如果我的博客對你有幫助、如果你喜歡我的博客內容,請 “點贊” “評論” “收藏” 一鍵三連哦!
聽說 👉 點贊 👈 的人運氣不會太差,每一天都會元氣滿滿呦!^ _ ^ ❤️ ❤️ ❤️
碼字不易,大家的支持就是我堅持下去的動力。點贊後不要忘了👉關注👈我哦!
更多精彩內容請前往 AXYZdong的博客


如果以上內容有任何錯誤或者不準確的地方,歡迎在下面👇留個言。或者你有更好的想法,歡迎一起交流學習~~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章