Python基于机器学习的豆瓣评论情感分析系统(附源码)

博主介绍:✌IT徐师兄、7年大厂程序员经历。全网粉丝15W+、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌

🍅文末获取源码联系🍅

👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟

2025年微信小程序毕业设计选题推荐

Java项目精品实战案例《100套》

毕业设计怎样选题?500道Python毕业设计题目推荐

感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及文档编写等相关问题都可以给我留言咨询,希望帮助更多的人

第一章 项目简介

Python基于机器学习的豆瓣评论情感分析系统,这个系统不仅支持 LSTM 算法进行情感分析,还能让用户手动输入文本进行实时分析。

豆瓣电影

这套系统是用Python和Flask搭建的,利用 LSTM(长短期记忆网络)模型来分析豆瓣影评的情感。它能自动爬取豆瓣上的最新评论,计算出好评率和差评率,还能将分析结果实时可视化,支持饼图、条形图等多种图表展示。整个项目包括源码、开发环境配置、安装教程,功能齐全,特别适合作为毕业设计、课程设计或数据库大作业。

简单来说,这个系统主要分为三大模块:

1.爬虫模块:自动抓取豆瓣电影的评论数据;

2.情感分析模块:利用 LSTM 对评论进行正负面分类;

3.可视化展示模块:通过前端页面将结果以图表形式展示。

搭建流程如下:首先编写爬虫获取评论并存储到 MySQL 数据库;然后用 Python 进行文本预处理,训练 LSTM 模型;最后在 Flask Web 端调用模型,获取每条评论的情感预测结果,并用 ECharts 或 Matplotlib 输出美观的图表。运行起来后,只需输入想要分析的电影名称,就能迅速得到情感统计和趋势图,帮助你快速了解观众的真实感受。

第二章 技术选型

  • 开发语言:Python 3.8+
  • 后端框架:Flask
  • 深度学习:TensorFlow / PyTorch(LSTM)
  • 前端展示:HTML + ECharts 或 Matplotlib
  • 数据库:MySQL
  • 爬虫工具:Requests + BeautifulSoup / Selenium(动态加载)
  • 开发工具:PyCharm

第三章 系统架构设计

整个系统采用 B/S 架构,分为以下几层:

  1. 数据采集层

    • 自动化爬虫:通过 Requests 或 Selenium 获取豆瓣电影的评论 JSON 或页面 HTML;
    • 数据预处理:进行数据清洗、去重、分词、停用词过滤;
  2. 模型训练层

    • 文本向量化:使用 Tokenizer + Embedding 层将评论转换为向量序列;
    • LSTM 模型:构建 2 层 LSTM,最后接全连接和 Softmax,实现二分类;
    • 模型优化:采用交叉熵损失、Adam 优化器,并设置早停(EarlyStopping);
  3. 后端服务层

    • Flask 工程:提供 API 接口,接收电影 ID 或名字,返回情感分析结果 JSON;
    • 数据库操作:使用 PyMySQL 或 SQLAlchemy 存取评论和分析结果;
  4. 可视化展示层

    • Web 页面:使用 HTML + ECharts 或后台 Matplotlib,将情感统计以饼图、折线图、词云等形式展示;
    • 实时刷新:通过异步请求接口,动态更新图表。

第四章 详细实现步骤

4.1 爬虫模块:自动抓取评论

4.1.1 目标分析
  • 豆瓣电影评论页采用动态加载和分页,需先获取评论的 API 接口或 AJAX JSON 数据;
4.1.2 模拟请求
  • 添加 User-Agent 和 Cookies,避免被封;
  • 对评论分页加随机延时(time.sleep(random.gauss(1,0.3)))模拟人工访问;
4.1.3 字段健壮性
  • 对缺失字段(评论时间、用户名、评分)进行空值判断,未获取到则赋 None,保证爬虫不停;
4.1.4 数据存储
  • 建立 comments 表:id, movie_id, user, rating, content, comment_time
  • 批量插入数据,降低数据库开销。

4.2 文本预处理

