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_softmax(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')
Exemple #2
0
def sentence_vector_to_eng(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)  # フレーズリスト

    if len(phrases) == 0:
        # window_sizeが単語数より大きくて、フレーズが得られなかった
        # 補完関数を用いて、window_sizeに合うようにベクトルを生成
        completion_vector = []
        words = spliter.words(sentence)
        # それぞれの単語についてベクトルを取得
        for word in words:
            completion_vector.extend(word_vector_to_eng(word))
        # 補完を行う
        for _ in range(window_size - count):
            random_vector = [random.uniform(-0.25, 0.25) for _ in range(300)]
            completion_vector.extend(random_vector)
        # 補完済のベクトルをフレーズベクトルリストとする
        _sentence_vector.append(completion_vector)
    else:
        # フレーズを一つベクトル化する
        for phrase in phrases:
            _sentence_vector.append(phrase_vector_to_eng(phrase))

    return _sentence_vector
Exemple #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)  # フレーズリスト

    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.vector_size))
        # 補完済のベクトルをフレーズベクトルリストとする
        _sentence_vector.append(completion_vector)
    else:
        # フレーズを一つベクトル化する
        for phrase in phrases:
            _sentence_vector.append(phrase_vector(phrase))

    return _sentence_vector
Exemple #4
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)

        # 出力
        with open(file_name, 'a') as f:
            f.write(str(corr_label) + '\t' + sentence + '\n')

            # 各フレーズに関する出力をまとめる
            for i in range(len(phrases)):
                pred_label1 = [str(label_pred) for label_pred in pred_labels1.data[i]]
                pred_label2 = [str(label_pred) for label_pred in pred_labels2.data[i]]
                pred_label3 = [str(label_pred) for label_pred in pred_labels3.data[i]]
                pred_label4 = [str(label_pred) for label_pred in pred_labels4.data[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')
Exemple #5
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.data):
                pred_label = [str(label) for label in pred_label]
                f.write('\t'.join(pred_label) + '\t' + ' '.join(phrase) + '\n')

        # 各文章の終わりに空行を入れる
        with open(file_name, 'a') as f:
            f.write('\n')