自然言語関係のメモ
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/