第 1 次作业 · Neo4j 知识图谱
原始要求
以下要求来自第 2 讲课件最后一页:
任选自己感兴趣的主题,在 Neo4j 上用 Cypher 创建相关知识图谱;写报告介绍所建知识图谱,报告中贴出 Cypher 命令,节点数大于 10。4 月 6 日前上传,文件按“学号 + 姓名 + 第一次作业”命名。
源目录保留了 23371100+李东骏+第一次作业.doc 和独立的 neo4j代码.docx。下面内容按这两份提交文件还原;代码中的命名、数据和语法问题也照实说明,没有把修订版冒充原答案。
查看我的提交内容与复盘
选题与图结构
提交稿题为《Neo4j 知识图谱研究报告》,主题是《鬼灭之刃》。图中包含四类主要信息:
- 组织层级:鬼、十二鬼月、上弦、下弦、鬼杀队、柱、后勤部门等;
- 人物或鬼:主角、柱、上弦和其他角色;
- 属性:名称、身份、呼吸法、血鬼术等;
- 关系:属于、师徒、亲属、杀死或险些杀死等。
节点远超作业要求的 10 个。提交报告先解释 CREATE 节点和关系,再说明用 MATCH、RETURN 展示整张图。
原提交代码的代表性片段
下面保留原文件中的变量名和内容,包括“灶门碳治郎”等原写法:
CREATE
(
鬼杀队:组织 {名称: '鬼杀队'}
),
(
柱:组织 {名称: '柱'}
),
(
十二鬼月:组织 {名称: '十二鬼月'}
),
(
上弦:组织 {名称: '上弦'}
)
CREATE
(
灶门祢豆子:鬼 {
名称: '灶门祢豆子',
身份: '鬼',
血鬼术: '爆血'
}
),
(
我妻善逸:人 {
名称: '我妻善逸',
身份: '人',
呼吸法: '雷之呼吸'
}
)
CREATE
(十二鬼月)-[:属于]->(鬼),
(上弦)-[:属于]->(十二鬼月),
(灶门祢豆子)-[:属于]->(鬼杀队),
(富冈义勇)-[:属于]->(柱)
完整提交代码还批量建立了人物归属、亲属和战斗关系,例如:
CREATE
(继国缘一)-[:险些杀死]->(鬼舞辻无惨),
(鬼舞辻无惨)-[:杀死]->(悲鸣屿行冥),
(童磨)-[:杀死]->(蝴蝶忍),
(猗窝座)-[:杀死]->(炼狱杏寿郎)
最后通过匹配节点和关系返回图。原报告的目标是完整展示,可概括为:
MATCH (n)-[r]->(m)
RETURN n, r, m
按提交文件核对出的几个问题
这些问题不影响“确实完成了一个大于 10 节点的图”这一事实,但若今天重新运行,应该先修:
灶门碳治郎节点把身份写成了“鬼”,与节点标签人及作品设定不一致;- 同一节点里两次使用
呼吸法属性键,现代 Cypher 中不能依靠重复键保存两个值,应改成列表或拆成关系; - 源文件中
(十二鬼月)-[:属于]->(鬼)出现重复; - 用中文人物名直接作查询变量能读懂,但工程中更稳妥的是稳定 ID +
name属性; - “杀死”关系对合力战斗作了过度简化,图谱建模前应先定义关系语义。
如果重做,可把多值属性改成:
(:人 {
id: 'kamado_tanjiro',
名称: '灶门炭治郎',
呼吸法: ['水之呼吸', '火之神神乐']
})
这段是复盘建议,不属于当年的原提交。