跳转至

src/graph_builder

阶段 3+4 模块,负责构建知识图谱。

函数

build_graph(cfg: dict) → nx.DiGraph

从 Parquet 数据文件构建完整的知识图谱。

参数:

名称 类型 说明
cfg dict 项目配置字典

返回值: 包含所有节点类型和边类型的 NetworkX 有向图。

处理流程:

  1. 加载所有 Parquet 文件(laureatesawardspublicationsinstitutionsconcepts
  2. 添加 Laureate 节点及属性
  3. 添加 Award 节点 + WON_AWARD
  4. 添加 Work 节点 + AUTHORED
  5. 添加 Concept 节点 + INTRODUCES/APPLIES
  6. 添加 Field 节点 + BELONGS_TO
  7. 检测并构建 CROSS_INSPIRED
  8. 从引用文献构建 CITES
  9. 构建 AWARDED_FOR 边(奖项→概念)

build_simplified_concept_graph(cfg: dict) → nx.DiGraph

构建简化概念图(仅 Concept 节点)。

特点:

  • 概念在跨论文范围内去重
  • 节点保留 citation_by_year 年度引用字典
  • 边类型为 CONCEPT_CITES,同样保留年度引用字典

参数:

名称 类型 说明
cfg dict 项目配置字典

返回值: nx.DiGraph(仅概念节点)


graph_to_json(G: nx.DiGraph) → dict

将 NetworkX 图转换为 JSON 可序列化的字典。

参数:

名称 类型 说明
G nx.DiGraph NetworkX 有向图

返回值: 结构如下的字典:

{
    "nodes": [
        {"id": "laureate_779", "type": "Laureate", "name": "...", ...},
        ...
    ],
    "edges": [
        {"source": "laureate_779", "target": "award_...", "type": "WON_AWARD", ...},
        ...
    ]
}

打印图谱统计摘要:

  • 总节点数和边数
  • 按节点类型分类
  • 按边类型分类
  • 连通分量数

run() → None

执行完整的阶段 3+4 流水线:

  1. 加载配置
  2. 通过 build_graph() 构建图谱
  3. 打印统计信息
  4. 导出 knowledge_graph.json
  5. 分别导出节点/边文件
  6. 导出 GraphML 格式
  7. 构建并导出简化概念图(JSON + GraphML)

GraphML 兼容性说明

由于 GraphML 不支持字典/列表等复杂属性,模块在导出 GraphML 前会将复杂属性序列化为 JSON 字符串。 这确保 citation_by_year 等字段在 .graphml 中可被安全保存。