From 1707c2c3de8803775246f52a498c5b23acf0cd4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=88=92=E9=85=92=E7=9A=84=E6=9D=8E=E7=99=BD?= <670939375@qq.com> Date: Tue, 4 Feb 2025 21:06:33 +0800 Subject: [PATCH] Added a feature to select the emotion analysis model, supporting switching between the basic and improved models. --- utils/getEchartsData.py | 46 ++++++++++++++++++------- views/page/page.py | 36 ++++++++++++++----- views/page/templates/yuqingpredict.html | 25 +++++++++++--- 3 files changed, 81 insertions(+), 26 deletions(-) diff --git a/utils/getEchartsData.py b/utils/getEchartsData.py index 6a89525..2e633b0 100644 --- a/utils/getEchartsData.py +++ b/utils/getEchartsData.py @@ -167,24 +167,44 @@ def getYuQingCharDataOne(): biedata = [{'name': x, 'value': y} for x, y in zip(X, Y)] return X, Y, biedata -def getYuQingCharDataTwo(): - # 分析评论和文章的情感 +def getYuQingCharDataTwo(model_type='pro'): + """ + 分析评论和文章的情感 + :param model_type: 使用的模型类型,'basic' 为基础模型,'pro' 为改进模型 + """ comment_texts = [comment[4] for comment in commentList] article_texts = [article[5] for article in articleList] - # 预测评论情感 - comment_predictions = predict_sentiment(comment_texts) - if comment_predictions is not None: - comment_sentiments = ['良好' if pred == 0 else '不良' for pred in comment_predictions] - else: + if model_type == 'basic': + # 使用基础模型(SnowNLP) comment_sentiments = [] - - # 预测文章情感 - article_predictions = predict_sentiment(article_texts) - if article_predictions is not None: - article_sentiments = ['良好' if pred == 0 else '不良' for pred in article_predictions] - else: + for text in comment_texts: + value = SnowNLP(text).sentiments + if value > 0.6: + comment_sentiments.append('良好') + else: + comment_sentiments.append('不良') + article_sentiments = [] + for text in article_texts: + value = SnowNLP(text).sentiments + if value > 0.6: + article_sentiments.append('良好') + else: + article_sentiments.append('不良') + else: + # 使用改进模型 + comment_predictions = predict_sentiment(comment_texts) + if comment_predictions is not None: + comment_sentiments = ['良好' if pred == 0 else '不良' for pred in comment_predictions] + else: + comment_sentiments = [] + + article_predictions = predict_sentiment(article_texts) + if article_predictions is not None: + article_sentiments = ['良好' if pred == 0 else '不良' for pred in article_predictions] + else: + article_sentiments = [] # 统计结果 comment_counts = Counter(comment_sentiments) diff --git a/views/page/page.py b/views/page/page.py index 658c601..0fa3cc5 100644 --- a/views/page/page.py +++ b/views/page/page.py @@ -199,8 +199,11 @@ def commentChar(): @pb.route('/yuqingChar') def yuqingChar(): username = session.get('username') + # 获取模型选择参数 + model_type = request.args.get('model', 'pro') # 默认使用改进模型 + X, Y, biedata = getYuQingCharDataOne() - biedata1, biedata2 = getYuQingCharDataTwo() + biedata1, biedata2 = getYuQingCharDataTwo(model_type) x1Data, y1Data = getYuQingCharDataThree() return render_template('yuqingChar.html', username=username, @@ -210,7 +213,8 @@ def yuqingChar(): biedata1=biedata1, biedata2=biedata2, x1Data=x1Data, - y1Data=y1Data) + y1Data=y1Data, + model_type=model_type) @pb.route('/yuqingpredict') def yuqingpredict(): @@ -222,13 +226,26 @@ def yuqingpredict(): TopicLen = getTopicLen(defaultTopic) X, Y = getTopicCreatedAtandpredictData(defaultTopic) - # 使用改进版模型进行情感预测 - predicted_label, confidence = predict_sentiment(defaultTopic) - if predicted_label is not None: - sentences = '良好' if predicted_label == 0 else '不良' - sentences = f"{sentences} (置信度: {confidence:.2f})" + # 获取模型选择参数 + model_type = request.args.get('model', 'pro') # 默认使用改进模型 + + if model_type == 'basic': + # 使用基础模型(SnowNLP) + value = SnowNLP(defaultTopic).sentiments + if value == 0.5: + sentences = '中性' + elif value > 0.5: + sentences = '正面' + elif value < 0.5: + sentences = '负面' else: - sentences = '预测失败' + # 使用改进模型 + predicted_label, confidence = predict_sentiment(defaultTopic) + if predicted_label is not None: + sentences = '良好' if predicted_label == 0 else '不良' + sentences = f"{sentences} (置信度: {confidence:.2f})" + else: + sentences = '预测失败' comments = getCommentFilterDataTopic(defaultTopic) return render_template('yuqingpredict.html', @@ -239,7 +256,8 @@ def yuqingpredict(): sentences=sentences, xData=X, yData=Y, - comments=comments) + comments=comments, + model_type=model_type) @pb.route('/articleCloud') diff --git a/views/page/templates/yuqingpredict.html b/views/page/templates/yuqingpredict.html index 13c4375..0c67d01 100644 --- a/views/page/templates/yuqingpredict.html +++ b/views/page/templates/yuqingpredict.html @@ -155,18 +155,35 @@ + +
+ + +
-