Как прочитать файл XML с меткой в ​​блокноте Jupyter? - PullRequest
0 голосов
/ 10 июля 2019

У меня есть взвешенный сетевой gml-файл, и я не могу успешно прочитать его в блокноте jupyter.Часть моего файла отображается следующим образом:

graph
[
   node
   [
      id 1

   ]
   node
   [
      id 2

   ]

(..some nodes and edges)

 edge
   [
      source 34
      target 24
      value  4.00
   ]
   edge
   [
      source 11
      target 6
      value  3.00
   ]
]

мой файл можно загрузить с помощью: Посетите https://area51.stackexchange.com/https://gawron.sdsu.edu/python_for_ss/course_core/book_draft/Social_Networks/Networkx.html 9.2.6

Код, который я использую для чтения файла::

import networkx as nx
kn2 = nx.read_gml('/Users/kate/Desktop/karate_club/weighted_karate.gml')

и ошибка:

NetworkXError: node #0 has no 'label' attribute

Я за исключением успешного чтения файла с меткой и весами.

1 Ответ

0 голосов
/ 10 июля 2019

read_gml автоматически переименовывает проанализированные узлы:

label (string, optional) - Если не None, проанализированные узлы будут переименованы в соответствии с атрибутами узла, обозначенными label. Значение по умолчанию: ‘label’.

Вы можете установить label на 'id', поэтому read_gml будет устанавливать идентификаторы узлов в соответствии с полем id в файле .gml:

import networkx as nx
kn2 = nx.read_gml('karate.gml', label='id')
print(kn2.edges)

[(1, 32), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (1, 7), (1, 8), (1, 9), ...]


Редактировать 1: Похоже, книга немного устарела. Для стабильной версии read_gml нужна строка multigraph 1 в файле .gml, если в ней есть дубликаты ребер. Вы должны добавить это:

Creator "Jean Mark Gawron on Sunday, 15. December 2013 02:40PM"
graph
[
   multigraph 1 <------------------ HERE
   node
   [
      id 1
   ]
   node
   [
      id 2
   ]
...

Затем вы можете получить доступ к значениям ребер следующим образом:

kn2.edges.data('value')

или отсортируйте их, как в книге:

all_edges = sorted(
    kn2.edges(),
    key=lambda x: kn2.get_edge_data(*x)[0]['value'],
    reverse=True
)
...