ec8bffe26e93af960bb39b5a8c0035cef13848ea
比亚迪汽车视频评论情感分析项目
1. 项目说明
本项目按实验流程完成以下任务:
-
评论清洗、去重、分词与停用词过滤
-
SnowNLP情感标注与可视化分析
-
两种TF-IDF方案+朴素贝叶斯建模对比
-
加入时间与点赞特征后再次训练评估
-
src/byd_sentiment_pipeline.py: 主流程脚本
-
cn_stopwords.txt: 停用词表
-
.env.example: 环境变量模板
-
data/: 中间数据与结果CSV
-
outputs/: 图像与分析报告
2. 环境准备
-
创建并激活虚拟环境
-
安装依赖
pip install -r requirements.txt
3. Cookie配置
复制模板生成.env文件:
cp .env.example .env
在.env中填写真实Cookie。Cookie不会写进代码。
推荐按下面步骤获取,成功率更高:
- 浏览器登录B站账号,打开任意一个目标视频页面并停留10秒。
- 按F12打开开发者工具,切到Network。
- 刷新页面后,在请求列表中选中任意一个发往api.bilibili.com的请求(常见如x/v2/reply、x/web-interface/view)。
- 在Headers里复制两项:
- Request Headers -> Cookie 整段值,粘贴到BILI_COOKIE。
- Request Headers -> User-Agent,粘贴到BILI_USER_AGENT。
- 确保Cookie是一整行,不要换行,不要多余引号。
示例(仅演示格式):
BILI_COOKIE=SESSDATA=xxxx; bili_jct=xxxx; DedeUserID=xxxx; DedeUserID__ckMd5=xxxx; buvid3=xxxx; buvid4=xxxx;
BILI_USER_AGENT=Mozilla/5.0 (...) Chrome/124.0.0.0 Safari/537.36
先做自检再爬取:
python - <<'PY'
import os
from dotenv import load_dotenv
load_dotenv('.env')
cookie = os.getenv('BILI_COOKIE', '')
ua = os.getenv('BILI_USER_AGENT', '')
print('Cookie已配置:', bool(cookie), '长度:', len(cookie))
print('UA已配置:', bool(ua), '长度:', len(ua))
PY
如果出现412或-352:
- 重新复制一次最新Cookie(过期很常见)。
- 降低抓取频率(增大sleep参数)。
- 避免同一时间多终端并发跑爬虫。
5. 运行方式
全流程执行:
python src/byd_sentiment_pipeline.py all --target-comments 4500 --min-comments 4000
分阶段执行:
python src/byd_sentiment_pipeline.py crawl --target-comments 4500 --min-comments 4000
python src/byd_sentiment_pipeline.py preprocess
python src/byd_sentiment_pipeline.py explore
python src/byd_sentiment_pipeline.py model
说明:
- crawl阶段默认支持断点续抓。若data/byd_comments_raw.csv已存在,会自动读取并按评论ID/评论内容+时间+BV号去重后继续抓取。
- 因为B站接口可能间歇返回412,建议多轮执行crawl累积到目标条数,不会重复叠加历史评论。
爬虫建议使用更慢参数,减少412概率:
python src/byd_sentiment_pipeline.py crawl --target-comments 4500 --min-comments 4000 --sleep-min 1.2 --sleep-max 2.5
如果想自动多轮累积(每轮都会基于历史CSV去重后续抓),可使用:
python src/byd_sentiment_pipeline.py crawl --target-comments 4500 --min-comments 4000 --sleep-min 1.2 --sleep-max 2.5 --rounds 6 --round-cooldown 90
5.1 B站场景停用词补充
如果词云或top_words中出现“回复、展开、置顶”等平台噪声词,可直接在cn_stopwords.txt中每行追加一个词,然后重新执行:
python src/byd_sentiment_pipeline.py preprocess
python src/byd_sentiment_pipeline.py explore
6. 输出文件
- data/byd_comments_raw.csv
- data/byd_comments_preprocessed.csv
- data/byd_comments_labeled.csv
- outputs/overall_wordcloud.png
- outputs/负面_wordcloud.png
- outputs/中性_wordcloud.png
- outputs/正面_wordcloud.png
- outputs/sentiment_pie.png
- outputs/monthly_trend.png
- outputs/top10_likes_bar.png
- outputs/confusion_method1_default.png
- outputs/confusion_method2_improved.png
- outputs/confusion_method2_plus_features.png
- outputs/model_metrics_summary.csv
- outputs/exploration_report.md
- outputs/model_report.md
Description
Languages
Python
100%