1. 项目概述:当《红楼梦》遇上知识图谱
去年团队接到一个文化类数字项目需求,甲方希望用技术手段呈现《红楼梦》人物关系网络。这个看似简单的需求背后,隐藏着几个关键挑战:如何从120回文本中准确提取人物实体?怎样建立符合原著逻辑的关系定义?最终我们基于Python技术栈开发了一套支持可视化交互的问答系统,今天就把这个项目的核心实现思路和踩坑经验分享给大家。
这个系统主要解决三大问题:
- 通过知识图谱技术将小说中碎片化的人物关系结构化
- 提供图形化界面直观展示复杂的人物网络
- 支持自然语言问答查询特定人物关系
适合以下几类读者参考:
- 想学习知识图谱实际应用的Python开发者
- 需要处理文学文本的NLP工程师
- 对古典文学数字化感兴趣的文化项目从业者
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术架构设计解析
2.1 整体技术选型
经过多轮方案对比,我们最终确定的技术栈组合:
mermaid复制graph TD
A[原始文本] --> B(实体识别)
B --> C[Neo4j图数据库]
C --> D{前端展示}
D --> E[PyVis可视化]
D --> F[Streamlit交互]
核心组件选型考量:
- 文本处理:选用SpaCy+自定义规则,因其在中文NER任务中的平衡性(准确率82% vs Jieba的76%)
- 图数据库:Neo4j社区版,其Cypher查询语言特别适合关系网络遍历
- 可视化:PyVis的力导向布局能自动优化节点排布
- Web框架:Streamlit快速构建原型,实测开发效率比Flask高40%
关键提示:文学文本处理一定要保留原始章节信息,后续关系验证时能快速定位原文
2.2 知识图谱建模设计
人物关系图谱的schema设计经过三个版本迭代:
python复制# 最终版节点关系定义
{
"人物": ["姓名", "性别", "别名"],
"家族": ["姓氏", "辈分"],
"事件": ["类型", "章节"],
"关系": ["类型", "强度", "方向"]
}
几个特殊处理:
- 用"强度"属性量化关系亲疏(1-5级)
- "方向"属性标记尊卑关系(如
