def output(self, file_name, sentence, corr_label, phrases_probability): """ テストを行なった結果をファイルに書き出す :param file_name: 出力ファイル名 :param sentence: 文章 :param corr_label: 正解ラベル :param phrases_probability: ある文章の各フレーズに対する出力リスト :return: なし """ # フレーズリストを出す phrases = spliter.phrases(sentence, self.window_size) # 文に対する予測ラベルを出す pred_label = self.consult_majority(phrases_probability) # 出力 with open(file_name, 'a') as f: f.write( str(corr_label) + '\t' + str(pred_label) + '\t' + sentence + '\n') # 各フレーズに関する出力をまとめる for i in range(len(phrases)): f.write('\t'.join(phrases_probability) + ' '.join(phrases[i]) + '\n') # 各文章の終わりに空行を入れる with open(file_name, 'a') as f: f.write('\n')
def output(self, file_name, sentence, corr_label, pred_labels1, pred_labels2, pred_labels3, pred_labels4): """ テストを行なった結果をファイルに書き出す :param file_name: 出力ファイル名 :param sentence: 文章 :param corr_label: 正解ラベル :param pred_labels1: ラベルが1以上の予測確率 :param pred_labels2: ラベルが2以上の予測確率 :param pred_labels3: ラベルが3以上の予測確率 :param pred_labels4: ラベルが4以上の予測確率 :return: なし """ # フレーズリストを出す phrases = spliter.phrases(sentence, self.window_size) # 文に対する予測ラベルを出す pred_label = self.consult_softmax(pred_labels1, pred_labels2, pred_labels3, pred_labels4) # 出力 with open(file_name, 'a') as f: f.write( str(corr_label) + '\t' + str(pred_label) + '\t' + sentence + '\n') # 各フレーズに関する出力をまとめる for i in range(len(phrases)): pred_label1 = [ str(label_pred) for label_pred in pred_labels1[i] ] pred_label2 = [ str(label_pred) for label_pred in pred_labels2[i] ] pred_label3 = [ str(label_pred) for label_pred in pred_labels3[i] ] pred_label4 = [ str(label_pred) for label_pred in pred_labels4[i] ] f.write('\t'.join(pred_label1) + '\t' + '\t'.join(pred_label2) + '\t' + '\t'.join(pred_label3) + '\t' + '\t'.join(pred_label4) + '\t' + ' '.join(phrases[i]) + '\n') # 各文章の終わりに空行を入れる with open(file_name, 'a') as f: f.write('\n')
def sentence_vector(sentence, window_size=1): """ 文章をベクトル化する :param sentence: 英語文章 <class: 'str'> :param window_size: 切り取るウィンドウサイズ <class: 'int'> :return: 文章から得られるフレーズベクトルリスト <class: 'list'> """ _sentence_vector = [] # 文章ベクトル count = spliter.word_count(sentence) # 単語数 phrases = spliter.phrases(sentence, window_size) # フレーズリスト # window_sizeが単語数より大きくて、フレーズが得られなかった if len(phrases) == 0: # window_sizeが単語数より大きくて、フレーズが得られなかった # 補完関数を用いて、window_sizeに合うようにベクトルを生成 completion_vector = [] words = spliter.words(sentence) # それぞれの単語についてベクトルを取得 for word in words: completion_vector.extend(word_vector(word)) # 補完関数が設定されていなかったら、エラー処理 if w2v.completion_func is None: sys.stderr.write("KeyError: 補完用のコールバック関数を指定してください。\n") exit() # 補完を行う for _ in range(window_size - count): completion_vector.extend(w2v.completion_func( w2v.model.vector_size)) # 補完済のベクトルをフレーズベクトルリストとする _sentence_vector.append(completion_vector) # 適切なフレーズリストが求められたので、ベクトル化する else: for phrase in phrases: _sentence_vector.append(phrase_vector(phrase)) return _sentence_vector
def output(self, file_name, sentence, corr_label, pred_labels): """ 結果をファイルに出力する :param file_name: 出力ファイル :param sentence: 文章 :param corr_label: 正解ラベル :param pred_labels: 予測確率 :return: なし """ # フレーズリストを取得する phrases = spliter.phrases(sentence, self.window_size) # 出力 with open(file_name, 'a') as f: f.write(str(corr_label) + '\t' + sentence + '\n') # 各フレーズに関する出力をまとめる for (phrase, pred_label) in zip(phrases, pred_labels): f.write(str(pred_label) + '\t' + ' '.join(phrase) + '\n') # 各文章の終わりに空行を入れる with open(file_name, 'a') as f: f.write('\n')