MeCabとPythonでマルコフ連鎖を書いてみる(連鎖数2)

PythonでMeCabを使ったわかち書きができるようになったので、マルコフ連鎖のプログラムを書いてみました。
MeCabとPythonで遊んでみたメモ(パパパパパイソン) に載っているものを参考に連鎖数を2に変更してみました。

パパパパパイソンさんのと同じ文章を元に自動生成した文章がこれです。やっぱり連鎖数1の時よりも、それらしい文章を出力してくれるようです。まぁ、意味が分からないのは一緒ですが。

それは書生という人間中で一番獰悪な種族であったそうだ。この書生というのは時々我々を捕えて煮て食うという話である。掌の上で少し落ちついて書生の顔を見た。はここで始めて人間というものである。名前はまだ無い。どこで生れたかとんと見当がつかぬ。何でも薄暗いじめじめした事がない。のみならず顔の真中があまりに突起している。そうしてその穴の中から時々ぷうぷうと煙を吹く。どうも咽せぽくて実に弱った。これが人間の飲む煙草というものである事はようやくこの頃知った。これが人間の飲む煙草というものである。掌の上で少し落ちついて書生の顔を見たのがいわゆる人間というものの見始であろう。この書生という人間中で一番獰悪な種族であったそうだ。その後猫にもだいぶ逢ったがこんな片輪には一度も出会わした所でニャーニャー泣いていた事だけは記憶している。第一毛をもって装飾されべきはずの顔がつるつるしている。第一毛をもって装飾されべきはずの顔を見たのがいわゆる人間というものの見始であろう。

次に某芸能人のブログの文章を元にしたものがこれ。もともと意味分かんないから、本人が書いたと言われても分からない気がする…

ルナ溺愛する!前世から のデスティニー!チャットおもしれえ(゜∀゜)(゜∀゜)(゜∀゜)━━━━━━カワユス!キティマ ミタス!キティマミタスDSギザカワユス地球大図鑑いただいてしまった!うれしい(´;ω;`)なんかGJってコメントが沢山ですごいお(^ω^)セラムンコス貪欲にとりくんでプロクオリティめざしてるとこだお

ソース

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import sys
import random
import MeCab

def wakati(text):
    t = MeCab.Tagger("-Owakati")
    m = t.parse(text)
    result = m.rstrip(" \n").split(" ")
    return result

if __name__ == "__main__":
    filename = "test.txt"
    src = open(filename, "r").read()
    wordlist = wakati(src)

    # Create table of Markov Chain
    markov = {}
    prev1 = ""
    prev2 = ""
    for word in wordlist:
        if prev1 and prev2:
            if not markov.has_key(prev2):
                markov[prev2] = {}
            if not markov[prev2].has_key(prev1):
                markov[prev2][prev1] = []
            markov[prev2][prev1].append(word)
        prev2 = prev1
        prev1 = word

    # Generate Sentence
    count = 0
    prev2= random.choice(markov.keys())
    prev1 = random.choice(markov[prev2].keys())
    sentence = prev2 + prev1
    while count < 100:
        tmp = random.choice(markov[prev2][prev1])
        sentence += tmp
        prev2 = prev1
        prev1 = tmp
        count += 1

    print sentence

関連リンク:

改良版です → MeCabとPythonでマルコフ連鎖を書いてみる(改)



このエントリーのはてなブックマーク (-)