▲ 果然 @全体成员 最多
Python大数据搜索
环境:Python 3.7 开发工具:自带的IDLE
1、QQ 聊天框打开消息管理
2、选择需要提取聊天记录的群,然后右击选择导出聊天记录
3、选择保存为 .txt 格式
4、保存后打开是这个样子:
记得把这个 .txt
文件保存到与后面建立的 .py
文件的同一个目录里面
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 这个安装时可能会报错,可以尝试以下方法:
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{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('生成词云成功!')
【参考文献】: [1] https://blog.csdn.net/zhr1030635594/article/details/105348459 [2] https://blog.csdn.net/fly910905/article/details/77763086