예제 #1
0
 def add_inverse_edge_vectors(self):
     print 'adding edge vectors for inverse edge labels ...'
     assert self.edge_vectors_map is not None and self.edge_vectors_map
     num_edge_labels = len(self.edge_vectors_map)
     edge_labels_list = self.edge_vectors_map.keys()
     print 'edge_labels_list', edge_labels_list
     for curr_edge_label in edge_labels_list:
         print '**********************************'
         #
         curr_edge_label_inverse = el.get_inverse_of_edge_label(curr_edge_label)
         print '({},{})'.format(curr_edge_label, curr_edge_label_inverse)
         #
         if not self.is_overwrite:
             assert curr_edge_label_inverse not in self.edge_vectors_map, 'inverse edge label already present'
         #
         curr_edge_label_vec = self.edge_vectors_map[curr_edge_label]
         assert len(curr_edge_label_vec.shape) == 1
         assert curr_edge_label_vec.shape[0] == 10000
         #
         curr_edge_label_matrix = curr_edge_label_vec.reshape(100,100)
         curr_edge_label_vec = None
         print 'curr_edge_label_matrix', curr_edge_label_matrix
         #
         curr_edge_label_matrix_inv = np.linalg.pinv(curr_edge_label_matrix)
         curr_edge_label_matrix = None
         print 'curr_edge_label_matrix_inv', curr_edge_label_matrix_inv
         #
         curr_edge_label_vec_inverse = curr_edge_label_matrix_inv.flatten()
         curr_edge_label_matrix_inv = None
         self.edge_vectors_map[curr_edge_label_inverse] = curr_edge_label_vec_inverse
     #
     assert len(self.edge_vectors_map) == 2*num_edge_labels
예제 #2
0
 def process_dot_file_fr_edgelabel_nodes_map(self, curr_amr_dot_file):
     nodes = self.get_nodes_frm_dot_file(curr_amr_dot_file)
     #iterate over each child of each node to add the tuple in a map with key representing edge label and list of tuples as a value
     for curr_node in nodes.itervalues():
         for curr_children_key in curr_node.children:
             if curr_children_key.lower().endswith('-of'):
                 curr_children_key_inv = el.get_inverse_of_edge_label(curr_children_key)
                 is_inverse_edge = True
             else:
                 curr_children_key_inv = curr_children_key
                 is_inverse_edge = False
             if curr_children_key_inv not in self.edgelabel_nodes_map:
                 self.edgelabel_nodes_map[curr_children_key_inv] = []
             for child in curr_node.children[curr_children_key]:
                 if is_inverse_edge:
                     curr_tuple = (curr_node.get_name_formatted(), child.get_name_formatted())
                 else:
                     curr_tuple = (child.get_name_formatted(), curr_node.get_name_formatted())
                 if curr_tuple not in self.edgelabel_nodes_map[curr_children_key_inv]:
                     self.edgelabel_nodes_map[curr_children_key_inv].append(curr_tuple)