2013-10-14 44 views
1

我一直試圖解析一些額外的屬性到一個networkx gml供以後使用,並且我遇到了一個問題。Networkx解析gml寫入不可用的gml文件

當從Cytoscape提供一個gml文件時,networkx會輸出一個它本身無法讀取的gml文件。

I.e. Cytoscape的 - >進入networkx - >輸出 - >進入networkx - >錯誤:

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

現在該錯誤的節點後,要求額外的(AKA使得圖形忽略邊緣),如果你這樣做,圖表作品。但是,它不再有任何邊緣。

全面測試這一點,我做了 '的Cytoscape - >進入networkx - >輸出',而完全不改變代碼,只需:

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文件的。

兩個文件我使用的是:

如果有人能提供一些洞察爲什麼這可能發生的事情會很感激!

回答

1

這是生成嵌套屬性(本例中爲邊緣圖形數據)時NetworkX中的一個錯誤。 一組額外的引號錯誤地添加到「行」屬性。

的修復已經被合併,因爲這拉請求的一部分: https://github.com/networkx/networkx/pull/981

+0

太好了,非常感謝你! – Darkstarone

1

當涉及到識別解析錯誤發生時,Pyparsing不是最聰明的庫。更新版本的庫確實支持更好的錯誤標識,但它們需要對解析器進行一些更新才能獲取此信息。

沒有看到分析器,從你的描述,這聽起來像解析器希望看到這樣的:

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

什麼情況是,它成功地獲得過「一束節點...」,然後在「可選的邊緣......」部分的邊緣之一中發現了一些語法問題。由於這是可選的,如果只有節點後面有一個結束''',那麼事情仍然有效。這就是爲什麼你得到pyparsing異常消息。但真正的問題是其中一個邊緣有一個錯字。

要診斷此問題,請嘗試僅爲解析器提供前幾個邊緣。然後繼續添加越來越多的邊緣,直到出現pyparsing錯誤 - 最近添加的邊緣包含嚴重的語法錯誤。