Mercurial > hg > drupalISMI
view importFromOpenMind/importer/model2neo4j.py @ 23:45a823b5bf33
updated ismi2model importer and model2neo4j exporter.
author | casties |
---|---|
date | Wed, 23 Sep 2015 19:18:59 +0200 |
parents | |
children | 5bdcb5805d29 |
line wrap: on
line source
import networkx as nx from neo4jrestclient.client import GraphDatabase, Node import sys ## configure behaviour # metworkx graph file input_fn = 'ismi_graph.gpickle' # label added to all nodes project_label = '_ismi4' # neo4j base URL neo4jBaseURL = "http://localhost:7474/db/data/" ## setup n4j_nodes = {} n4j_relations = {} def fixName(name, is_src_rel=False, is_tar_rel=False, att_from_rel=False): # these are too embarrassing... if 'FLORUIT' in name: name = name.replace('FLORUIT', 'FLOURISH') elif 'floruit' in name: name = name.replace('floruit', 'flourish') if is_src_rel: #name = name + '>' pass if is_tar_rel: name = '<' + name if att_from_rel: # clean up relations as attribute names name = name.replace('is_', '') name = name.replace('has_', '') name = name.replace('was_', '') name = name.replace('_of', '') return name def copyNodes(nx_graph, n4j_graph): """copy all nodes from nx_graph to n4j_graph""" print("Copying nodes to Neo4J") cnt = 0 for node_id in nx.nodes_iter(nx_graph): attrs = nx_graph.node[node_id] type = attrs['type'] ismi_id = attrs['ismi_id'] # create node with attributes n4j_node = n4j_graph.nodes.create(**attrs) # add labels n4j_node.labels.add([project_label, type]) # save reference n4j_nodes[ismi_id] = n4j_node cnt += 1 if cnt % 100 == 0: print(" %s"%cnt) def copyRelations(nx_graph, n4j_graph): """copy all relations from nx_graph to n4j_graph""" print("Copying relations to Neo4J") cnt = 0 for nx_edge in nx.edges_iter(nx_graph): (nx_src, nx_tar) = nx_edge # get attributes of edge attrs = nx_graph.edge[nx_src][nx_tar][0] type = attrs['type'] # get ismi_id of source and target nodes src_id = nx_graph.node[nx_src]['ismi_id'] tar_id = nx_graph.node[nx_tar]['ismi_id'] # get Neo4J nodes src = n4j_nodes.get(src_id, None) if src is None: print("ERROR: src node %s missing!"%src_id) break tar = n4j_nodes.get(tar_id, None) if tar is None: print("ERROR: tar node %s missing!"%tar_id) break # create Neo4J relation n4j_rel = n4j_graph.relationships.create(src, type, tar) # add attributes n4j_rel.properties = attrs cnt += 1 if cnt % 100 == 0: print(" %s"%cnt) ## main print("Copy graph from networkx to Neo4J") # read commandline parameters if len(sys.argv) > 1: input_fn = sys.argv[1] # read networkx graph from pickle print("Reading graph from %s"%input_fn) nx_graph = nx.read_gpickle(input_fn) print("Graph info: %s"%nx.info(nx_graph)) # open neo4j graph db print("Opening Neo4J db at %s"%neo4jBaseURL) n4j_graph = GraphDatabase(neo4jBaseURL, username="neo4j", password="neo5j") copyNodes(nx_graph, n4j_graph) copyRelations(nx_graph, n4j_graph) print("Done.")