1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【マルコフ連鎖】 Pythonに名言を読み込ませてみた。

Posted at

こんにちは。Pylocです。
今回は、PyhonとJanomeを使ったマルコフ連鎖プログラムの元データを名言にして、どんな名言ができるかをみていきたいと思います。

プログラムの用意

プログラムは ここ から取ってきましょう。
一応ここにも載せておきます。

Markov.py
# -*- coding: utf-8 -*-
 
import random
from janome.tokenizer import Tokenizer
  
# Janomeを使用してテキストデータを単語に分割する
def wakati(text):
    text = text.replace('\n','') #改行を削除
    text = text.replace('\r','') #スペースを削除
    t = Tokenizer()
    result =t.tokenize(text, wakati=True)
    return result
 
#デフォルトの文の数は5
def generate_text(num_sentence=5):
    src = open(r"Text.txtのフルパス", "r", encoding="utf-8").read() #Text.txtの絶対パスを使う(手順通りなら C:\Users\ユーザー名\Desktop\Markov\Text.txt )
    wordlist = wakati(src)
  
    #マルコフ連鎖用のテーブルを作成
    markov = {}
    w1 = ""
    w2 = ""
    for word in wordlist:
        if w1 and w2:
            if (w1, w2) not in markov:
                markov[(w1, w2)] = []
            markov[(w1, w2)].append(word)
        w1, w2 = w2, word
  
    #文章の自動生成
    count_kuten = 0 #句点「。」の数
    num_sentence= num_sentence
    sentence = ""
    w1, w2  = random.choice(list(markov.keys()))
    while count_kuten < num_sentence:
        tmp = random.choice(markov[(w1, w2)])
        sentence += tmp
        if(tmp==''):
            count_kuten += 1
            sentence += '\n' #1文ごとに改行
        w1, w2 = w2, tmp
     
    print(sentence)
     
if __name__ == "__main__":
    generate_text()

これを、デスクトップ上などに作成したMarkovフォルダーの中に入れます。
そして、Markovフォルダー内にText.txtというファイルを作っておきます。
16行目のText.txtのフルパスというのは、自分の環境に合わせて変更してください。

Text.txtの内容

Text.txtはマルコフの元ファイルとなります。
今回は、名言なので、それを作っておきます。

名言を収集する

今回は、https://iyashitour.com/meigen/theme/life から名言を集めました。
一応載せないでおきます。

実行・結果

まず実行します。

python Markov.pyのフルパス

実行してからしばらくすると、結果が出ます。
さて、どんな文章になっているのでしょう?

一回目

まずは三ページ分の文章でやってみましょう。

あり狙いである。
どうやって生きるのだ。
倒れないように見せかけ、利口に行動することである。
確信を持って人生の広漠としたとき、みじめな気持ちで人生を振り返らなくてはならない。
人生とは、休憩時間の得点である。

どこか名言っぽいですが、少し不自然です。

二回目

次に五ページ分の文章でやってみます。

つくしたなんて決して思わないことよ。
それがもっとも素晴らしい偉業である。
そのフシがある。
幸福は人生を愛せ。
自分の愛する人生を重く見ず、捨て身になったという六十代の人間は自由を恐れる。

そろそろ私のパソコンが私の年以上になって来ている気がします。

三回目

最後は、全部(15)ページ読み込みます。

苦悩のもと」と逆に言いあてているということを見出す。
人はただ、それは悲しみを招くだけではなく、できることから少しずつ努力を重ね、昨日の自分よりちょっとだけでも成長しようとしているだけだ。
人と競うのではない。
人のために、徹底的に生きるかのようなつもりで歩むほど危険なことを見つけ出すこと。
お金があっても、自分に関することがらについて、あやまった考え方をするところから生じる。

うーん。やっぱり偉人同様にするには、人生ともっとたくさんのデータが必要そうです...

まとめ

名言というのは、自分が人生を歩んできたからこそ言えることであって、他の人には真似できないんですね。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?