Author:AXYZdong 自动化专业 工科男
有一点思考,有一点想法,有一点理性!
定个小小目标,努力成为习惯!在最美的年华遇见更好的自己!
CSDN@AXYZdong,CSDN首发,AXYZdong原创
唯一博客更新的地址为: AXYZdong的博客
▲ 果然 @全体成员 最多
Python大数据搜索
环境:Python 3.7
开发工具:自带的IDLE
2、选择需要提取聊天记录的群,然后右击选择导出聊天记录
记得把这个 .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
本次的分享就到这里
好书不厌百回读,熟读自知其中意。将学习成为习惯,用知识改变命运,用博客见证成长,用行动证明努力。
如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏”
一键三连哦!
听说 点赞 的人运气不会太差,每一天都会元气满满呦!^ _ ^ ❤️ ❤️ ❤️
码字不易,大家的支持就是我坚持下去的动力。点赞后不要忘了关注我哦!
更多精彩内容请前往 AXYZdong的博客
如果以上内容有任何错误或者不准确的地方,欢迎在下面留个言。或者你有更好的想法,欢迎一起交流学习~~~