如何从字典格式的论文引用数据创建networkx有向图
解决方案
错误原因
你之前直接使用G = nx.DiGraph(citations)不生效,是因为NetworkX的有向图直接接收字典参数时,要求字典结构为{源节点: 邻接节点列表}的邻接表格式,而你现有的字典每个节点对应的是包含inbound_citations和outbound_citations两个键的嵌套结构,无法直接识别。
正确实现步骤
1. 构建引用有向图
引用关系是有向的(A引用B对应边A→B),遍历所有论文的出引列表添加边即可,可先对出引列表去重,避免添加重复边:
import networkx as nx # 初始化有向图 G = nx.DiGraph() for source_paper, citation_info in citations.items(): # 先添加源节点,避免仅存在入引的节点被遗漏 G.add_node(source_paper) # 去重后添加出引边 for cited_paper in set(citation_info['outbound_citations']): G.add_edge(source_paper, cited_paper)
2. 核心需求实现
查找高中心性论文
引用网络常用三类中心性指标,可根据需求选择:
- 入度中心性:对应论文被引频次,最直观的影响力指标
- 介数中心性:衡量论文作为不同领域研究枢纽的程度
- 特征向量中心性:同时考虑引用该论文的其他论文的影响力,更适合筛选领域内高价值成果
示例代码:
# 计算入度中心性取Top10 in_centrality = nx.in_degree_centrality(G) top_10_influential = sorted(in_centrality.items(), key=lambda x: x[1], reverse=True)[:10] # 计算特征向量中心性 eigen_centrality = nx.eigenvector_centrality(G)
发现聚类/派系
如果需要查找互引密集的论文簇,可选择两种方案:
- 无向派系:将有向图转为无向图后查找最大派系,适合找互相引用关联极强的论文组
- 强连通分量:查找有向图中两两可达的节点簇,适合找领域内引用闭环
示例代码:
# 查找至少包含3个节点的无向最大派系 undirected_G = G.to_undirected() large_cliques = [clique for clique in nx.find_cliques(undirected_G) if len(clique) >= 3] # 查找强连通分量聚类 strong_components = [comp for comp in nx.strongly_connected_components(G) if len(comp) >=3]
内容的提问来源于stack exchange,提问作者Hryhorii Pavlenko
相关产品推荐
相关产品推荐