4.2.1 数据清洗
  • 去除 HTML 标签、链接、特殊字符;
  • 使用正则表达式去除多余空格和换行;
4.2.2 分词与停用词处理
  • 中文评论使用 jieba 分词;
  • 加载停用词表,过滤高频无意义词;
4.2.3 序列化处理
  • 使用 Keras 的 Tokenizer 建立词典,限制最大词汇量(如 10000);
  • 将评论转换为固定长度的整数序列,超长截断,过短补 0。

4.3 模型训练(核心:LSTM)

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Embedding, LSTM, Dense, Dropout
from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint

model = Sequential()
model.add(Embedding(input_dim=10000, output_dim=128, input_length=max_len))
model.add(LSTM(64, return_sequences=True))
model.add(Dropout(0.5))
model.add(LSTM(32))
model.add(Dropout(0.5))
model.add(Dense(2, activation='softmax'))

model.compile(loss='categorical_crossentropy',
              optimizer='adam',
              metrics=['accuracy'])

callbacks = [
    EarlyStopping(monitor='val_loss', patience=3),
    ModelCheckpoint('best_lstm.h5', save_best_only=True)
]

history = model.fit(X_train, y_train,
                    validation_data=(X_val, y_val),
                    epochs=10,
                    batch_size=64,
                    callbacks=callbacks)
  • Embedding:将每个词编码成 128 维向量;
  • 两层 LSTM:第一层返回序列,第二层输出最终状态;
  • Dropout:防止过拟合;
  • EarlyStopping + ModelCheckpoint:自动保存最优模型。

4.4 后端集成

from flask import Flask, request, jsonify
from tensorflow.keras.models import load_model
from utils import preprocess_text  # 包含前面讲的分词、序列化

app = Flask(__name__)
lstm_model = load_model('best_lstm.h5')

@app.route('/api/sentiment', methods=['POST'])
def sentiment():
    data = request.json
    content = data.get('content', '')
    seq = preprocess_text(content)           # 分词、序列化
    pred = lstm_model.predict(seq)[0]
    label = '正面' if pred[1] > pred[0] else '负面'
    prob = float(pred.max())
    return jsonify({'label': label, 'probability': prob})

if __name__ == '__main__':
    app.run(debug=True)
  • 接口 /api/sentiment 接收原始评论,返回情感标签和概率;
  • 前端通过 AJAX 调用该接口,实时获取分析结果。

4.5 可视化展示

系统页面包含以下图表:

  • 评论情感饼图:展示正、负面评论的占比;
  • 情感趋势折线图:按天或小时统计评论情感变化;
  • 关键词词云:正、负面评论分别生成词云,直观展示热门词汇;

使用 ECharts 实现的饼图代码示例:

var chart = echarts.init(document.getElementById('pieChart'));
chart.setOption({
    title: { text: '情感占比' },
    tooltip: { trigger: 'item' },
    series: [{
        name: '情感',
        type: 'pie',
        radius: '50%',
        data: [
            { value: posCount, name: '正面' },
            { value: negCount, name: '负面' }
        ]
    }]
});

第五章 效果展示

下图展示了系统对《肖申克的救赎》影评的情感分析结果。

电影导演
电影类型

上图为评论情感饼图和趋势条形图示例。

电影列表
电影评分

页面上还有词云和评论列表,方便深入查看每条评论内容。

第六章 推荐阅读

基于Python Flask的前程无忧招聘信息可视化系统

Python基于大数据的微博舆论可视化、微博情感分析系统(V5)

基于微信小程序的购物系统

Java基于Spring Boot+Vue框架的大学生就业招聘系统

第七章 源码获取:

大家点赞、收藏、关注、评论啦 、查看👇🏻获取联系方式👇🏻

👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟

2024-2025年最全的计算机软件毕业设计选题大全:1000个热门选题推荐✅

2025年微信小程序毕业设计选题推荐

基于Python Opencv的人脸识别上课签到考勤系统,可准确识别人脸

感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及文档编写等相关问题都可以给我留言咨询,希望帮助更多的人

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT徐师兄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值