File size: 927 Bytes
1ce499f fde9d72 1ce499f fde9d72 1ce499f fde9d72 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | import networkx as nx
def build_graph(candidate_pairs):
g = nx.Graph()
for a, b in candidate_pairs:
g.add_edge(a, b)
return g
def pair_graph_features(g, a, b):
degree_map = dict(g.degree())
degree_sum = float(degree_map.get(a, 0) + degree_map.get(b, 0))
common = len(list(nx.common_neighbors(g, a, b))) if a in g and b in g else 0
na = set(g.neighbors(a)) if a in g else set()
nb = set(g.neighbors(b)) if b in g else set()
union = len(na | nb)
inter = len(na & nb)
jaccard = float(inter / union) if union else 0.0
nodes = set([a, b]) | na | nb
sub = g.subgraph(nodes)
possible = max(1, len(nodes) * (len(nodes) - 1) / 2)
density = float(sub.number_of_edges() / possible)
return {
"graph_degree_sum": degree_sum,
"graph_common_neighbors": float(common),
"graph_jaccard": jaccard,
"graph_local_density": density,
} |