# StarRailKG
**Repository Path**: CloseRecover/star-rail-kg
## Basic Information
- **Project Name**: StarRailKG
- **Description**: 浙江大学知识图谱课程期末大作业项目
- **Primary Language**: Unknown
- **License**: MulanPSL-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-12-19
- **Last Updated**: 2025-12-26
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 崩坏:星穹铁道 知识图谱应用
**基于Neo4j的《崩坏:星穹铁道》角色与装备关系智能问答系统**
[](LICENSE)
[](https://www.python.org/)
[](https://neo4j.com/)
[](https://vuejs.org/)
---
## 📖 项目介绍
《崩坏:星穹铁道》(StarRail) 是米哈游开发的一款"崩坏"系列星际冒险主题的回合制角色扮演游戏。玩家扮演"开拓者"乘坐星穹列车穿梭宇宙,探索不同世界并解决"星核"引发的危机。
本项目构建了一个基于知识图谱的智能问答系统,对游戏中的**角色(Character)**、**光锥(Lightcone)**、**材料(Material)**、**命途(Path)**、**阵营(Faction)**等实体及其关系进行建模,实现了基于自然语言的游戏信息检索和推荐功能。
### 核心特性
- 🕷️ **数据爬取**:从B站Wiki自动爬取游戏数据
- 🔄 **数据处理**:自动修复数据缺失和重复问题
- 🗄️ **知识图谱**:使用Neo4j云数据库存储实体关系
- 🤖 **智能问答**:支持自然语言查询游戏信息
- 🎨 **可视化**:提供Web界面进行交互式查询
- 📊 **统计分析**:支持阵营、命途等维度的数据统计
---
## 🛠️ 技术栈
### 后端
- **Python 3.8+** - 核心开发语言
- **Flask** - 轻量级Web框架
- **Neo4j** - 图数据库(云部署)
- **Scrapy** - 数据爬取框架
- **Pandas** - 数据处理
### 前端
- **Vue 3** - 前端框架
- **Vite** - 构建工具
- **Bootstrap 5** - UI组件库
- **Axios** - HTTP客户端
### 数据库
- **Neo4j Aura** - 云端图数据库
- URI: `neo4j+s://78a2c543.databases.neo4j.io`
- 在线控制台: https://console.neo4j.io
---
## 📁 项目结构
```
star-rail_-kg/
├── StarRail/ # 知识图谱数据
│ ├── properties/ # 实体属性CSV
│ │ ├── characters.csv # 80个角色数据 ✅
│ │ ├── lightcones.csv # 149个光锥数据
│ │ ├── materials.csv # 114个材料数据
│ │ ├── paths.csv # 7个命途 ✅ (已去重)
│ │ └── factions.csv # 18个阵营数据
│ └── relations/ # 关系CSV
│ ├── character2path.csv # 角色-命途关系 ✅
│ ├── character2faction.csv # 角色-阵营关系
│ ├── lightcone2path.csv # 光锥-命途关系 ✅
│ ├── lightcone2material.csv # 光锥-材料关系
│ └── material2material.csv # 材料同类关系
│
├── starrail_wiki_spider/ # Scrapy爬虫模块
│ ├── data/ # 爬取的JSON数据
│ │ ├── character.json
│ │ ├── lightcone.json
│ │ └── material.json
│ ├── spiders/ # 爬虫脚本
│ ├── json2csv.py # JSON转CSV
│ ├── json2relation.py # 关系提取
│ └── README.md # 爬虫使用说明
│
├── ToNeo4j/ # Neo4j数据导入模块
│ ├── import_to_neo4j.py # 数据导入脚本 ⭐
│ ├── query_examples.py # 查询示例
│ ├── test_connection.py # 连接测试
│ ├── fix_character_names.py # 角色名修复脚本
│ ├── fix_duplicate_paths.py # Path去重脚本
│ └── DATA_FIX_SUMMARY.md # 数据修复总结 📄
│
├── back_end/ # Flask后端服务
│ ├── app.py # Flask应用入口
│ ├── db.py # Neo4j连接配置
│ ├── handler.py # 查询处理器
│ ├── query_examples.py # 查询示例库
│ └── requirements.txt # Python依赖
│
├── front_end/ # Vue前端应用
│ ├── src/ # 源代码
│ │ ├── App.vue
│ │ ├── components/
│ │ └── views/
│ ├── public/ # 静态资源
│ ├── package.json # npm依赖
│ └── vite.config.js # Vite配置
│
├── starrail.jsonld # JSON-LD知识图谱
├── requirements.txt # 项目依赖
├── LICENSE # MIT许可证
└── README.md # 本文档
✅ = 已修复/优化的文件
⭐ = 核心文件
📄 = 重要文档
```
---
## 📊 数据统计
### 知识图谱规模
| 实体类型 | 数量 | 说明 |
|---------|------|------|
| 角色 (Character) | 80 | 游戏可玩角色,name字段已全部填充 |
| 光锥 (Lightcone) | 149 | 角色装备的武器 |
| 材料 (Material) | 114 | 角色和光锥升级材料 |
| 命途 (Path) | 7 | 角色/光锥的路径分类(已去重) |
| 阵营 (Faction) | 18 | 角色所属组织 |
| **总节点数** | **368** | |
### 关系统计
| 关系类型 | 数量 | 说明 |
|---------|------|------|
| 角色→命途 | 66 | Path ID已统一 |
| 角色→阵营 | 79 | |
| 光锥→命途 | 127 | Path ID已统一 |
| 光锥→材料 | 438 | 升级需求材料 |
| 材料→材料 | 3,753 | 同类素材关系 |
| **总关系数** | **4,463** | |
---
## 🚀 快速开始
### 环境要求
- Python 3.8+
- Node.js 16+ 和 npm
- Neo4j Aura账号(已配置云数据库)
### 1. 克隆项目
```bash
git clone
cd star-rail_-kg
```
### 2. 安装依赖
#### Python依赖(后端)
```bash
# 激活虚拟环境
source /root/kg/kghw/bin/activate
# 安装依赖
pip install -r requirements.txt
```
#### Node依赖(前端)
```bash
cd front_end
npm install
```
### 3. 导入数据到Neo4j
**重要**:数据已经修复并优化,可直接导入。
```bash
# 激活虚拟环境
source /root/kg/kghw/bin/activate
# 测试数据库连接
cd ToNeo4j
python test_connection.py
# 导入数据(会清空现有数据)
python import_to_neo4j.py
```
导入完成后会显示:
```
=== 数据库统计信息 ===
角色节点: 80
光锥节点: 149
材料节点: 114
命途节点: 7
阵营节点: 18
总关系数: 4463
数据导入完成!
```
### 4. 验证数据
运行查询示例验证数据完整性:
```bash
python query_examples.py
```
---
## 💻 运行应用
### 方式一:仅后端(API服务)
```bash
# 激活虚拟环境
source /root/kg/kghw/bin/activate
# 启动Flask服务器
cd back_end
python app.py
```
服务器将运行在 `http://localhost:5001`
**API端点**:
- `GET /` - 健康检查
- `POST /query` - 自然语言查询接口
### 方式二:前后端完整应用
#### 启动后端(终端1)
```bash
source /root/kg/kghw/bin/activate
cd back_end
python app.py
```
#### 启动前端(终端2)
```bash
cd front_end
npm run dev
```
前端应用将运行在 `http://localhost:5173`(Vite默认端口)
### 方式三:使用Neo4j Browser
直接访问Neo4j在线控制台进行可视化查询:
1. 访问 https://console.neo4j.io
2. 登录并选择实例 "My instance"
3. 打开 Neo4j Browser
4. 运行Cypher查询
---
## 🔍 支持的查询
### 关于角色的查询
| 问题 | 示例 |
|------|------|
| 某角色属于什么命途? | "停云属于什么命途" |
| 某角色属于什么阵营? | "景元属于什么阵营" |
| 哪些角色属于某命途? | "哪些角色属于同谐命途" |
| 哪些角色属于某阵营? | "哪些角色属于仙舟罗浮阵营" |
| 某角色的详细信息? | "三月七的详细信息是什么" |
### 关于光锥的查询
| 问题 | 示例 |
|------|------|
| 某光锥适用什么命途? | "但战斗还未结束光锥适用什么命途" |
| 哪些光锥适用某命途? | "哪些光锥适用巡猎命途" |
| 某光锥需要哪些材料? | "于夜色中光锥需要哪些材料" |
### 关于材料的查询
| 问题 | 示例 |
|------|------|
| 某材料的详细信息? | "万相果实材料的详细信息" |
| 某材料的同类素材? | "一曲合弦的幻景材料的同类素材有哪些" |
### 复杂组合查询
| 问题 | 示例 | 说明 |
|------|------|------|
| 某角色可用哪些光锥? | "停云可以使用哪些光锥" | 基于命途匹配 |
| 各阵营角色数量统计 | "各阵营的角色数量统计" | 聚合统计 |
| 各命途角色数量统计 | "各命途的角色数量统计" | 聚合统计 |
### Cypher查询示例
```cypher
// 查询停云可用的光锥(基于命途匹配)
MATCH (c:Character)-[:属于命途]->(p:Path)<-[:适用命途]-(l:Lightcone)
WHERE c.name CONTAINS '停云'
RETURN c.name as 角色, p.name as 命途, collect(l.name) as 可用光锥
// 查询仙舟罗浮的所有5星角色
MATCH (c:Character)-[:属于阵营]->(f:Faction)
WHERE f.name = '仙舟「罗浮」' AND c.rarity = '5星'
RETURN c.name, c.releaseDate
ORDER BY c.releaseDate
// 统计各命途的角色数量
MATCH (c:Character)-[:属于命途]->(p:Path)
RETURN p.name as 命途, count(c) as 角色数量
ORDER BY 角色数量 DESC
```
---
## 🔧 开发指南
### 数据爬取(可选)
如果需要重新爬取数据:
```bash
# 激活虚拟环境
source /root/kg/kghw/bin/activate
# 运行爬虫
cd starrail_wiki_spider
scrapy crawl starrail_spider
# 转换为CSV
python json2csv.py
# 提取关系
python json2relation.py
```
详见 `starrail_wiki_spider/README.md`
### 数据修复
项目已包含数据修复脚本,解决了以下问题:
#### ✅ 已修复的问题
1. **角色名称缺失** - 44个角色的name字段为空
- 修复脚本:`ToNeo4j/fix_character_names.py`
- 修复脚本:`ToNeo4j/manual_fix_names.py`
- 状态:✅ 所有80个角色名已填充
2. **Path节点重复** - 导致组合查询失败
- 修复脚本:`ToNeo4j/fix_duplicate_paths.py`
- 状态:✅ 从14个节点减少到7个
3. **材料查询问题** - 精确匹配失败
- 修复:使用CONTAINS模糊匹配
- 状态:✅ 查询已优化
详见 `ToNeo4j/DATA_FIX_SUMMARY.md`
### 添加新查询模式
编辑 `back_end/handler.py`:
```python
patterns = [
'你的新问句模式(.+)',
# ...
]
queries = [
"""
你的Cypher查询语句
""",
# ...
]
```
### 前端开发
```bash
cd front_end
# 开发模式(热重载)
npm run dev
# 构建生产版本
npm run build
# 预览生产版本
npm run preview
```
---
## 📚 相关文档
- [数据修复总结](ToNeo4j/DATA_FIX_SUMMARY.md) - 数据问题诊断与修复过程
- [爬虫使用说明](starrail_wiki_spider/README.md) - 数据爬取和处理指南
- [Neo4j官方文档](https://neo4j.com/docs/) - 图数据库参考
- [Cypher查询语言](https://neo4j.com/docs/cypher-manual/) - 查询语法
- [Flask文档](https://flask.palletsprojects.com/) - 后端框架
- [Vue 3文档](https://vuejs.org/) - 前端框架
---
## ⚠️ 注意事项
### 数据库连接
- 当前使用Neo4j Aura免费版(2GB内存 + 4GB存储)
- 连接信息配置在 `back_end/db.py` 和 `ToNeo4j/import_to_neo4j.py`
- ⚠️ **请勿将密码提交到公开仓库**,建议使用环境变量
### 数据质量
- 数据来源于B站Wiki(https://wiki.biligame.com/sr/)
- 部分角色数据可能不完整(gender, combatType等字段)
- 定期更新可能需要重新爬取数据
### 性能优化
- 免费版Neo4j有资源限制,复杂查询可能较慢
- 使用 `LIMIT` 限制返回结果数量
- 为常用查询字段创建索引(项目已自动创建约束)
---
## 🎯 后续优化建议
### 数据层面
- [ ] 补充缺失的角色属性(gender, combatType等)
- [ ] 添加角色-材料关系(升级需求)
- [ ] 完善材料的description和intro字段
- [ ] 定期更新游戏新版本数据
### 功能层面
- [ ] 实现更多复杂查询(路径寻找、关系推荐)
- [ ] 添加图算法分析(中心性、社区发现等)
- [ ] 实现真正的自然语言理解(集成NLP模型)
- [ ] 添加角色推荐系统(基于命途和阵营)
### 工程层面
- [ ] 使用环境变量管理数据库密码
- [ ] 添加单元测试
- [ ] 实现前端UI优化
- [ ] 部署到云服务器(Vercel/Heroku)
- [ ] 添加API文档(Swagger)
---
## 🤝 贡献
欢迎提交Issue和Pull Request!
### 开发流程
1. Fork本仓库
2. 创建功能分支 (`git checkout -b feature/AmazingFeature`)
3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
4. 推送到分支 (`git push origin feature/AmazingFeature`)
5. 提交Pull Request
---
## 📄 许可证
本项目采用 木兰2 许可证 - 详见 [LICENSE](LICENSE) 文件
---
## 👥 作者
- 知识图谱构建与数据修复
- Flask后端开发
- Neo4j数据库设计
---
## 🙏 致谢
- 数据来源:[B站游戏Wiki](https://wiki.biligame.com/sr/)
- 游戏开发:米哈游
- 图数据库:Neo4j
---
## 📞 联系方式
- 项目主页:
- 问题反馈:[Issues](issues)
- Neo4j控制台:https://console.neo4j.io
---
**⭐ 如果这个项目对你有帮助,请给一个Star!⭐**
Made with ❤️ for StarRail Players