はじめに
はるか昔にTwitterのデータを取得し、マルコフ連鎖。というのをやったのですが、Djangoに組み込んでみようとやってみました。結果を最初に言うと、問題大アリです。現時点での作業途中経過までを残しておこうと思います。
過去の記事はこちらから
Twitter検索で情報を溜め込み、形態素解析してマルコフ連鎖で文章を生成してツイート。
Python3では.has_key が使えないので、
if markov.has_key(w):
という処理は
if w in markov:
と書き換えるイメージです。
Python3でMeCabを使う準備
$ brew install mecab
$ brew install mecab-ipadic
$ pip install mecab-python3
こういう形でインストールしてみました。
コード
例によってDMM18禁動画のRSSを取りに行きます。
Djangoで作る簡易RSSリーダー
上記とほぼ同じことをやっていますので参考にどうぞ。
タイトルとディスクリプションを取得し保存します。
views.py
import feedparser
import MeCab
import random
import re
import sys, codecs
sys.stdout = codecs.getwriter('utf-8')(sys.stdout)
from django.http import HttpResponse
from django.shortcuts import (render, redirect,)
def index(request):
url = 'http://www.dmm.co.jp/digital/videoa/-/list/rss/=/sort=date/'
feeder = feedparser.parse(url)
for entry in feeder['entries']:
lists = entry['description'] + entry['title']
f = open('text.txt', 'w')
f.write(lists)
f.flush()
f.close()
f = open('text.txt', 'r')
mecab_read = f.read()
f.close()
tagger = MeCab.Tagger('-Owakati')
wordlist = tagger.parse(mecab_read)
wordlist = wordlist.rstrip(' \n').split(' ')
f = open('l.txt', 'w')
f.write(str(wordlist))
f.close()
markov = {}
w = ''
for x in wordlist:
if w:
if w in markov:
new_list = markov[w]
else:
new_list =[]
new_list.append(x)
markov[w] = new_list
w = x
choice_words = wordlist[0]
sentence = ''
count = 0
while count < 20:
choice_words = random.choice(wordlist)
sentence += choice_words
count += 1
sentence = sentence.split(' ', 1)[0]
p = re.compile('[!-/:-@[-`{-~]')
sus = p.sub('', sentence)
context = {
'wordlist': wordlist,
'sus': sus,
}
return render(request,'index.html',context)
index.html
{% extends "base.html" %}
{% block body %}
<div class="container">
<div class="row">
<div class="col-md-12">
<p class="1">{{ wordlist }}</p>
<p class="2">{{ sus }}</p>
</div>
</div>
</div>
{% endblock %}
結果

このようなクソ結果に終わりました。
ディスクリプションには金額が入っちゃってるので除去しておかないと駄目ですね・・・。
女優名もカットしておかないと意味わからないことになることも分かりました。
精進します。
本来やりたかったこと
AVタイトルをマルコフ連鎖で作りたかったわけです。