2013-10-14 1 views
1

J'ai essayé d'analyser certains attributs supplémentaires à un networkx gml pour les utiliser plus tard, et j'ai rencontré un problème. Lorsqu'il reçoit un fichier gml de Cytoscape, networkx génère un fichier gml qu'il ne peut pas lire lui-même.Networkx parse gml écrivant des fichiers gml inutilisables

I.e. Cytoscape -> Dans NetworkX -> Sortie -> Dans NetworkX -> Erreur:

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

Maintenant que l'erreur demande une plus] après que les noeuds (Alias ​​faisant le graphique ignorer les bords), si vous faites cela, le graphique travaux. Cependant, il n'a plus d'arêtes.

Pour tester pleinement ce que je faisais le 'Cytoscape -> Dans NetworkX -> Sortie' sans changer le code du tout, il suffit:

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

puis lire avec:

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

Et l'erreur est encore reproductible. Donc je suppose que c'est à voir avec comment networkx écrit des fichiers gml.

Les deux fichiers que je utilise sont:

Si quelqu'un pourrait donner un aperçu des raisons pour lesquelles cela pourrait se produire, il serait très appréciée!

Répondre

1

Il s'agit d'un bogue dans NetworkX lors de la génération d'attributs imbriqués (données graphiques de bord dans ce cas). Un ensemble supplémentaire de guillemets a été incorrectement ajouté à l'attribut "Ligne".

Le correctif a été fusionné dans le cadre de cette demande de traction: https://github.com/networkx/networkx/pull/981

+0

Magnifique, merci beaucoup! – Darkstarone

1

Pyparsing n'est pas la bibliothèque la plus intelligente lorsqu'il s'agit d'identifier quand des erreurs d'analyse se produisent. Les versions plus récentes de la bibliothèque supportent une meilleure identification des erreurs, mais elles nécessitent certaines mises à jour des parseurs pour obtenir ces informations.

Sans voir l'analyseur, de votre description, il semble que l'analyseur attend de voir quelque chose comme:

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

Ce qui se passe est qu'il obtient avec succès passé le « groupe de noeuds ... », puis trouve un problème de syntaxe dans l'un des bords de la partie "paquet facultatif des arêtes ...". Puisque ceci est optionnel, les choses seraient toujours valides si seulement il y avait une fermeture ']' après les nœuds. C'est pourquoi vous obtenez ce message d'exception pyparsing. Mais le vrai problème est que l'un des bords a une faute de frappe.

Pour diagnostiquer ceci, essayez de ne donner que les premiers bords à l'analyseur. Ensuite, continuez à ajouter de plus en plus d'arêtes jusqu'à ce que vous obteniez l'erreur de pyparsing - les arêtes les plus récemment ajoutées contiennent l'erreur de syntaxe critique.