File size: 4,189 Bytes
4523bda
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
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)