mirror of
https://github.com/LC044/WeChatMsg
synced 2025-02-23 03:22:17 +08:00
add emoji_count in analysis
This commit is contained in:
parent
57645baf8a
commit
8fead399ba
@ -471,6 +471,32 @@ class Msg:
|
||||
# result.sort(key=lambda x: x[5])
|
||||
return result
|
||||
|
||||
def get_emoji_Img(self, username_, year_='all'):
|
||||
sql = f"""
|
||||
SELECT StrContent, count(StrContent)
|
||||
from MSG
|
||||
where StrTalker = ? and isSender = ?
|
||||
{"and strftime('%Y', CreateTime, 'unixepoch', 'localtime') = ?" if year_ != "all" else ""} and Type=47
|
||||
group by StrContent
|
||||
order by Count(StrContent) desc
|
||||
limit 3
|
||||
"""
|
||||
me_result = None
|
||||
ta_result = None
|
||||
if not self.open_flag:
|
||||
return None, None
|
||||
try:
|
||||
lock.acquire(True)
|
||||
self.cursor.execute(sql, [username_, 1, year_] if year_ != "all" else [username_, 1])
|
||||
me_result = self.cursor.fetchall()
|
||||
self.cursor.execute(sql, [username_, 0, year_] if year_ != "all" else [username_, 0])
|
||||
ta_result = self.cursor.fetchall()
|
||||
except sqlite3.DatabaseError:
|
||||
logger.error(f'{traceback.format_exc()}\n数据库损坏请删除msg文件夹重试')
|
||||
finally:
|
||||
lock.release()
|
||||
return me_result, ta_result
|
||||
|
||||
def get_first_time_of_message(self, username_):
|
||||
if not self.open_flag:
|
||||
return None
|
||||
|
@ -1,5 +1,6 @@
|
||||
from collections import Counter
|
||||
from datetime import datetime
|
||||
import re
|
||||
|
||||
from PyQt5.QtCore import QFile, QTextStream, QIODevice
|
||||
|
||||
@ -11,6 +12,7 @@ from app.DataBase import msg_db, MsgType
|
||||
from pyecharts import options as opts
|
||||
from pyecharts.charts import WordCloud, Calendar, Bar, Line
|
||||
from app.resources import resource_rc
|
||||
from app.util.emoji import get_emoji
|
||||
|
||||
var = resource_rc.qt_resource_name
|
||||
charts_width = 800
|
||||
@ -243,6 +245,50 @@ def hour_count(wxid, is_Annual_report=False, year='2023'):
|
||||
}
|
||||
|
||||
|
||||
def emoji_count(wxid, is_Annual_report=False, year='2023'):
|
||||
# 最常发的表情
|
||||
txt_messages = msg_db.get_messages_by_type(wxid, MsgType.TEXT, is_Annual_report, year)
|
||||
me_txt_messages = ''.join(map(lambda x: x[7] if x[4] == 1 else '', txt_messages))
|
||||
ta_txt_messages = ''.join(map(lambda x: x[7] if x[4] == 0 else '', txt_messages))
|
||||
|
||||
pattern = re.compile(r"\[.+?\]")
|
||||
MeEmoji = re.findall(pattern, me_txt_messages)
|
||||
TaEmoji = re.findall(pattern, ta_txt_messages)
|
||||
|
||||
# 按照出现次数统计
|
||||
MeEmoji_num = Counter(MeEmoji)
|
||||
TaEmoji_num = Counter(TaEmoji)
|
||||
|
||||
# 打印统计结果
|
||||
ta_total_emoji_num = len(TaEmoji)
|
||||
me_total_emoji_num = len(MeEmoji)
|
||||
ta_max_emoji = TaEmoji_num.most_common(10)
|
||||
me_max_emoji = MeEmoji_num.most_common(10)
|
||||
print("ta发的表情数:", len(TaEmoji))
|
||||
print("我发的表情数:", len(MeEmoji))
|
||||
print("---"*10)
|
||||
print("ta最常用的 10 个表情:\n", TaEmoji_num.most_common(10))
|
||||
print("---"*10)
|
||||
print("我最常用的 10 个表情:\n", MeEmoji_num.most_common(10))
|
||||
|
||||
# 最常发的表情包图片
|
||||
MeImgList, TaImgList = msg_db.get_emoji_Img(wxid, year)
|
||||
MeImgDict = {}
|
||||
TaImgDict = {}
|
||||
for xml, num in MeImgList:
|
||||
MeImgDict[get_emoji(xml)] = num
|
||||
for xml, num in TaImgList:
|
||||
TaImgDict[get_emoji(xml)] = num
|
||||
return {
|
||||
'ta_total_emoji_num': ta_total_emoji_num,
|
||||
'me_total_emoji_num': me_total_emoji_num,
|
||||
'ta_max_emoji': ta_max_emoji,
|
||||
'me_max_emoji': me_max_emoji,
|
||||
'MeImgDict': MeImgDict, # 三张图片地址+数量,字典格式,path为key
|
||||
'MeImgDict': MeImgDict
|
||||
}
|
||||
|
||||
|
||||
class Analysis:
|
||||
pass
|
||||
|
||||
@ -250,13 +296,16 @@ class Analysis:
|
||||
if __name__ == '__main__':
|
||||
msg_db.init_database(path='../DataBase/Msg/MSG.db')
|
||||
# w = wordcloud('wxid_0o18ef858vnu22')
|
||||
w_data = wordcloud('wxid_27hqbq7vx5hf22', True, '2023')
|
||||
# print(w_data)
|
||||
# w['chart_data'].render("./data/聊天统计/wordcloud.html")
|
||||
c = calendar_chart('wxid_27hqbq7vx5hf22', False, '2023')
|
||||
c['chart_data'].render("./data/聊天统计/calendar.html")
|
||||
# print('c:::', c)
|
||||
m = month_count('wxid_27hqbq7vx5hf22', False, '2023')
|
||||
m['chart_data'].render("./data/聊天统计/month_num.html")
|
||||
h = hour_count('wxid_27hqbq7vx5hf22',is_Annual_report=False)
|
||||
h['chart_data'].render("./data/聊天统计/hour_count.html")
|
||||
# w_data = wordcloud('wxid_27hqbq7vx5hf22', True, '2023')
|
||||
# # print(w_data)
|
||||
# # w['chart_data'].render("./data/聊天统计/wordcloud.html")
|
||||
# c = calendar_chart('wxid_27hqbq7vx5hf22', False, '2023')
|
||||
# c['chart_data'].render("./data/聊天统计/calendar.html")
|
||||
# # print('c:::', c)
|
||||
# m = month_count('wxid_27hqbq7vx5hf22', False, '2023')
|
||||
# m['chart_data'].render("./data/聊天统计/month_num.html")
|
||||
# h = hour_count('wxid_27hqbq7vx5hf22',is_Annual_report=False)
|
||||
# h['chart_data'].render("./data/聊天统计/hour_count.html")
|
||||
|
||||
h = emoji_count('wxid_27hqbq7vx5hf22',is_Annual_report=False)
|
||||
# h['chart_data'].render("./data/聊天统计/hour_count.html")
|
||||
|
@ -89,11 +89,19 @@ def month():
|
||||
@app.route('/hour_count')
|
||||
def hour():
|
||||
wxid = contact.wxid
|
||||
world_cloud_data = analysis.month_count(wxid, is_Annual_report=True)
|
||||
world_cloud_data = analysis.hour_count(wxid, is_Annual_report=True)
|
||||
with open('hour_count.html', 'w', encoding='utf-8') as f:
|
||||
f.write(render_template('hour_count.html', **world_cloud_data))
|
||||
return render_template('hour_count.html', **world_cloud_data)
|
||||
|
||||
@app.route('/emoji_count')
|
||||
def emoji_count():
|
||||
wxid = contact.wxid
|
||||
world_cloud_data = analysis.emoji_count(wxid, is_Annual_report=True)
|
||||
with open('emoji_count.html', 'w', encoding='utf-8') as f:
|
||||
f.write(render_template('emoji_count.html', **world_cloud_data))
|
||||
return render_template('emoji_count.html', **world_cloud_data)
|
||||
|
||||
|
||||
@app.route('/wordcloud')
|
||||
def cone():
|
||||
|
Loading…
Reference in New Issue
Block a user