C#でも作ったけど、Pythonでも作ってみた。 といってもこの記事にあるソースコードとほぼ同じ。
ほぼ同じだけど、実際に自分で入力して実行してみるとたいていはエラーが発生するので、それを修正すると色々勉強になる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
import MeCab import random def make_model(stext): model = {} stext = stext.split('\n') for sentence in stext: if not sentence: break if sentence[-1] != '。': print('Error', sentence) continue words = sentence.split(' ') word0 = 'BoS0' word1 = 'BoS1' for word in words: key = (word0, word1) if key in model: model[key].append(word) else: model[key] = [word] word0, word1 = word1, word return model def gen_sentence(model): key0_list = model[('BoS0', 'BoS1')] key0 = key0_list[random.randint(0, len(key0_list)-1)] key1_list = model[('BoS1',key0)] key1 = key1_list[random.randint(0, len(key1_list)-1)] result = key0 + key1 while key1 != '。': key_list = model[(key0,key1)] key = key_list[random.randint(0, len(key_list)-1)] result += key key0, key1 = key1,key return result with open('砂漠の少年.txt') as f: text = f.read() tagger = MeCab.Tagger("-O wakati") result = tagger.parse(text) tbl = str.maketrans({'。' : '。\n'}) result = result.translate(tbl).replace('\n ','\n') model2 = make_model(result) for _ in range(5): print(gen_sentence(model2)) |
学習にはフリーのテキストを使った。
5行の文章を作成した結果
C#で作った時よりも自然な文章が生成されているような気がする。 学習用の文章のせいか?