戒酒的李白

Added a feature to select the emotion analysis model, supporting switching betwe…

…en the basic and improved models.
... ... @@ -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)
... ...
... ... @@ -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')
... ...
... ... @@ -155,18 +155,35 @@
<select onchange="hotWordChange(event)" class="form-control mb-3">
{% for i in hotWordList %}
{% if defaultHotWord == i[0] %}
<option selected value="{{ i[0] }}">{{ i[0] }}</option>
<option selected value="{{ i[0] }}">{{ i[0] }}</option>
{% else %}
<option value="{{ i[0] }}">{{ i[0] }}</option>
<option value="{{ i[0] }}">{{ i[0] }}</option>
{% endif %}
{% endfor %}
</select>
</div>
<div class="form-group">
<label>模型选择</label>
<select onchange="modelChange(event)" class="form-control mb-3">
{% if model_type == 'basic' %}
<option selected value="basic">基础模型</option>
<option value="pro">改进模型</option>
{% else %}
<option value="basic">基础模型</option>
<option selected value="pro">改进模型</option>
{% endif %}
</select>
</div>
<script>
function hotWordChange(e){
window.location.href = 'http://127.0.0.1:5000/page/yuqingpredict?Topic=' + e.target.value
const model = document.querySelector('select[onchange="modelChange(event)"]').value;
window.location.href = 'http://127.0.0.1:5000/page/yuqingpredict?Topic=' + e.target.value + '&model=' + model;
}
function modelChange(e){
const topic = document.querySelector('select[onchange="hotWordChange(event)"]').value;
window.location.href = 'http://127.0.0.1:5000/page/yuqingpredict?Topic=' + topic + '&model=' + e.target.value;
}
</script>
</div>
</div>
</div>
... ...