【问题标题】:Networkx parse gml writing unusable gml filesNetworkx 解析 gml 写入不可用的 gml 文件
【发布时间】:2013-10-14 03:10:52
【问题描述】:

我一直在尝试将一些附加属性解析到 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文件有关。

我使用的两个文件是:

如果有人可以就为什么会发生这种情况提供一些见解,那将不胜感激!

【问题讨论】:

    标签: python networkx gml cytoscape


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      要诊断此问题,请尝试仅向解析器提供前几个边缘。然后继续添加越来越多的边,直到出现 pyparsing 错误 - 最近添加的边包含严重的语法错误。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-06
        • 1970-01-01
        • 2013-02-05
        • 1970-01-01
        • 2018-02-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多