オウムらしからぬ適当なことを喋る
目次 [Raspberry pi 3 + Python = Twitter Bot]
- Twitterの開発者登録からツイートをポストするまで
- Python-Twitterモジュールの情報まとめ
- メンションをもらったら返答するようにした
- 異常終了の原因を追及できるように例外の処理を追加
- マルコフ連鎖モジュールのPython3対応作業
前回までに、マルコフ連鎖に関連するモジュールをいくつか改造しまして、動作するようにしました。これは、ツイートを自動生成する処理の基板にあたるものです。今回はようやく独自のツイートを生成して投稿するところを作ろうと思います。
つくっていて急に心配になったのですが、オウムも場合によっては人語を喋りますよね。九官鳥じゃなかったかと心配になりました。他所様の動画ですが、これすごいですね。オウムが笑うと子供がつられて笑うので、ますますオウムが笑うようになるという…… 恐ろしい連鎖です。
ツイート生成の方針
これまでに、トレンドワードを取得してリストにするところまではできていました。これをツイートにまとめて投稿することもできます。
トレンドを取得すると、キーワードだけでなく、関連する情報もついてきます。キーワードは trend.name という名称で取り出せるのですが、他にも trend.url という名前で、関連ツイートを検索するURLが取得できます。このURLをSearchして、他のツイートをまとめ、それをマルコフ連鎖モジュールで「学習」したあと、自分なりのツイートを生成することにします。できあがりはこんな感じです。
ただ、取得したツイートを学習させるだけだと、他の方のツイートをそのままパクツイしたようなものも生成されてしまいます。それに他人を中傷するツイートも少なからずあるので、安易にマネしてしまうのは危ないこともあります。そんなわけで、カタカナに展開することでインパクトを和らげることにしました(まぁ、オウムですし……(逃避))。ただ、全部カタカナだと何を言っているのかわからないので、トレンドワードそのものは残しておくことにしています。
技術的なところ
マルコフ連鎖は、前回Python3対応の作業をした python-markovchains と、その前提モジュールとなる py-extractword を使用します。
具体的には、こんな流れになりますね。あとはひとつひとつ地道に作っていくだけです。
今回のハマリポイント
markovchains.make_sentence()が、無限に長い文章を生成して応答を返さなくなることがあります。プログラムがCPUを100%使用する状態のまま止まってしまい原因を探るのに苦労しました。そういうときはpython -m pdbを使用してデバッガから動作を確認するのが早道かとおもいます。
この問題は、python-markovchainsのmake_sentence()関数の中に処理を追加して対処しました。ツイッターではどうせ140文字を超えたらツイートできないのですから、漢字を含めて100文字くらいで終わってくれないと、使えません。ある程度長くなったところで諦めて結果を返すように動作変更しました。GitHUBからforkしたのは今回が初めてですが、やってみるものですね。
次回予告?
気の向くままに作業していますが、それでもフォローしてくれる人がいるので、フォローが届いたらフォロー返しをしようかと思います。多くのBotはこちらから積極的にフォローしていきますが、そこまでやっても得るものがあるかどうか…… しばらくはやめておきましょう。
Raspberry Pi 3 Model B (Element14)
- 出版社/メーカー: RASPBERRY-PI
- メディア: エレクトロニクス
- この商品を含むブログ (1件) を見る
図解入門 最新人工知能がよ~くわかる本 (How-nual図解入門Visual Guide Book)
- 作者: 神崎洋治
- 出版社/メーカー: 秀和システム
- 発売日: 2016/07/05
- メディア: 単行本
- この商品を含むブログを見る