in src/utils.py [0:0]
def get_graph_features(triples: List[Tuple[str, str, str]],
entity_to_idx: Dict[str, int],
predicate_to_idx: Dict[str, int],
predicates: Optional[Set[str]] = None) -> np.ndarray:
G = to_networkx(triples, entity_to_idx, predicate_to_idx, predicates, is_multidigraph=False)
uG = G.to_undirected()
mG = to_networkx(triples, entity_to_idx, predicate_to_idx, predicates, is_multidigraph=True)
# umG = mG.to_undirected()
logger.debug('mG.degree() ..')
f1 = mG.degree()
logger.debug('mG.in_degree() ..')
f2 = mG.in_degree()
logger.debug('mG.out_degree() ..')
f3 = mG.out_degree()
logger.debug('nx.pagerank(G) ..')
f4 = nx.pagerank(G)
logger.debug('nx.degree_centrality(mG) ..')
f5 = nx.degree_centrality(mG)
logger.debug('nx.in_degree_centrality(mG) ..')
f6 = nx.in_degree_centrality(mG)
logger.debug('nx.out_degree_centrality(mG) ..')
f7 = nx.out_degree_centrality(mG)
feature_lst = [f1, f2, f3, f4, f5, f6, f7]
nb_entities = int(max(v for _, v in entity_to_idx.items()) + 1)
nb_features = len(feature_lst)
res = np.zeros(shape=(nb_entities, nb_features), dtype=np.float32) # TODO: predicate features
for i, f in enumerate(feature_lst):
for k, v in (f.items() if isinstance(f, dict) else f):
res[k, i] = v
res[:, :4] = np.log(res[:, :4] + 1e-7) # log degree
return res