136 lines
3.9 KiB
Markdown
136 lines
3.9 KiB
Markdown
# 比亚迪汽车视频评论情感分析项目
|
||
|
||
## 1. 项目说明
|
||
|
||
本项目按实验流程完成以下任务:
|
||
|
||
- 评论清洗、去重、分词与停用词过滤
|
||
- SnowNLP情感标注与可视化分析
|
||
- 两种TF-IDF方案+朴素贝叶斯建模对比
|
||
- 加入时间与点赞特征后再次训练评估
|
||
|
||
- src/byd_sentiment_pipeline.py: 主流程脚本
|
||
- cn_stopwords.txt: 停用词表
|
||
- .env.example: 环境变量模板
|
||
- data/: 中间数据与结果CSV
|
||
- outputs/: 图像与分析报告
|
||
|
||
## 2. 环境准备
|
||
|
||
1. 创建并激活虚拟环境
|
||
|
||
2. 安装依赖
|
||
|
||
```bash
|
||
pip install -r requirements.txt
|
||
```
|
||
|
||
## 3. Cookie配置
|
||
|
||
复制模板生成.env文件:
|
||
|
||
```bash
|
||
cp .env.example .env
|
||
```
|
||
|
||
在.env中填写真实Cookie。Cookie不会写进代码。
|
||
|
||
推荐按下面步骤获取,成功率更高:
|
||
|
||
1. 浏览器登录B站账号,打开任意一个目标视频页面并停留10秒。
|
||
2. 按F12打开开发者工具,切到Network。
|
||
3. 刷新页面后,在请求列表中选中任意一个发往api.bilibili.com的请求(常见如x/v2/reply、x/web-interface/view)。
|
||
4. 在Headers里复制两项:
|
||
- Request Headers -> Cookie 整段值,粘贴到BILI_COOKIE。
|
||
- Request Headers -> User-Agent,粘贴到BILI_USER_AGENT。
|
||
5. 确保Cookie是一整行,不要换行,不要多余引号。
|
||
|
||
示例(仅演示格式):
|
||
|
||
```env
|
||
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
|
||
```
|
||
|
||
先做自检再爬取:
|
||
|
||
```bash
|
||
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:
|
||
|
||
1. 重新复制一次最新Cookie(过期很常见)。
|
||
2. 降低抓取频率(增大sleep参数)。
|
||
3. 避免同一时间多终端并发跑爬虫。
|
||
|
||
## 5. 运行方式
|
||
|
||
全流程执行:
|
||
|
||
```bash
|
||
python src/byd_sentiment_pipeline.py all --target-comments 4500 --min-comments 4000
|
||
```
|
||
|
||
分阶段执行:
|
||
|
||
```bash
|
||
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
|
||
```
|
||
|
||
说明:
|
||
|
||
1. crawl阶段默认支持断点续抓。若data/byd_comments_raw.csv已存在,会自动读取并按评论ID/评论内容+时间+BV号去重后继续抓取。
|
||
2. 因为B站接口可能间歇返回412,建议多轮执行crawl累积到目标条数,不会重复叠加历史评论。
|
||
|
||
爬虫建议使用更慢参数,减少412概率:
|
||
|
||
```bash
|
||
python src/byd_sentiment_pipeline.py crawl --target-comments 4500 --min-comments 4000 --sleep-min 1.2 --sleep-max 2.5
|
||
```
|
||
|
||
如果想自动多轮累积(每轮都会基于历史CSV去重后续抓),可使用:
|
||
|
||
```bash
|
||
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中每行追加一个词,然后重新执行:
|
||
|
||
```bash
|
||
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
|