0

我有一个 igraph 对象(g_sub),它是一个超链接图,具有以下属性:

> g_sub
IGRAPH D--- 1331 11088 -- 
+ attr: Image File (v/c), Ringset (v/n), Country Code TLD (v/n), Generic TLD (v/n), Number of
  Pages (v/n), Modularity cluster (v/n), Categorical 1 (v/n), Categorical 2 (v/n), Categorical
  3 (v/n), id (v/c), Width (e/n), Tie Weight (e/n)

当我写入g_subgraphml 文件时,所有节点名称都显示为“n0”、“n1”等。

我宁愿将“id”属性作为节点名称(即每个节点都是一个网站,所以我想查看存储在“id”属性中的 URL)。

4

1 回答 1

1

这在 igraph 中是不可能的,并且有一个很好的理由:节点 ID 在 GraphML 文件中必须是唯一的,并且它们对它们可能包含的字符也有一定的限制。igraph 通过在写入文件时自行构建 ID 来确保这些条件 - 这就是为什么无论节点名称是什么,它们最终都会成为等n0n1

如果您对“正确的”GraphML ID 中允许使用哪些字符感兴趣,您必须首先查看GraphML DTD,它指定id属性是 type ID。然后您必须转到XML 规范,该规范声明id属性必须是唯一的,并且它们必须与“名称产生”相匹配。然后,您必须在同一文档中找到“名称产生”的含义:它本质上定义了ID 中允许的一组字符。一个可能出现在 URL 中但可能不会出现在“名称产生”(例如 XML ID)中的字符的一个示例是哈希标记,因此每当您尝试使用包含哈希的 URL 时都会遇到麻烦标记为 ID。

您唯一能做的就是对 GraphML 文件进行后处理以使用 URL 而不是 ID。您可以为此使用任何支持 XML 处理的语言;我可能会在一个单独的 Python 脚本中执行此操作,该脚本将id每个<node>标记中的属性值替换为预定义属性的值。但是,还必须确保标签的sourcetarget属性<edge>也被适当地替换。

于 2013-08-29T09:53:18.183 回答