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

如何使用NetworkX读取空格分隔文本构建可分析的关系网络图

读取空格分隔作者合作边、构建NetworkX关系图的实现方案

核心逻辑说明

此前使用readline()读取得到的整行字符串,本质是未拆分的纯文本,只要通过字符串拆分方法将每一行解析为独立的两个作者节点,即可直接适配NetworkX的图构建逻辑,无需复杂的字符串处理。

基础读取实现(无权重合作图)

针对每一行存储一对作者合作关系的格式,采用逐行遍历+空白拆分的方式读取,代码可直接运行:

import networkx as nx
import matplotlib.pyplot as plt
# 初始化无向图(作者合作为双向对等关系,无需使用有向图结构)
coauthor_graph = nx.Graph()
# 打开目标文件逐行解析
with open("train.txt", "r", encoding="utf-8") as f:
    for raw_line in f:
        # 去除行首尾的换行符、多余空格,按任意空白字符拆分(兼容多空格、制表符分隔场景)
        line_parts = raw_line.strip().split()
        # 跳过空行、无效行
        if len(line_parts) < 2:
            continue
        # 将拆分得到的两个作者ID作为边加入图
        # NetworkX会自动对重复边去重,即使同一对作者的合作记录多次出现也不会产生冗余边
        coauthor_graph.add_edge(line_parts[0], line_parts[1])

注意:拆分时使用无参数的split()方法,比显式指定split(" ")的鲁棒性更强,可自动过滤连续空格、行内多余空白,避免生成空字符串的无效节点。

带权重的扩展读取实现

如果需要统计同一对作者的合作发文量(将重复出现的边作为边权重),可在读取时累加边的出现次数:

weighted_coauthor_graph = nx.Graph()
with open("train.txt", "r", encoding="utf-8") as f:
    for raw_line in f:
        line_parts = raw_line.strip().split()
        if len(line_parts) <2:
            continue
        author_u, author_v = line_parts[0], line_parts[1]
        # 读取当前边的已有权重,首次出现则默认权重为0
        exist_weight = weighted_coauthor_graph[author_u][author_v]["weight"] if weighted_coauthor_graph.has_edge(author_u, author_v) else 0
        # 更新权重:每遇到一次合作记录就累加1
        weighted_coauthor_graph.add_edge(author_u, author_v, weight=exist_weight +1)

读取结果验证与绘图

读取完成后可先校验数据规模是否符合预期,再执行可视化:

# 基础结果校验
print(f"共识别独立作者节点:{coauthor_graph.number_of_nodes()}")
print(f"共识别有效合作关系:{coauthor_graph.number_of_edges()}")
# 基础关系图绘制
nx.draw(coauthor_graph, with_labels=True, node_size=60, font_size=8)
plt.show()

常见问题规避

  • 不要直接将整行读取的字符串作为节点传入图结构,否则会将整行内容识别为单个孤立节点,无法构建真实的边连接关系。
  • 若作者ID为数字格式,无需手动转成整数类型,NetworkX支持字符串格式的节点标识,强制转成整数反而可能和文件内的原始格式不匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.27 05:27:01