0

ahokaiに適当にtimelineの空気を読んで発言する機能、NGワード機能を追加、gemのアップデートに対応など


ahokaiという、俺の発言を収集・再構築して喋るtwitter botに

  • ruby twitter gem0.6あたりから認証方法が変わったので、現最新版(0.6.6)に対応
  • タイムラインに含まれる名詞の出現回数をチェックしてその単語から文章を作る
  • post前に発言を検閲し、NGワードが含まれていたら発言を再度作り直す
という機能追加を行った。
あとは、replyとNGユーザ機能を気の向いた時に付ける予定。


ahokaiについては橋本商会 スーパーボット大戦およびymrl.net – 裏Twitterへ。
勝手にbot化しても許してくれそうな人の発言を収集し、賛同者?の方々と共にすこしずつbotが増やしています。ありがとうございます。


■既にahokaiを動かしていて、バージョンアップしたい場合
http://bitbucket.org/shokai/bot-ahokai/ からhg pullしてhg upするか、*.rbファイルを最新版のソースコードに置き換えてください。
DBやconfig.yaml等は書き換えなくても動作します。
ruby twitter gemはアップデートして最新のものを使わなければ動きません

sudo gem update twitter –remote

windowsの場合はsudoはいりません。


—–(ここから下の機能は、設定しなくても今まで通り動くので面倒ならやらなくて良い)—–


■ruby twitter gemの認証方法の変更への対応
コンストラクタに渡す引数が変わってた → twitter gemのHTTPAuth – 橋本詳解


■タイムラインに含まれる名詞の出現回数をチェックしてその単語から文章を作る
Buzzwords.rbに実装した。
timelineをMeCabで名詞だけ抽出して、出現回数をチェックして適当に名詞を選びそこから左右にマルコフ連鎖を伸ばす。
以前実装したbuzztterのRSSから発言を作る機能を拡張したので一瞬で完成した。

config.yamlのbuzzratioという項目で頻度が設定できます。sample.config.yamlを参考にしてください。

# twitter user/pass to post
usernum : “3631571” # see your Feed of twitter
user : “username”
pass : “password”

## post with buzztter ratio
buzzratio : 0.3 # 30%

## search words for refav
#searchwords : [“ahokai”, “あほか”]

## block NG words
#blockngwords : “true”

## for debug
#nopost : “true”

0.0にすれば動作しなくなり、1.0にすると確実に空気を読みます。
なお、バズワードの取得元は自分のtimelineだけではなく、buzztterからもランダムに取得します。


■post前に発言を検閲し、NGワードが含まれていたら発言を再度作り直す
bot元にしたらbotが確実に犯罪予告しそうな人がいたので、安全な言葉を出すまで発言を再構築させて犯罪防止をする機能を追加。
ngwordsに正規表現を書いておく。

.*殺.*
.*死.*
.*糞.*
.*うんこ.*
.*爆破.*
.*爆発.*

安全な言葉を出すまで10回再提出させて、無理ならあきらめる仕様なのであまり多くすると何もしゃべれなくなる。

config.yamlで

## block NG words
#blockngwords : “true”


## block NG words
blockngwords : “true”

とコメントアウトを外せば検閲機能が有効になります。

検閲はpost3gram.rbの中で実装してます

0

ahokai rev.54以降でのDBファイル名変更、buzztter検索post

(ついに本気を出して絶賛修論執筆中だけど)ahokaiiの設計を少し修正した

これまでsqlite3のデータベースファイルを db_ngrams, db_postsという2つのファイルにしていたけど
db というファイル1つにまとめました。

理由は、特に2つに分ける意味は無かったからです。

commit 54以降のバージョンにアップデートするには、
db_postsの方にクロールした元twitterアカウントのデータが入っているので、それは消さずにdbにリネームして、n-gramのテーブルを追加すると良いですよ

mv db_posts db
rm db_ngrams
ruby migrate_ngrams.rb up
ruby make3gram.rb

忘れずにmake3gramし直す。


あと、ついでにBuzztterから検索してpostを構築する機能が付けてみた。
面白くなるかはわからないけど。


マルコフ連鎖でのpost構築は、今まで頭側から行っていたけど左右両方向へ伸ばすようにしたので
これで検索機能が付けられた

ruby post3gram.rb リナカフェ

「リナカフェ」を含むpostが作られる

make post with ‘リナカフェ’
リナ カフェ が 1
—search left 3-grams—
=” リナ カフェ 1
m =” リナ 1
‘ m =” 1
e ‘ m 1
– e ‘ 1
(h)ruby – e 1
—search right 3-grams—
カフェ が オススメ 1
が オススメ ! 1(t)
ruby-e’m=”リナカフェがオススメ!


Read more

1

スーパーボット大戦

Twitter / ahokaiという、自分の過去の発言を収集し、n-gramモデルとマルコフ連鎖を用いて分析・発言するプログラムを作りました。いわゆるボットという奴です。
方法については「圧縮新聞」を作った – phaのニート日記が詳しいです。


こちらからahokaiの全ソースコードをダウンロードできます。
shokai / bot-ahokai / overview — bitbucket.org
詳しい作り方やいきさつはbot ahokaiの作成 – 橋本詳解に書いたのですが、
今回はahokaiの様な「自分の発言を再構成して喋るbot」を設置する方法を書きます。
botがたくさん喋ってくれればクリスマスも寂しくないし、師走で忙しくても平気です。みんなで実在の人物を元にしたボットを設置して裏twitterを作り、最終戦争終結後もボット同士が喋り合いスーパーボット大戦しましょう。


主な機能は

  • あるユーザの過去の発言を3000件程度取得する
  • 発言データを再構成する
  • 再構成して発言する
  • followerにランダムに話しかける
  • followしてきたユーザをfollowし返す
  • 言及してきた発言をtwitter searchで検索し、favotiteし返す
です。

Read more