You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

graphfiles.py 2.1 kB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import networkx as nx
  2. def loadCT(filename):
  3. content = open(filename).read().splitlines()
  4. G = nx.Graph(name=str(content[0]))
  5. tmp = content[1].split(" ")
  6. if tmp[0] == '':
  7. nb_nodes = int(tmp[1])
  8. nb_edges = int(tmp[2])
  9. else:
  10. nb_nodes = int(tmp[0])
  11. nb_edges = int(tmp[1])
  12. for i in range(0, nb_nodes):
  13. tmp = content[i + 2].split(" ")
  14. tmp = [x for x in tmp if x != '']
  15. G.add_node(i, label=tmp[3])
  16. for i in range(0, nb_edges):
  17. tmp = content[i+G.number_of_nodes()+2].split(" ")
  18. tmp = [x for x in tmp if x != '']
  19. G.add_edge(int(tmp[0]) - 1, int(tmp[1]) - 1, label=int(tmp[3]))
  20. return G
  21. def loadGXL(filename):
  22. import networkx as nx
  23. import xml.etree.ElementTree as ET
  24. tree = ET.parse(filename)
  25. root = tree.getroot()
  26. index = 0
  27. G = nx.Graph()
  28. dic={}
  29. for node in root.iter('node'):
  30. label = node.find('attr')[0].text
  31. dic[node.attrib['id']] = index
  32. G.add_node(index, id=node.attrib['id'], label=label)
  33. index += 1
  34. for edge in root.iter('edge'):
  35. label = edge.find('attr')[0].text
  36. G.add_edge(dic[edge.attrib['from']], dic[edge.attrib['to']], label=label)
  37. return G
  38. def loadDataset(filename):
  39. from os.path import dirname, splitext
  40. dirname_dataset = dirname(filename)
  41. extension = splitext(filename)[1][1:]
  42. data = []
  43. y = []
  44. if(extension == "ds"):
  45. content = open(filename).read().splitlines()
  46. for i in range(0, len(content)):
  47. tmp = content[i].split(' ')
  48. data.append(loadCT(dirname_dataset + '/' + tmp[0]))
  49. y.append(float(tmp[1]))
  50. elif(extension == "cxl"):
  51. import xml.etree.ElementTree as ET
  52. tree = ET.parse(filename)
  53. root = tree.getroot()
  54. data = []
  55. y = []
  56. for graph in root.iter('print'):
  57. mol_filename = graph.attrib['file']
  58. mol_class = graph.attrib['class']
  59. data.append(loadGXL(dirname_dataset + '/' + mol_filename))
  60. y.append(mol_class)
  61. return data, y

A Python package for graph kernels, graph edit distances and graph pre-image problem.