You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

已实现直接引用网络,求Python构建共引与文献耦合网络代码示例

共引(Co-citation)与文献耦合(Bibliographic Coupling)网络构建代码示例

基于你提供的DataFrame结构,以下是两类网络的实现代码:

1. 共引网络(Co-citation Network)

共引网络的节点为被引文献,边代表两篇文献被同一施引文献引用,边权重为共同被引用的次数(无向)。

import pandas as pd
import networkx as nx
from itertools import combinations
from collections import defaultdict

# 你的原始数据
data = {
    'cited_articles': ['A', 'B', 'C', 'D'],
    'citing_articles': [['B', 'C'], ['C'], ['A', 'B', 'D'], ['B']]
}    
df = pd.DataFrame(data)

# 构建施引文献 -> 被引文献列表的映射
citing_to_cited = defaultdict(list)
for idx, row in df.iterrows():
    cited = row['cited_articles']
    for citing in row['citing_articles']:
        citing_to_cited[citing].append(cited)

# 统计共引对的出现次数
co_citation_counts = defaultdict(int)
for citing, cited_list in citing_to_cited.items():
    for pair in combinations(cited_list, 2):
        sorted_pair = tuple(sorted(pair))
        co_citation_counts[sorted_pair] += 1

# 构建共引网络(无向图)
co_citation_G = nx.Graph()
co_citation_G.add_nodes_from(df['cited_articles'])
for (node1, node2), weight in co_citation_counts.items():
    co_citation_G.add_edge(node1, node2, weight=weight)

# 验证输出
print("共引网络边信息:")
for u, v, attrs in co_citation_G.edges(data=True):
    print(f"{u} <-> {v}, 共引次数: {attrs['weight']}")

2. 文献耦合网络(Bibliographic Coupling Network)

文献耦合网络的节点为施引文献,边代表两篇施引文献引用了相同的被引文献,边权重为共同引用的被引文献数量(无向)。

# 提取所有施引文献节点
all_citing_articles = set()
for citing_list in df['citing_articles']:
    all_citing_articles.update(citing_list)
all_citing_articles = list(all_citing_articles)

# 构建被引文献 -> 施引文献集合的映射
cited_to_citing = {row['cited_articles']: set(row['citing_articles']) for idx, row in df.iterrows()}

# 统计施引文献对的耦合强度
coupling_counts = defaultdict(int)
for pair in combinations(all_citing_articles, 2):
    citing1, citing2 = pair
    common_cited = 0
    for cited, citing_set in cited_to_cited.items():
        if citing1 in citing_set and citing2 in citing_set:
            common_cited += 1
    if common_cited > 0:
        sorted_pair = tuple(sorted(pair))
        coupling_counts[sorted_pair] = common_cited

# 构建文献耦合网络(无向图)
bibliographic_coupling_G = nx.Graph()
bibliographic_coupling_G.add_nodes_from(all_citing_articles)
for (node1, node2), weight in coupling_counts.items():
    bibliographic_coupling_G.add_edge(node1, node2, weight=weight)

# 验证输出
print("\n文献耦合网络边信息:")
for u, v, attrs in bibliographic_coupling_G.edges(data=True):
    print(f"{u} <-> {v}, 耦合强度: {attrs['weight']}")

代码说明

  • 共引网络:通过反转原始数据的映射关系,统计同一施引文献引用的被引文献对,最终生成带权重的无向图。
  • 文献耦合网络:遍历所有施引文献对,计算它们共同引用的被引文献数量,仅保留耦合强度大于0的边。

内容的提问来源于stack exchange,提问作者stackword_0

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 21:38:11