Help us understand the problem. What is going on with this article?

RSSの情報を形態素解析し、マルコフ連鎖で作成した文章をツイートする(python3)

More than 3 years have passed since last update.

作成目的

『圧縮新聞』のDTMバージョンが欲しかった(個人的用途)。
https://twitter.com/asshuku?lang=ja
いちいちRSSの情報を全部見るのも大変ですよね。斜め読みしてある程度わかるならそれに越したことはないと考えたので、作成しようかなと思いました。

【参考URL】
MeCabとPythonでマルコフ連鎖を書いてみる(改)
PythonからTwitter検索をかけ、マルコフ連鎖で文章生成をしてみる。
Raspberry Piからpython3 + twythonでツイッターに投稿してみる

コード

testBot.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import MeCab
import feedparser
import random
from twython import Twython, TwythonError

CONSUMER_KEY = "天光満る処に我は在り"
CONSUMER_SECRET = "黄泉の門開く処に汝在り"
ACCESS_KEY = "出でよ神の雷"
ACCESS_SECRET = "インディグネイション!!"
api = Twython(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_KEY, ACCESS_SECRET);


def resist_url():
    rss_url = []
    rss_url.append("http://dtmsokuhou.blog.jp/index.rdf")
    rss_url.append("http://kohrogi.com/?feed=rss2")
    rss_url.append("http://www.dtmstation.com/index.rdf")
    return rss_url


def get_rss_text(rss_url):
    all_sentence = []
    latest_entry = []
    news_dic = []

    for rss in rss_url:
        news_dic.append(feedparser.parse(rss))
    for news in news_dic:
        latest_entry.append(news['entries'][0])
        print(news.feed.title)
    for entry in latest_entry:
        print(entry.title)
        all_sentence.append(entry.title)

    return all_sentence


def analysis_sentence(all_sentence):
    tagger = MeCab.Tagger("-Owakati")
    temp_str = "".join(all_sentence)
    word_list = tagger.parse(temp_str)
    word_list = word_list.replace('\n','')
    word_list = word_list.replace(' ', '')
    word_list += " "
    markov = {}
    word1 = ""
    word2 = ""
    for word in word_list:
        if word1 and word2:
            if (word1, word2) not in markov:
                markov[(word1, word2)] = []
            markov[(word1, word2)].append(word)
        word1, word2 = word2, word
    if (word_list[len(word_list)-2], " ") not in markov:
        markov[(word_list[len(word_list)-2], " ")] = []
        print(word_list[len(word_list)-2], " ")
    markov[(word_list[len(word_list)-2], " ")].append(" ")
    return markov, word_list


def create_sentence(markov, word_list):
    count = 0
    sentence = ""
    currentWord = ""
    pastWord = ""
    word1, word2 = random.choice(list(markov.keys()))
    while count in range(100):
        currentWord = random.choice(markov[(word1, word2)])
        if currentWord == pastWord:
            break
        sentence += currentWord
        pastWord = currentWord
        word1, word2 = word2, currentWord
        count += 1
    print(sentence)
    return sentence


def tweet(sentence):
    try:
        api.update_status(status=sentence)
    except TwythonError as e:
        print(e)


if __name__ == "__main__":
    rss_url = resist_url()
    all_sentence = get_rss_text(rss_url)
    markov, word_list = analysis_sentence(all_sentence)
    sentence = create_sentence(markov, word_list)
    #print(sentence)
    tweet(sentence)

実行結果

■取得してきた文章
【期間限定】 LA-2A モデリングコンプ「CA-2A」 無料配布中
マウスポインタの場所のパラメーターを操作できるフィジカルコントローラー 『nOb 』は高級オーディオ機器のような美しい外観である
ツマミもスイッチも無い!?ApogeeのThe Elementシリーズは、未来なTBオーディオインターフェイスだった

■生成した文章
・1回目:ementシリーズは、未来なTBオーディオインタの場所のパラメーターフェイスだった
・2回目:Elementシリーズは、未来なTBオーディオ機器のような美しい外観であるツマミもスイッチも無い!?Apoge
・3回目:るフィジカルコンプ「CA-2A」無料配布中マウスポインタの場所のパラメーターフェイスだった

課題

  1. エラーに全く対処していない(140文字制限、通信障害...等)
    →文章作成時に制限を設ける、通信障害について調べる

  2. 文章が意味をなしていない(文頭が名詞始まりでない、英語が途中でぶつ切りになっている...等)
    →分かち書きのみで行っているので、文法の情報を付加して色々やる。
     英語は……MeCabの辞書をいじればどうにかなるのかな?

  3. RSS取得先が少ない
    →増やす

反省点

 コードはほぼ丸パクリなわけですが、結局書き終わった後に内容を理解しました。
 リアルタイムに理解できないと早さがでないので、理解力を高めたいですね。
 あとは肝心の中身が……。圧縮新聞およびしゅうまい君およびからしすごい。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away