第 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 节点的图”这一事实,但若今天重新运行,应该先修:

  1. 灶门碳治郎 节点把 身份 写成了“鬼”,与节点标签 人 及作品设定不一致;
  2. 同一节点里两次使用 呼吸法 属性键,现代 Cypher 中不能依靠重复键保存两个值,应改成列表或拆成关系;
  3. 源文件中 (十二鬼月)-[:属于]->(鬼) 出现重复;
  4. 用中文人物名直接作查询变量能读懂,但工程中更稳妥的是稳定 ID + name 属性;
  5. “杀死”关系对合力战斗作了过度简化,图谱建模前应先定义关系语义。

如果重做,可把多值属性改成:

(:人 {
  id: 'kamado_tanjiro',
  名称: '灶门炭治郎',
  呼吸法: ['水之呼吸', '火之神神乐']
})

这段是复盘建议,不属于当年的原提交。

评论