2015-10-01 10 views
6

Ich habe die gml-Datei heruntergeladen, die die dolphins social network enthält. Vor einiger Zeit habe ich in diesem Netzwerk eine AnalyseUnerwarteter Fehler beim Lesen von GML-Grafik

Python läuft 3.4 und NetworkX 1,9 auf aa Windows7 Maschine, aber jetzt bin ich laufe auf einem Bogen Linux-Rechner (mit der gleichen Version von Python aber mit NetworkX 1.10) und ein Problem gefunden, als versucht wurde, die Datei zu lesen.

Dies ist der Code verwendet, um die Datei zu lesen:

import networkx as nx 
nx.read_gml("dolphins.gml") 

Und dies ist der Stack-Trace des Fehlers:

Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
File "<string>", line 2, in read_gml 
File "/usr/lib/python3.4/site-packages/networkx/utils/decorators.py",line 220, in _open_file 
result = func(*new_args, **kwargs) 
File "/usr/lib/python3.4/site-packages/networkx/readwrite/gml.py", line 210, in read_gml 
G = parse_gml_lines(filter_lines(path), label, destringizer) 
File "/usr/lib/python3.4/site-packages/networkx/readwrite/gml.py", line 383, in parse_gml_lines 
graph = parse_graph() 
File "/usr/lib/python3.4/site-packages/networkx/readwrite/gml.py", line 372, in parse_graph 
curr_token, dct = parse_kv(next(tokens)) 
File "/usr/lib/python3.4/site-packages/networkx/readwrite/gml.py", line 323, in tokenize 
(line[pos:], lineno + 1, pos + 1)) 
networkx.exception.NetworkXError: cannot tokenize 'graph' at (1, 1) 

Sind Sie in der Lage, die Datei zu lesen? Jemand hat ein ähnliches Problem erlebt? oder weiß, was den Fehler erzeugt?

Vielen Dank im Voraus!

+0

Seltsam - es hat bei mir funktioniert (ja, ich habe auch das Delfine-Netzwerk benutzt). Ich führe networkx 2.0.dev_20151001131915 in Python 2.7. – Joel

+0

Sie könnten in die gleiche Sache wie hier laufen: http://stackoverflow.com/questions/31946029/networkx-read-gml-error-networkx-exception-networkxerror-cannot-tokenize-ugra Aber niemand hat eine gegeben antworte dort. – Joel

+0

Hier ist der Quellcode für 'read_gml' http://networkx.readthedocs.org/en/latest/_modules/networkx/readwrite/gml.html Es sieht so aus, als käme die Fehlermeldung daher, dass in einigen Regex keine Übereinstimmung gefunden wird. – Joel

Antwort

2

Es funktionierte, indem die networkx-Version von 1.10 auf 1.9.1 herabstufte.

Hoffe, diese Antwort kann jemand anderem helfen.

+0

Sieht so aus, als ob die gml-reader/writer in 1.9.1 sehr "flexibel" wären (nicht viele Überprüfungen an Knoten- und Kantenattributen - nur versucht, sie so gut wie möglich zu lesen und Attribute als GML-geeignete Typen zu interpretieren - Listen, dicts) oder Strings) Spätere Versionen (1.10, 1.11) scheinen eine Reihe von Überprüfungen implementiert zu haben, die das Lesen/Schreiben älterer Dateien etwas schwierig machen. In 1.11 können Sie z. B. Knoten- oder Kantenattributschlüssel nicht mit Unterstrichen versehen! Etwas ärgerlich. Siehe hier: https://networkx.github.io/documentation/latest/_modules/networkx/readwrite/gml.html – dpb

5

In den neueren Versionen von NetworkX sollte die gml-Datei einem spezifischeren Format folgen. Das Problem mit der dolphins.gml ist, dass es vor den offenen eckigen Klammern keine Wagenrücklauf geben sollte. Zum Beispiel:

Falsches Format:

graph 
[ 
    directed 0 
    node 
    [ 
    id 0 
    label "Beak" 
    ] 
    . 
    . 
    . 

Richtiges Format:

graph [ 
    directed 0 
    node [ 
    id 0 
    label "Beak" 
    ] 
    . 
    . 
    . 

es nicht darum schert, wie viele Räume gibt es vor der eckigen Klammer, solange es mehr als eine ist und es gibt keinen Wagenrücklauf.

Was ich getan habe, war mit regulären Ausdruck, um die weißen Leerzeichen vor den öffnenden eckigen Klammern loszuwerden. Der folgende Regex hat für mich funktioniert:

\s+\[ 

und einfach durch "[" ersetzen. Vor der Klammer muss mindestens ein Leerzeichen stehen.

Denken Sie auch daran, dass jeder Knoten eine eindeutige Bezeichnung haben muss.

Ich hoffe, es hat geholfen.

+2

Falls jemand nach einem sed-Befehl sucht: 'sed -i 'N; s/\ s \ + \ [/ \ [/ g; P; D 'dolphins.gml' – surt91