Initial commit
This commit is contained in:
135
README.md
Normal file
135
README.md
Normal file
@@ -0,0 +1,135 @@
|
||||
# 比亚迪汽车视频评论情感分析项目
|
||||
|
||||
## 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
|
||||
Reference in New Issue
Block a user