1

我一直在尝试将一些附加属性解析到 networkx gml 以供以后使用,但我遇到了一个问题。

当从 Cytoscape 给定一个 gml 文件时,networkx 会输出一个它自己无法读取的 gml 文件。

即 Cytoscape -> 进入 networkx -> 输出 -> 进入 networkx -> 错误:

pyparsing.ParseException: Expected "]" (at char 1116756), (line:71732, col:3)

现在该错误在节点之后请求额外的 ] (也就是使图形忽略边缘),如果您这样做,则图形可以工作。但是,它不再有任何边缘。

为了完全测试这一点,我在完全不更改代码的情况下执行了“Cytoscape -> Into networkx -> Output”,只是:

DG = nx.read_gml("KeggComplete.gml", relabel = True)
nx.write_gml(DG, "KeggCompleteEng.gml")
exit()

然后读入:

BasicGraph = nx.read_gml("KeggCompleteEng.gml", relabel = True)

并且错误仍然是可重现的。所以我认为这与networkx如何编写gml文件有关。

我正在使用的两个文件是:

如果有人可以深入了解为什么会发生这种情况,将不胜感激!

4

2 回答 2

1

在识别何时发生解析错误时,Pyparsing 并不是最聪明的库。该库的更新版本确实支持更好的错误识别,但它们需要对解析器进行一些更新才能获取此信息。

在没有看到解析器的情况下,根据您的描述,听起来解析器希望看到如下内容:

[
  [
  bunch of nodes...
  ]
  [
  optional bunch of edges...
  ]
]

发生的事情是它成功地通过了“节点束......”,然后在“可选的一堆边......”部分的一个边中发现了一些语法问题。由于这是可选的,因此只要在节点之后有一个关闭的 ']',事情仍然有效。这就是为什么您会收到 pyparsing 异常消息。但真正的问题是其中一个边缘有错字。

要诊断这一点,请尝试只为解析器提供前几个边缘。然后继续添加越来越多的边,直到出现 pyparsing 错误——最近添加的边包含严重的语法错误。

于 2013-10-14T03:41:38.117 回答
1

这是 NetworkX 在生成嵌套属性(本例中为边缘图形数据)时的一个错误。一组额外的引号被错误地添加到“线”属性中。

该修复已作为此拉取请求的一部分合并: https ://github.com/networkx/networkx/pull/981

于 2013-10-14T08:42:49.663 回答