自然言語処理

自然言語関係のメモ

214 views

テキストファイルを読み込み、トークンを管理するクラス。
単語は重複を除去し、昇順に並び替えた状態で管理する。
自然言語処理で使うことを想定したクラス。

# coding: UTF-8
from janome.tokenizer import Tokenizer


class TokenManager(object):

    def __init__(self, filename):
        # キーが単語、値がIDのディクショナリ
        self.word_to_id = {}
        # キーがID、値が文字のディクショナリ
        self.id_to_word = {}
        # ファイルを読み込む
        self.extract_unique_words_from_file(filename)

    def extract_unique_words_from_file(self, filename):
        """
        テキストファイルを読み込み、単語リストを作成する。
        単語リストは名前順にソートし、かつ、重複は除去してIDを生成する
        :param filename: テキストファイルの名前
        :return: なし
        """
        # JanomeのTokenizerを初期化
        t = Tokenizer()

        # テキストファイルを読み込み
        with open(filename, 'r', encoding='utf-8') as f:
            text = f.read()

        # 形態素解析を実行
        tokens = t.tokenize(text)

        # 単語のリストを作成
        words = [token.surface for token in tokens if token.surface != '\n']

        # 重複を取り除く
        unique_words = list(set(words))
        # ソートする
        unique_words.sort()

        for i, word in enumerate(unique_words):
            self.word_to_id[word] = i
            self.id_to_word[i] = word

    def get_vocab_size(self):
        """
        単語の数を返却する
        :return: 単語の数
        """
        return len(self.word_to_id)

    def get_id_list(self, text):
        """
        テキストをIDのリストに変換する
        :param text: 変換したい文字列
        :return:IDのリスト
        """
        id_list = []
        for word in text:
            id = self.word_to_id[word]
            id_list.append(id)

        return id_list

    def get_word_list(self, id_list):
        """
        idから単語のリストを作成する
        :param id_list:
        :return: 単語のリスト
        """
        word_list = []
        for id in id_list:
            word = self.id_to_word[id]
            word_list.append(word)

        return word_list

    def get_text(self, id_list):
        """
        idからテキストを作成する
        :param id_list:
        :return: 文字列
        """
        text = ""
        for id in id_list:
            word = self.id_to_word[id]
            text += word

        return text


if __name__ == '__main__':
    """
    使用例
    """
    token_man = TokenMan("data.txt")
    word_list = token_man.get_word_list([0, 1, 2])
    id_list = token_man.get_id_list(["こんにちは", "さようなら"])
    text = token_man.get_text([0, 1, 2])
    print(word_list)
    print(id_list)
    print(text)

Page 6 of 6.

前のページ



[添付ファイル]


お問い合わせ

プロフィール

すぺぺぺ

自己紹介

本サイトの作成者。
プログラムは趣味と勉強を兼ねて、のんびり本サイトを作っています。
フレームワークはdjango。
ChatGPTで自動プログラム作成に取り組み中。

サイト/ブログ

https://www.osumoi-stdio.com/novel/

ツイッター

@darkimpact0626