阶段 3+4:知识图谱构建¶
模块: src/graph_builder.py
预计耗时: ~2 天
目标¶
将所有处理后的数据(得主、奖项、论文、概念)组合为包含 5 种节点类型和 8 种边类型的 NetworkX 有向图,然后导出为多种格式。
节点类型¶
flowchart LR
L[🏅 得主] --- A[🏆 奖项]
L --- W[📄 论文]
W --- C[💡 概念]
C --- F[🔬 领域]
| 节点类型 | 示例 | 关键属性 |
|---|---|---|
| Laureate | "Aaron Ciechanover" | 姓名、国籍、出生年份、性别 |
| Award | "Chemistry 2004" | 年份、类别、获奖理由、奖金 |
| Work | 泛素相关论文 | 标题、年份、摘要、关键词、引用数、DOI |
| Concept | "泛素-蛋白酶体通路" | 名称、描述、领域、子领域、首次出现年份 |
| Field | "Biology" | 名称、父级领域、描述 |
边类型¶
| 边类型 | 源 → 目标 | 属性 | 语义 |
|---|---|---|---|
WON_AWARD |
得主 → 奖项 | year, portion | 得主获得该奖 |
AUTHORED |
得主 → 论文 | position | 得主撰写该论文 |
CITES |
论文 → 论文 | — | 论文引用 |
INTRODUCES |
论文 → 概念 | confidence | 论文引入/提出该概念 |
APPLIES |
论文 → 概念 | confidence | 论文应用/使用该概念 |
BELONGS_TO |
概念 → 领域 | — | 概念属于该科学领域 |
DERIVED_FROM |
概念 → 概念 | year, description | 概念从同领域另一概念演化而来 |
CROSS_INSPIRED |
概念 → 概念 | year, source_field, target_field, description | 跨学科迁移 |
AWARDED_FOR |
奖项 → 概念 | — | 奖项表彰该概念 |
CROSS_INSPIRED 边¶
这是知识图谱中最有价值的边类型,表示跨学科概念迁移:
优化理论 --CROSS_INSPIRED--> 随机梯度下降 (数学 → AI, ~1960s)
Transformer --CROSS_INSPIRED--> AlphaFold (AI → 结构生物学, 2018)
X射线衍射 --CROSS_INSPIRED--> DNA双螺旋结构 (物理 → 分子生物学, 1953)
统计力学 --CROSS_INSPIRED--> 玻尔兹曼机 (物理 → 机器学习, 1985)
构建流程¶
flowchart TD
L[加载 laureates.parquet] --> G[初始化图谱]
A[加载 awards.parquet] --> G
P[加载 publications.parquet] --> G
C[加载 concepts.parquet] --> G
G --> N1[添加 Laureate 节点]
N1 --> N2[添加 Award 节点 + WON_AWARD 边]
N2 --> N3[添加 Work 节点 + AUTHORED 边]
N3 --> N4[添加 Concept 节点 + INTRODUCES/APPLIES 边]
N4 --> N5[添加 Field 节点 + BELONGS_TO 边]
N5 --> E1[构建 CROSS_INSPIRED 边]
E1 --> E2[构建 CITES 边]
E2 --> E3[构建 AWARDED_FOR 边]
E3 --> EX[导出 JSON + GraphML]
跨学科检测算法¶
对于每篇论文 W:
W_concepts = W 关联的概念集合
W_field = W 的主要领域
for ref in W.referenced_works:
ref_field = ref 的主要领域
if W_field ≠ ref_field:
shared_concepts = W_concepts ∩ ref_concepts
if shared_concepts 非空:
→ 生成 CROSS_INSPIRED 边
→ 记录: 概念从 ref_field 迁移到 W_field
输出文件¶
| 文件 | 格式 | 说明 |
|---|---|---|
knowledge_graph.json |
JSON | 含节点和边的完整图谱 |
nodes.json |
JSON | 仅节点 |
edges.json |
JSON | 仅边 |
knowledge_graph.graphml |
GraphML | 适用于 Gephi、Cytoscape 等 |
concept_graph_simplified.json |
JSON | 简化概念图(仅 Concept 节点) |
concept_graph_simplified_nodes.json |
JSON | 简化概念图节点 |
concept_graph_simplified_edges.json |
JSON | 简化概念图边 |
concept_graph_simplified.graphml |
GraphML | 简化概念图(复杂属性已转 JSON 字符串) |
简化概念图 Schema(新增)¶
- 仅包含 Concept 节点(跨论文去重)
- 节点属性包含:
citation_by_year:{年份: 引用次数}paper_count: 关联论文数量total_citations: 按年汇总后的总引用数- 边类型为
CONCEPT_CITES,边属性包含: citation_by_year:{年份: 引用次数}total_citations: 按年汇总后的总引用数
说明:
citation_by_year属于字典结构,GraphML 不直接支持。导出.graphml时会自动转成 JSON 字符串;JSON 导出中保留原始字典结构。
JSON 结构¶
{
"nodes": [
{
"id": "laureate_779",
"type": "Laureate",
"name": "Aaron Ciechanover",
"nationality": "Israeli",
"birth_year": 1947
}
],
"edges": [
{
"source": "laureate_779",
"target": "award_2004_3_779",
"type": "WON_AWARD",
"year": 2004
}
]
}
图谱统计(样本模式)¶
| 指标 | 值 |
|---|---|
| 总节点数 | ~97 |
| 总边数 | ~181 |
| 得主 | 5 |
| 论文 | 25 |
| 概念 | 51 |
| 领域 | 11 |
| 跨学科迁移 | 11 |
运行¶
概念图谱 Schema¶
概念图谱是知识图谱的简化表示,专注于概念及其关系,旨在突出跨学科的思想流动及其联系。
Schema 详情¶
- 节点:
id:概念的唯一标识符。name:概念的可读名称。paper_count:与该概念相关的论文数量。total_citations:与该概念相关的论文收到的总引用数。- 边:
source:源概念 ID。target:目标概念 ID。type:关系类型(例如CONCEPT_CITES)。total_citations:连接的概念之间的总引用数。
构建过程¶
- 从论文中提取概念。
- 跨论文去重概念。
- 基于引用和共享概念建立关系。
- 将图谱导出为 JSON 和 GraphML 格式。