src/graph_builder¶
阶段 3+4 模块,负责构建知识图谱。
函数¶
build_graph(cfg: dict) → nx.DiGraph¶
从 Parquet 数据文件构建完整的知识图谱。
参数:
| 名称 | 类型 | 说明 |
|---|---|---|
cfg |
dict |
项目配置字典 |
返回值: 包含所有节点类型和边类型的 NetworkX 有向图。
处理流程:
- 加载所有 Parquet 文件(
laureates、awards、publications、institutions、concepts) - 添加 Laureate 节点及属性
- 添加 Award 节点 +
WON_AWARD边 - 添加 Work 节点 +
AUTHORED边 - 添加 Concept 节点 +
INTRODUCES/APPLIES边 - 添加 Field 节点 +
BELONGS_TO边 - 检测并构建
CROSS_INSPIRED边 - 从引用文献构建
CITES边 - 构建
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", ...},
...
]
}
print_graph_stats(G: nx.DiGraph) → None¶
打印图谱统计摘要:
- 总节点数和边数
- 按节点类型分类
- 按边类型分类
- 连通分量数
run() → None¶
执行完整的阶段 3+4 流水线:
- 加载配置
- 通过
build_graph()构建图谱 - 打印统计信息
- 导出
knowledge_graph.json - 分别导出节点/边文件
- 导出 GraphML 格式
- 构建并导出简化概念图(JSON + GraphML)
GraphML 兼容性说明¶
由于 GraphML 不支持字典/列表等复杂属性,模块在导出 GraphML 前会将复杂属性序列化为 JSON 字符串。
这确保 citation_by_year 等字段在 .graphml 中可被安全保存。