eduzrh's picture
EvoRM V5: Complete framework with all fixes (part 9)
4523bda verified
Raw History Blame Contribute Delete
4.19 kB
import itertools
import numpy as np
from openea.modules.load.kg import KG
from openea.modules.load.kgs import KGs
def find_alignment(sim_mat, k):
nearest_k_neighbors = search_nearest_k(sim_mat, k)
return nearest_k_neighbors
def search_nearest_k(sim_mat, k):
assert k > 0
neighbors = list()
num = sim_mat.shape[0]
for i in range(num):
rank = np.argpartition(-sim_mat[i, :], k)
pairs = [j for j in itertools.product([i], rank[0:k])]
neighbors.append(pairs)
assert len(neighbors) == num
return neighbors
def read_items(file_path):
print("read items:", file_path)
items = list()
file = open(file_path, 'r', encoding='utf8')
for line in file.readlines():
items.append(line.strip('\n').strip())
return items
class MyKGs(KGs):
def __init__(self, kg1: KG, kg2: KG, train_links, test_links,
train_unlinked_entities1, valid_unlinked_entities1, test_unlinked_entities1,
train_unlinked_entities2, valid_unlinked_entities2, test_unlinked_entities2,
valid_links=None, mode='mapping', ordered=True):
super().__init__(kg1, kg2, train_links, test_links, valid_links=valid_links, mode=mode, ordered=ordered)
linked_label = 0.
unlinked_label = 1.
self.train_unlinked_entities1 = [(self.kg1.entities_id_dict.get(ent), unlinked_label) for ent in train_unlinked_entities1]
self.valid_unlinked_entities1 = [(self.kg1.entities_id_dict.get(ent), unlinked_label) for ent in valid_unlinked_entities1]
self.test_unlinked_entities1 = [(self.kg1.entities_id_dict.get(ent), unlinked_label) for ent in test_unlinked_entities1]
self.train_linked_entities1 = [(ent, linked_label) for ent in self.train_entities1]
self.valid_linked_entities1 = [(ent, linked_label) for ent in self.valid_entities1]
self.test_linked_entities1 = [(ent, linked_label) for ent in self.test_entities1]
self.train_null_data1 = self.train_unlinked_entities1 + self.train_linked_entities1
self.valid_null_data1 = self.valid_unlinked_entities1 + self.valid_linked_entities1
self.test_null_data1 = self.test_unlinked_entities1 + self.test_linked_entities1
print("training/valid/test/total null ea data in KG1:",
len(self.train_null_data1), len(self.valid_null_data1), len(self.test_null_data1),
len(self.train_null_data1) + len(self.valid_null_data1) + len(self.test_null_data1),
self.kg1.entities_num)
self.train_unlinked_entities2 = [(self.kg2.entities_id_dict.get(ent), unlinked_label) for ent in train_unlinked_entities2]
self.valid_unlinked_entities2 = [(self.kg2.entities_id_dict.get(ent), unlinked_label) for ent in valid_unlinked_entities2]
self.test_unlinked_entities2 = [(self.kg2.entities_id_dict.get(ent), unlinked_label) for ent in test_unlinked_entities2]
self.train_linked_entities2 = [(ent, linked_label) for ent in self.train_entities2]
self.valid_linked_entities2 = [(ent, linked_label) for ent in self.valid_entities2]
self.test_linked_entities2 = [(ent, linked_label) for ent in self.test_entities2]
self.train_null_data2 = self.train_unlinked_entities2 + self.train_linked_entities2
self.valid_null_data2 = self.valid_unlinked_entities2 + self.valid_linked_entities2
self.test_null_data2 = self.test_unlinked_entities2 + self.test_linked_entities2
print("training/valid/test/total null ea data in KG2:",
len(self.train_null_data2), len(self.valid_null_data2), len(self.test_null_data2),
len(self.train_null_data2) + len(self.valid_null_data2) + len(self.test_null_data2),
self.kg2.entities_num)
def viz_sim_list(sim_list, interval=0.1):
num = int(1 / interval)
nums = []
for i in range(num):
nums.append(round(i * interval, 1))
nums.append(1.0)
sim_nums = [0] * num
for sim in sim_list:
idx = int(sim * 10)
sim_nums[idx] += 1
res = []
n_inst = len(sim_list)
for sim in sim_nums:
res.append(round(sim / n_inst, 3))
print(res)