<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>橋本商会 &#187; ahokai</title>
	<atom:link href="http://shokai.org/blog/archives/tag/ahokai/feed" rel="self" type="application/rss+xml" />
	<link>http://shokai.org/blog</link>
	<description>なんか作ったりした記録を忘れないうちに書くblog</description>
	<lastBuildDate>Mon, 06 Feb 2012 13:32:44 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com/" />
			<item>
		<title>ahokaiに適当にtimelineの空気を読んで発言する機能、NGワード機能を追加、gemのアップデートに対応など</title>
		<link>http://shokai.org/blog/archives/4460</link>
		<comments>http://shokai.org/blog/archives/4460#comments</comments>
		<pubDate>Sat, 18 Apr 2009 19:16:22 +0000</pubDate>
		<dc:creator>shokai</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[ahokai]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://shokai.org/blog/?p=4460</guid>
		<description><![CDATA[ahokaiという、俺の発言を収集・再構築して喋るtwitter botに ruby twitter gem0.6あたりから認証方法が変わったので、現最新版(0.6.6)に対応 タイムラインに含まれる名詞の出現回数をチェ [...]]]></description>
			<content:encoded><![CDATA[<p>
<a href="http://twitter.com/ahokai">ahokai</a>という、俺の発言を収集・再構築して喋るtwitter botに<br />
<ul>
<li><a href="http://twitter.rubyforge.org/">ruby twitter gem</a>0.6あたりから認証方法が変わったので、現最新版(0.6.6)に対応</li>
<li>タイムラインに含まれる名詞の出現回数をチェックしてその単語から文章を作る</li>
<li>post前に発言を検閲し、NGワードが含まれていたら発言を再度作り直す</li>
</ul>
という機能追加を行った。<br />
あとは、replyとNGユーザ機能を気の向いた時に付ける予定。<br />
<br />
<br />
ahokaiについては<a href="http://shokai.org/blog/archives/4036">橋本商会  スーパーボット大戦</a>および<a href="http://www.ymrl.net/?%CE%A2Twitter">ymrl.net &#8211; 裏Twitter</a>へ。<br />
勝手にbot化しても許してくれそうな人の発言を収集し、賛同者？の方々と共にすこしずつbotが増やしています。ありがとうございます。<br />
<br />
<br />
■既にahokaiを動かしていて、バージョンアップしたい場合<br />
<a href="http://bitbucket.org/shokai/bot-ahokai/">http://bitbucket.org/shokai/bot-ahokai/</a> からhg pullしてhg upするか、*.rbファイルを最新版のソースコードに置き換えてください。<br />
DBやconfig.yaml等は書き換えなくても動作します。<br />
ruby twitter gemはアップデートして最新のものを使わなければ動きません<br />
</p>
<blockquote><p>sudo gem update twitter &#8211;remote</p></blockquote>
<p>
windowsの場合はsudoはいりません。<br />
<br />
<br />
&#8212;&#8211;（ここから下の機能は、設定しなくても今まで通り動くので面倒ならやらなくて良い）&#8212;&#8211;<br />
<br />
<br />
■ruby twitter gemの認証方法の変更への対応<br />
コンストラクタに渡す引数が変わってた → <a href="http://d.hatena.ne.jp/shokai/20090418/1240057250">twitter gemのHTTPAuth &#8211; 橋本詳解</a><br />
<br />
<br />
■タイムラインに含まれる名詞の出現回数をチェックしてその単語から文章を作る<br />
<a href="http://bitbucket.org/shokai/bot-ahokai/src/bbdc0d939786/Buzzwords.rb">Buzzwords.rb</a>に実装した。<br />
timelineをMeCabで名詞だけ抽出して、出現回数をチェックして適当に名詞を選びそこから左右にマルコフ連鎖を伸ばす。<br />
以前実装した<a href="http://buzztter.com/ja">buzztter</a>のRSSから発言を作る機能を拡張したので一瞬で完成した。<br />
<br />
config.yamlのbuzzratioという項目で頻度が設定できます。<a href="http://bitbucket.org/shokai/bot-ahokai/src/bbdc0d939786/sample.config.yaml">sample.config.yaml</a>を参考にしてください。<br />
</p>
<blockquote><p># twitter user/pass to post<br />
usernum : &#8220;3631571&#8243; # see your Feed of twitter<br />
user : &#8220;username&#8221;<br />
pass : &#8220;password&#8221;<br />
<br />
## post with buzztter ratio<br />
buzzratio : 0.3 # 30%<br />
<br />
## search words for refav<br />
#searchwords : ["ahokai", "あほか"]<br />
<br />
## block NG words<br />
#blockngwords : &#8220;true&#8221;<br />
<br />
## for debug<br />
#nopost : &#8220;true&#8221;</p></blockquote>
<p>
0.0にすれば動作しなくなり、1.0にすると確実に空気を読みます。<br />
なお、バズワードの取得元は自分のtimelineだけではなく、buzztterからもランダムに取得します。<br />
<br />
<br />
■post前に発言を検閲し、NGワードが含まれていたら発言を再度作り直す<br />
bot元にしたらbotが確実に犯罪予告しそうな人がいたので、安全な言葉を出すまで発言を再構築させて犯罪防止をする機能を追加。<br />
<a href="http://bitbucket.org/shokai/bot-ahokai/src/bbdc0d939786/ngwords">ngwords</a>に正規表現を書いておく。<br />
</p>
<blockquote><p>.*殺.*<br />
.*死.*<br />
.*糞.*<br />
.*うんこ.*<br />
.*爆破.*<br />
.*爆発.*</p></blockquote>
<p>
安全な言葉を出すまで10回再提出させて、無理ならあきらめる仕様なのであまり多くすると何もしゃべれなくなる。<br />
<br />
config.yamlで<br />
</p>
<blockquote><p>
## block NG words<br />
#blockngwords : &#8220;true&#8221;<br />
</p></blockquote>
<p>
を<br />
</p>
<blockquote><p>
## block NG words<br />
blockngwords : &#8220;true&#8221;<br />
</p></blockquote>
<p>
とコメントアウトを外せば検閲機能が有効になります。<br />
<br />
検閲は<a href="http://bitbucket.org/shokai/bot-ahokai/src/bbdc0d939786/post3gram.rb">post3gram.rb</a>の中で実装してます<br />
</p>
]]></content:encoded>
			<wfw:commentRss>http://shokai.org/blog/archives/4460/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ahokai rev.54以降でのDBファイル名変更、buzztter検索post</title>
		<link>http://shokai.org/blog/archives/4081</link>
		<comments>http://shokai.org/blog/archives/4081#comments</comments>
		<pubDate>Wed, 07 Jan 2009 07:34:09 +0000</pubDate>
		<dc:creator>shokai</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[ahokai]]></category>
		<category><![CDATA[n-gram]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[マルコフ連鎖]]></category>

		<guid isPermaLink="false">http://shokai.org/blog/?p=4081</guid>
		<description><![CDATA[（ついに本気を出して絶賛修論執筆中だけど）ahokaiiの設計を少し修正した これまでsqlite3のデータベースファイルを db_ngrams, db_postsという2つのファイルにしていたけど db というファイル [...]]]></description>
			<content:encoded><![CDATA[<p>
（ついに本気を出して絶賛修論執筆中だけど）<a href="http://shokai.org/blog/archives/4036">ahokai</a>iの設計を少し修正した<br />
<br />
これまでsqlite3のデータベースファイルを db_ngrams, db_postsという2つのファイルにしていたけど<br />
db というファイル1つにまとめました。<br />
<br />
理由は、特に2つに分ける意味は無かったからです。<br />
<br />
<a href="http://www.bitbucket.org/shokai/bot-ahokai/changeset/b4122dd31781/">commit 54</a>以降のバージョンにアップデートするには、<br />
db_postsの方にクロールした元twitterアカウントのデータが入っているので、それは消さずにdbにリネームして、n-gramのテーブルを追加すると良いですよ<br />
</p>
<blockquote><p>
mv db_posts db<br />
rm db_ngrams<br />
ruby migrate_ngrams.rb up<br />
ruby make3gram.rb<br />
</p></blockquote>
<p>
忘れずにmake3gramし直す。<br />
<br />
<br />
あと、ついでに<a href="http://buzztter.com/ja">Buzztter</a>から検索してpostを構築する機能が付けてみた。<br />
面白くなるかはわからないけど。<br />
<br />
<br />
マルコフ連鎖でのpost構築は、今まで頭側から行っていたけど左右両方向へ伸ばすようにしたので<br />
これで検索機能が付けられた<br />
</p>
<blockquote><p>ruby post3gram.rb リナカフェ</p></blockquote>
<p>
「リナカフェ」を含むpostが作られる<br />
</p>
<blockquote><p>
make post with &#8216;リナカフェ&#8217;<br />
リナ カフェ が 1<br />
&#8212;search left 3-grams&#8212;<br />
=&#8221; リナ カフェ 1<br />
m =&#8221; リナ 1<br />
&#8216; m =&#8221; 1<br />
e &#8216; m 1<br />
- e &#8216; 1<br />
(h)ruby &#8211; e 1<br />
&#8212;search right 3-grams&#8212;<br />
カフェ が オススメ 1<br />
が オススメ ！ 1(t)<br />
ruby-e&#8217;m=&#8221;リナカフェがオススメ！<br />
</p></blockquote>
<p>
<br />
<span id="more-4081"></span><br />
<br />
一定確率で<a href="http://www.bitbucket.org/shokai/bot-ahokai/src/12b642540a65/Buzzwords.rb">buzztterのRSSを取って</a>きて、<a href="http://www.bitbucket.org/shokai/bot-ahokai/changeset/d7095eafb3f6/">名詞を抽出して</a>、検索機能にかける。<br />
<br />
確率の指定方法はsample.config.yamlに書いてあります<br />
必要無い人は、0を指定してください。<br />
何も設定しないとデフォルト3割ぐらいでばずるけど、この値は変わるかもしれない<br />
<br />
<br />
ばずっているところ</p>
<blockquote><p>search buzztter&#8230;<br />
fetch http://buzztter.com/ja/rss<br />
make post with &#8216;最近&#8217;<br />
を 最近 作っ 1<br />
&#8212;search left 3-grams&#8212;<br />
もの を 最近 1<br />
な もの を 1<br />
みたい な もの 1<br />
github みたい な 1<br />
の github みたい 1<br />
版 の github 1<br />
ケータイ 版 の 1<br />
(h)wassr ケータイ 版 1<br />
&#8212;search right 3-grams&#8212;<br />
最近 作っ て 1<br />
作っ て パラレル 1<br />
て パラレル twitter 1<br />
パラレル twitter ワールド 1<br />
twitter ワールド に 1<br />
ワールド に する 1(t)<br />
に する 方法 1<br />
wassrケータイ版のgithubみたいなものを最近作ってパラレルtwitterワールドにする方法<br />
</p></blockquote>
<p>
<br />
<br />
<br />
<br />
</p>
]]></content:encoded>
			<wfw:commentRss>http://shokai.org/blog/archives/4081/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>スーパーボット大戦</title>
		<link>http://shokai.org/blog/archives/4036</link>
		<comments>http://shokai.org/blog/archives/4036#comments</comments>
		<pubDate>Wed, 24 Dec 2008 16:37:09 +0000</pubDate>
		<dc:creator>shokai</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[ahokai]]></category>
		<category><![CDATA[n-gram]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[マルコフ連鎖]]></category>

		<guid isPermaLink="false">http://shokai.org/blog/?p=4036</guid>
		<description><![CDATA[Twitter / ahokaiという、自分の過去の発言を収集し、n-gramモデルとマルコフ連鎖を用いて分析・発言するプログラムを作りました。いわゆるボットという奴です。 方法については「圧縮新聞」を作った &#821 [...]]]></description>
			<content:encoded><![CDATA[<p>
<a href="http://twitter.com/ahokai">Twitter / ahokai</a>という、自分の過去の発言を収集し、n-gramモデルとマルコフ連鎖を用いて分析・発言するプログラムを作りました。いわゆるボットという奴です。<br />
方法については<a href="http://d.hatena.ne.jp/pha/20071124/1195904502">「圧縮新聞」を作った &#8211; phaのニート日記</a>が詳しいです。<br />
<br />
<br />
こちらからahokaiの全ソースコードをダウンロードできます。<br />
<a href="http://www.bitbucket.org/shokai/bot-ahokai/">shokai / bot-ahokai / overview — bitbucket.org</a><br />
詳しい作り方やいきさつは<a href="http://d.hatena.ne.jp/shokai/20081221/1229879343">bot ahokaiの作成 &#8211; 橋本詳解</a>に書いたのですが、<br />
今回はahokaiの様な「自分の発言を再構成して喋るbot」を設置する方法を書きます。<br />
botがたくさん喋ってくれればクリスマスも寂しくないし、師走で忙しくても平気です。みんなで実在の人物を元にしたボットを設置して裏twitterを作り、最終戦争終結後もボット同士が喋り合いスーパーボット大戦しましょう。<br />
<br />
<br />
主な機能は<br />
<ul>
	<li>あるユーザの過去の発言を3000件程度取得する</li>
	<li>発言データを再構成する</li>
	<li>再構成して発言する</li>
	<li>followerにランダムに話しかける</li>
	<li>followしてきたユーザをfollowし返す</li>
	<li>言及してきた発言をtwitter searchで検索し、favotiteし返す</li>
</ul>
です。<br />
<br />
<span id="more-4036"></span><br />
<br />
■必要なモジュール・ライブラリ<br />
だいたい、Ruby on RailsとSQLite3、MeCabが使える環境ならすんなり動くと思います。<br />
rubygemsで<br />
<ul>
<li>twitter</li>
<li>activerecord</li>
<li>feed-normalizer</li>
<li>hpricot</li>
<li>xml-simple</li>
<li>simple-rss</li>
<li>sqlite3-ruby</li>
<li>mecab</li>
</ul>
をインストールする必要があります。この辺は、試しにRuby on Railsをインストールしてみればわかるはず。<br />
<br />
MeCab（形態素解析…日本語の単語を品詞毎に分解するのにも使えるツール）のインストールがそれなりに苦労します。<br />
MeCab本体とutf8で書かれた辞書、Rubyから使うためのMeCab Rubyバインディングの3つが必要です<br />
<br />
Macの場合、<a href="http://www.macports.org/">macports</a>を使うのが良い。<br />
<ul>
<li><a href="http://d.hatena.ne.jp/shokai/20080317/1205736293">形態素解析エンジンMeCabをインストールしなおし（utf8で） &#8211; 橋本詳解</a></li>
<li><a href="http://d.hatena.ne.jp/shokai/20080317/1205736627">MeCabのRubyバインディングをインストール &#8211; 橋本詳解</a></li>
</ul>
<br />
Ubuntuへのインストールは簡単です<br />
<ul>
<li><a href="http://d.hatena.ne.jp/shokai/20080317/1205737682">MeCabをUbuntuにインストール &#8211; 橋本詳解</a></li>
<li><a href="http://d.hatena.ne.jp/shokai/20080317/1205737845">MeCab辞書の切り替え &#8211; 橋本詳解</a></li>
<li><a href="http://d.hatena.ne.jp/shokai/20080317/1205739440">MeCab Rubyバインディングをインストール &#8211; 橋本詳解</a></li></ul>
<br />
Windowsや、さくらインターネットなどのレンタルサーバでも動かせるはずです。<br />
<br />
<br />
<br />
さていよいよ設置です。<br />
<br />
<br />
<br />
■設置の流れ<br />
ソースコードダウンロードして、DBの設定をし（Rails風に一発でできます）<br />
クローラを走らせで自分の発言を収集、分析します。<br />
それから単語を再構成して発言させます。<br />
<br />
<br />
■ダウンロード<br />
こちらからahokaiをダウンロードできます。<br />
<a href="http://www.bitbucket.org/shokai/bot-ahokai/">shokai / bot-ahokai / overview — bitbucket.org</a><br />
右上のリンクからzipでダウンロードして解凍するか、mercurialで<br />
</p>
<blockquote><p>hg clone http://bitbucket.org/shokai/bot-ahokai/ mybot</p></blockquote>
<p>
して、自分のマシンに置いてください。<br />
<br />
<br />
■アカウント設定<br />
まず、俺の場合&#8221;ahokai&#8221;というtwitterアカウントに喋らせたかったので、メールアドレスをもう1つ用意して取りました。<br />
sample.config.yamlを編集し、config.yamlに名前を変えて保存します。<br />
<br />
アカウントshokaiから収集し、ahokaiに発言を投げる場合はこうなります<br />
</p>
<blockquote><p>usernum : &#8220;3631571&#8243; # データ収集のためのユーザ番号<br />
user : &#8220;ahokai&#8221;<br />
pass : &#8220;twitter-password&#8221;</p></blockquote>
<p>
usernumは、取得したい各twitterアカウントの左下から、RSSのURLを見ると番号がわかります<br />
<a href="http://www.flickr.com/photos/shokai/3133570180/" title="twitter number by shokai, on Flickr"><img src="http://farm4.static.flickr.com/3283/3133570180_817833c3d4.jpg" width="316" height="140" alt="twitter number" /></a><br />
（3631571はshokaiの番号です、各自変えてください）<br />
<br />
<br />
■データベースの設定<br />
同じディレクトリにSQLite3のDBを作ります。<br />
ダウンロードしたディレクトリに移動して<br />
コマンドラインで<br />
</p>
<blockquote><p>ruby migrate_posts.rb up<br />
ruby migrate_ngrams.rb up</p></blockquote>
<p>
すると、dbというファイルが生成されます。この中に回収した自分の発言などが入ります<br />
<br />
<br />
■発言データのクロール<br />
1ページ目から160ページ目までクロールします。<br />
</p>
<blockquote><p>ruby store.rb 1-160</p></blockquote>
<p>
現在のtwitterのAPIは過去の160ページまでしかデータが取得できないので、それ以上は無駄です<br />
twitterに負荷をかけないようにアクセス間隔を開けているのでかなり時間がかかります。<br />
<br />
<br />
今後は引数無しで実行すると、デフォルトで10ページ取得します。<br />
</p>
<blockquote><p>ruby store.rb</p></blockquote>
<p>
数日に1回行えば十分です<br />
<br />
<br />
※注意：あまり激しく実行すると、1~2時間twitterからアクセス拒否されます<br />
<br />
<br />
■n-gramモデルの作成<br />
3-gramモデルを作成します。発言件数によってはかなり時間がかかります。<br />
</p>
<blockquote><p>ruby make3gram.rb</p></blockquote>
<p>
モデル作成中でも、発言はできます。せっかちな人はmake3gramを走らせておきながら、次に進んで良いです<br />
<br />
<br />
<br />
■発言する<br />
3-gramモデルからマルコフ連鎖して発言します<br />
</p>
<blockquote><p>ruby post3gram.rb</p></blockquote>
<p>
5%の確率で、followerの誰かに@reply発言します。<br />
<br />
<br />
■自動follow返し、自動favorite返し<br />
この処理はそれほど重くないので、1時間に1回ぐらい走らせておくと便利です。<br />
</p>
<blockquote><p>ruby refollow.rb</p></blockquote>
<p>
現在のfollowers/friends一覧を取得し、新しいfollowerが居たらfollow仕返します<br />
<br />
<a href="http://search.twitter.com/">Twitter Search</a>でbot宛の発言を検索し、favoriteを付けます<br />
</p>
<blockquote><p>ruby refav.rb</p></blockquote>
<p>
<br />
<br />
■常時使い続ける<br />
store.rbとmake3gram.rbは3日に1回ぐらい動かせば十分です。初回のみ160ページ分解析するので時間がかかりますが、2回目以降は差分のみ計算するのですぐ終わります。<br />
<br />
refav.rbとrefollow.rbは好きな間隔で。1時間に1回でも十分だと思います。<br />
<br />
<br />
post3gram.rbは、あまり動かしすぎると本人より目立ってしまい、いつの間にか人間と入れ替わってしまうので気をつけて下さい。<br />
<br />
気になるあのアルファギークのbotを自分のサーバで飼う事も、ひとつの歪んだ愛の形かもしれません。<br />
<br />
<br />
ちなみに俺は、crontabで定期的に収集・分析・発言などを実行するように設定しています<br />
</p>
<blockquote><p>*/17 * * * * /usr/bin/ruby /home/sho/src/ruby/ahokai/post3gram.rb > /dev/null 2>&#038;1<br />
*/5 * * * * /usr/bin/ruby /home/sho/src/ruby/ahokai/refollow.rb > /dev/null 2>&#038;1<br />
*/19 * * * * /usr/bin/ruby /home/sho/src/ruby/ahokai/refav.rb 10 > /dev/null 2>&#038;1<br />
30 */4 * * * /usr/bin/ruby /home/sho/src/ruby/ahokai/store.rb 10; /usr/bin/ruby /home/sho/src/ruby/ahokai/make3gram.rb</p></blockquote>
<p>
<br />
<br />
</p>
]]></content:encoded>
			<wfw:commentRss>http://shokai.org/blog/archives/4036/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

