You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

68 lines
2.1 KiB

from snownlp import SnowNLP
import matplotlib.pyplot as plt
import os
# search_word = "2024巴黎奥运会"
def emotion_aly(search_word):
print("正在进行弹幕情感分析...")
# 定义文件名
file_name = f'{search_word}弹幕.txt'
# 若文件不存在则停止执行
if not os.path.exists(file_name):
print(f"文件 {file_name} 不存在。")
return
# 初始化空列表
comment_list = []
# 读取文件并将每一行数据添加到列表
with open(file_name, mode='r', encoding='utf-8') as f:
comment_list = f.readlines()
# 去除每行末尾的换行符
comment_list = [comment.strip() for comment in comment_list]
# 初始化情感统计
emotions = {
'positive': 0,
'negative': 0,
'neutral': 0
}
# 若文件为空则停止执行
if not comment_list:
print("弹幕文件为空,无法进行情感分析。")
return
# 对每条评论进行情感分析
for comment in comment_list:
s = SnowNLP(comment)
if s.sentiments > 0.7:
emotions['positive'] += 1
elif s.sentiments < 0.3:
emotions['negative'] += 1
else:
emotions['neutral'] += 1
print(emotions)
# 防止饼状图数据为0的情况
if sum(emotions.values()) == 0:
print("没有有效的情感分析数据。")
return
# 绘制饼状图
colors = ['#ff9999', '#66b3ff', '#99ff99']
plt.style.use('fivethirtyeight')
plt.pie(emotions.values(), labels=emotions.keys(), colors=colors, autopct='%1.1f%%')
# 调整子图的边距
plt.subplots_adjust(top=0.901, bottom=0.044, left=0.033, right=0.967, hspace=0.2, wspace=0.2)
plt.tight_layout()
plt.rcParams['font.family'] = ['sans-serif']
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['font.size'] = 14
plt.title(f"{search_word}弹幕情感分析图", fontsize=16)
plt.savefig(f"{search_word}弹幕情感分析图.jpg")
plt.show()