動機
チームラボのコンテスト「第2回 チームラボアルゴリズムコンテスト」に応募をするために作りました。
コンテストの存在を締め切り1週間前に知ったので、僅か2日での突貫工事です。
クイズの仕組み
botが1分に1回、cronで定期的にtwitterの状態を確認します。
クイズを始めたい時
twitter宛に「クイズやりたい」「クイズやろうZE」的なメッセージを送ってください。
例1:「@just_do_quiz ドッギャーン!!JOJO、俺はクイズをやるぞー」
例2:「@just_do_quiz 安西先生、、クイズがやりたいです・・・」
twitterがこれらのメッセージを検知できたら、クイズモードになります。
クイズの答え方
準備が整うと、以下のような4択問題が出題されます。
[quiz] 毎年春の風物詩として子どもたちに愛され続ける『映画ドラえもん』シリーズの最新作映画『映画ドラえもん新・[ ]』で、声優に初挑戦したアヤカ・ウィルソンに話を聞いた
[quiz]次の選択肢から括弧内に入る単語を選んでね:1:ガルタイト / 2:のび太の宇宙開拓史 / 3:西牧秀夫 / 4:大地丙太郎
[quiz]制限時間は3分です。
解答する際は、twitter宛に正解と思われる選択肢の数字を送ってください。
例1:「@just_do_quiz 2」
例2:「@just_do_quiz 2で」
例3:「@just_do_quiz 2しかないわ!(バクザン)」
制限時間が過ぎると、答を発表します。
正解した人にはおめでとうのメッセージを送ります。
クイズには、同時に複数の人が参加可能です。
ただtwitter APIの制限上、1分間に20人以上の人が解答を書き込んだ場合は、一部の解答を取りこぼしてしまいます。それ以外の理由で取りこぼした場合は、バグです。
それ以外の時
botが暇なときは、稀に独り言をつぶやく事があります。
が、ほとんど意味のある事は話しません。
ちょwwまじで人いねーんですけど。。
高山カツヒコってどうなの
これからかなりくると思うよ。アイス芋Pは。
少しだけ技術的な話
クイズの問題は、各種ニュースサイトのRSSをクローリングして、自動的に生成しています。
クローリングした記事内容から固有名詞表現を抽出し、抽出した語と、その語の関連語を選択肢とする4択問題を作成する、という流れです。
関連語については、「たつをのChangeLog:Wikipediaのキーワードリンクを使って関連語データを作ってみた」で公開されているcgiをお借りしています。(ゆくゆくは自作のものにするかも知れません。)
クイズ開始のコマンドは、入力文の係り受け構造を解析して「クイズ」→「やる」という係り受け構造がある場合にクイズを開始するようにしています。なので、多少複雑な文章でも、クイズが始まると思います。
ただし否定表現などの考慮はいまのところはしていないので「クイズなどやりたくない」というメッセージが送られても、クイズが開始してしまいます。こちらは余裕があれば対応したいです。
クイズの解答は、文の先頭に数字と分かるような語が含まれていれば判別できると思います。
「1」「1かな?」「1で!」みたいなものであれば対応できます。いまのところ英数字と漢数字、「いち」「イチ」のような表現のみ対応しています。
言語はJava、形態素解析はsen(MeCabのJavaポーティング)、データ保存はHBaseを使用しています。固有表現辞書と係り受け解析器は自前のものです。