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

如何从带年份边属性的文章-关键词二分图生成时序关键词网络投影?

问题描述

需要构建科学论文关键词的时序(快照)网络,要求每个关键词关联对应的发表年份。当前的文章-关键词二分图中,年份是边属性,希望将该二分图投影为关键词网络,让年份成为关键词的属性——具体通过区分同一关键词的不同发表年份来实现。尝试使用igraph的bipartite_projection函数,但该函数无法保留边属性,相关R代码如下:

df <- cbind.data.frame(c(1:6),
                       c(2022,2023,2022,2015,2024,2025),
                       c("Environment", "Sustai", "Sustai", "Sustai","Doughnu","Environment"),
                       c("Plastic","Domesti…", "Sustain…", "Doughnu…", "Environment","Plastic"))
    
colnames(df) <- c("id","year","key1","key2")
df <- pivot_longer(df, cols = starts_with("key"), values_to = "key") 
df <- df[-3]
df <- df[,c(1,3,2)]
g <- graph_from_data_frame(df, directed=F)
V(g)$type <- bipartite_mapping(g)$type
key <- bipartite_projection(g, which="true",multiplicity=T)
E(key)$weight
解决方案

核心思路是在投影前,把关键词+年份合并成新的节点名称,让同一关键词的不同发表年份被视为独立节点,自然携带年份属性,之后再投影即可得到带时序信息的关键词网络。

修改后的R代码如下:

library(igraph)
library(tidyr)

# 原始数据处理
df <- cbind.data.frame(c(1:6),
                       c(2022,2023,2022,2015,2024,2025),
                       c("Environment", "Sustai", "Sustai", "Sustai","Doughnu","Environment"),
                       c("Plastic","Domesti…", "Sustain…", "Doughnu…", "Environment","Plastic"))

colnames(df) <- c("id","year","key1","key2")
df <- pivot_longer(df, cols = starts_with("key"), values_to = "key") 
df <- df[, -3]
df <- df[, c(1,3,2)]

# 关键步骤:将关键词与年份合并为新节点名,同时保留年份属性
df$key_with_year <- paste(df$key, df$year, sep = "_")

# 构建二分图,使用带年份的关键词作为节点
g <- graph_from_data_frame(df[, c("id", "key_with_year")], directed = F)
V(g)$type <- bipartite_mapping(g)$type

# 投影得到关键词网络(带年份区分)
key_net <- bipartite_projection(g, which = "true", multiplicity = T)

# 给关键词节点提取年份和原始关键词属性
V(key_net)$year <- sapply(V(key_net)$name, function(x) strsplit(x, "_")[[1]][2])
V(key_net)$original_key <- sapply(V(key_net)$name, function(x) strsplit(x, "_")[[1]][1])

# 查看结果
print(V(key_net)$name)
print(V(key_net)$year)
print(E(key_net)$weight)

说明

  • 通过paste(df$key, df$year, sep = "_")生成带年份的节点名,解决了同一关键词不同年份的区分问题,同时天然携带了年份信息。
  • 投影后可通过字符串拆分,将年份和原始关键词重新提取为节点属性,方便后续的时序分析或节点筛选。
  • 最终得到的关键词网络中,边的权重代表对应年份下,两个关键词共同出现在同一篇文章的次数。

内容的提问来源于stack exchange,提问作者Sebastián

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 04:03:09