基于Neo4j的《水浒传》人物关系可视化及问答系统开源项目介绍
一、项目背景与意义
在数字阅读时代,面对《水浒传》等古典文学中错综复杂的百余人名与千余条人物关系链,传统检索方式存在三大痛点:
- 信息过载
:搜索引擎返回大量文本片段,用户需自行筛选有效信息 - 关系模糊
:人物称谓变异多(如"宋公明"与"及时雨"指代同一人)导致关联断裂 - 交互门槛高
:非技术用户难以直接操作图数据库进行关系查询
本项目通过构建知识图谱+问答系统+可视化界面三位一体的解决方案,实现:
-
智能解析"林冲和鲁智深的关系""晁盖死后谁继承寨主"等复杂问题 -
以图谱形式直观展示梁山好汉阵营分布、师徒关系等深层关联 -
验证中文NLP技术在古典文学场景下的实践可行性
二、技术架构与创新点
1. 多源数据融合处理
- 数据采集层
: -
Spider模块:爬取百度百科等权威来源的108将人物画像、字号、星宿等结构化数据 -
人工合成:构建包含7类实体(人物、事件、地点等)的2000+条三元组关系数据 - 知识建模层
: -
定义"结拜""隶属""敌对"等12种语义关系类型 -
建立"人物-称谓"同义词典,解决"行者武松"与"武都头"的指代消歧
2. 智能问答引擎
- NLP处理流水线
: -
LTP分词:基于隐马尔可夫模型实现角色名精准切分 -
依存句法分析:解析"晁盖的遗言对宋江有何影响"等复杂句式 -
实体链接:将"花和尚"映射至"鲁智深"节点 - 查询生成器
: cypher
MATCH (p:Person{name:"卢俊义"})-[:RELATED_TO*2]->(e:Event) WHERE e.title CONTAINS "上山" RETURN e.description -
将"卢俊义如何上梁山"转化为Cypher语句:
3. 可视化交互系统
- 图谱展示层
: -
Neo4j Bloom插件实现动态布局,支持力导向/层级/环形等多种视图切换 -
点击节点弹出人物生平浮层,边关系显示具体关联事件 - Flask应用层
: -
RESTful API设计: /api/query接口支持模糊搜索与精确匹配 -
模板继承机制:通过Jinja2实现问答页面与图谱页面的导航联动
三、核心功能演示
1. 智能问答场景
-
输入:"宋江有哪些结义兄弟?" -
处理流程: cypher
MATCH (a:Person{name:"宋江"})-[:结拜]->(b:Person) RETURN b.name -
返回结果:武松、李逵、戴宗(按结拜顺序排序) -
LTP识别"宋江""结义兄弟"为关键词 -
查询Cypher:
2. 关系图谱探索
-
全貌模式:展示梁山派系分布,不同颜色区分"天罡星""地煞星"阵营 -
路径追踪:点击"杨志"可追溯"生辰纲失窃→落草二龙山→加入梁山"的轨迹
3. 数据管理模块
-
三元组版本控制:记录"史进拜王进为师"等关系的添加/修改时间戳 -
图谱健康检查:定期扫描孤岛节点,提示"焦挺"等冷门角色关联度
四、项目扩展性
1. 技术升级方向
-
引入BERT-wwm实现语义相似度计算,提升"鲁智深和林冲谁更早结识"等比较类问题的准确率 -
接入Neo4j Graph Data Science库,计算人物PageRank值识别核心角色
2. 文学研究应用
-
社交网络分析:量化梁山好汉的"小团体"现象 -
叙事结构可视化:关联"三打祝家庄"等事件节点的时间轴
五、系统部署与使用
-
环境配置: bash
docker-compose up -d neo4j # 启动图数据库 pip install -r requirements.txt # 安装Flask/LTP依赖 -
数据初始化: python
python neo_db/import_data.py --json data.json # 加载三元组 -
访问地址: http://localhost:5000
六、学术价值与实践意义
- 教学应用
:可作为中文系《水浒传》研究课程的辅助工具 - 技术示范
:展示从数据采集到知识图谱落地的完整NLP工程化路径 - 开源贡献
:提供古典文学领域首个可复用的KG构建模板
本项目通过将知识图谱技术与文学研究深度融合,不仅为数字人文领域提供了创新解决方案,更为中文NLP在垂直场景的应用积累了宝贵经验,适合作为计算机科学与文学交叉学科的毕业设计标杆项目。

