示例#1
0
    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')
示例#2
0
    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')
示例#3
0
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
示例#4
0
    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')