diff --git a/builder.py b/builder.py new file mode 100644 index 0000000000000000000000000000000000000000..d1a803a92a9d320845f546f6991796a6b132bd54 --- /dev/null +++ b/builder.py @@ -0,0 +1,45 @@ +'''Reads the graph and node contexts''' + +import networkx as nx + +def build_graph(): + '''Read input network''' + + G = nx.read_edgelist('input/cora.edgelist', nodetype=int, create_using=nx.Graph()) + for e in G.edges: + G.edges[e]['weight'] = 1 + + return G + +def node_labels(): + '''Read node classes''' + + G = build_graph() + d = {} + with open('input/coralabels.edgelist', 'r') as lab: + l = lab.readlines() + + if len(l[0].split(' ')) == 2: + x = [int(w.split(' ')[0]) for w in l] + y = [int(w.split(' ')[-1].rstrip('\n')) for w in l] + for j in range(len(x)): + d[x[j]] = y[j] #For label data with node + elif len(l[0].split(' ')) == 1: + for i, k in enumerate(l, 1): #start counting from 1 + d[i] = int(k.rstrip('\n')) #For label data without node + else: print('Edges more than 2 nodes') + labels_dict = {} + for node in G.nodes: + labels_dict[node] = d[node] + return labels_dict + + +def node_neighbor_labels(): + G = build_graph() + labels_dict = node_labels() + neighbor_labels = {} + for node in G.nodes: + nn = list(G.neighbors(node)) + nnlabel = [labels_dict[n] for n in nn] #Superimpose labels on node id + neighbor_labels[node] = nnlabel + return neighbor_labels, labels_dict \ No newline at end of file