| class Writer(object): | |
| def __init__(self, alphabets): | |
| self.__source_file = None | |
| self.alphabets = alphabets | |
| def start(self, file_path): | |
| self.__source_file = open(file_path, 'w') | |
| def close(self): | |
| self.__source_file.close() | |
| def write(self, word, pos, ner, head, arc, lengths, auto_label=None, symbolic_root=False, symbolic_end=False): | |
| batch_size, _ = word.shape | |
| start = 1 if symbolic_root else 0 | |
| end = 1 if symbolic_end else 0 | |
| for i in range(batch_size): | |
| for j in range(start, lengths[i] - end): | |
| w = self.alphabets['word_alphabet'].get_instance(word[i, j]) | |
| p = self.alphabets['pos_alphabet'].get_instance(pos[i, j]) | |
| n = self.alphabets['ner_alphabet'].get_instance(ner[i, j]) | |
| t = self.alphabets['arc_alphabet'].get_instance(arc[i, j]) | |
| h = head[i, j] | |
| if auto_label is not None: | |
| m = self.alphabets['auto_label_alphabet'].get_instance(auto_label[i, j]) | |
| self.__source_file.write('%d\t%s\t%s\t%s\t%d\t%s\t%s\n' % (j, w, p, n, h, t, m)) | |
| else: | |
| self.__source_file.write('%d\t%s\t%s\t%s\t%d\t%s\n' % (j, w, p, n, h, t)) | |
| self.__source_file.write('\n') | |
| class Index2Instance(object): | |
| def __init__(self, alphabet): | |
| self.__alphabet = alphabet | |
| def index2instance(self, indices, lengths, symbolic_root=False, symbolic_end=False): | |
| batch_size, _ = indices.shape | |
| start = 1 if symbolic_root else 0 | |
| end = 1 if symbolic_end else 0 | |
| instnaces = [] | |
| for i in range(batch_size): | |
| tmp_instances = [] | |
| for j in range(start, lengths[i] - end): | |
| instamce = self.__alphabet.get_instance(indices[i, j]) | |
| tmp_instances.append(instamce) | |
| instnaces.append(tmp_instances) | |
| return instnaces |