2011年11月27日日曜日

ギップルbot開発メモ 1.Yahoo! APIによるクサさ判定機能

ギップルbotのクサさ判定機能の実現のため、Yahoo! APIを久しぶりに利用してみた。

クサイ文章(名言?)とは、以下の条件を満たすものだと勝手に決めた。

条件1.文章中に名詞、助詞・助動詞などがバランスよく出現する

条件2.検索エンジンで対象文章を全文検索しても、ヒット数がそれなりにある


名言は、だいたい「○○は~~である」の形式であると仮定すると、文章中には必ず名詞と、助詞か助動詞が1つずつなければならない。気がする。

というわけで1.について。
まず文章としての体裁を整えていないものは弾くようにしたい。
ここでYahoo! APIの形態素解析を利用した。
まず文章から名詞の合計数(S)、助詞と助動詞の合計数(P)を求める。
そしてS×Pが0の場合、SかPのどちらかが抜けてると判断して、問答無用で0点とする。

また文章の長さ(解析結果から得られる形態素の合計数L)と、Pの数が多ければ多いほど、文章として複雑であると判断し、得点が伸びるようにしたい。

次に2.ついて。
条件1だけでは、得点にばらつきを持たせることが難しく、(精度はともかく)ギップルbotにバラエティに飛んだクサがり方をさせにくい。なので原始的な方法として、文章を全文検索した結果の件数(H)が多いほど、得点が伸びるようにしたい。

以上から、以下の計算式を勝手に決めた。

得点 = √H + √(L × P)

ギップルbotはこの計算式に従ってクサさ判定をすると決めた。

2011年11月20日日曜日

ギップルbot

こちらは「魔法陣グルグル」のキャラクター「ギップル」を模した
非公式自動Twitter bot「ギップルbot」の解説ページです。
(原作とは一切関係がありません)
アカウントページ → ギップルbot (@gipple_bot)

プログラムによって自動でツイートします。
頻度は8時間に3回程度です。(2011/11/28現在)
また呼びかけ(文頭に@gipple_botを付けたツイート)に対しても反応します。
ツイート内容、反応パターン共に色々と増やしていく予定です。

どうぞ末永くよろしくおねがいいたします。


php5/cornによって自動でtweetさせています。
また、Yahoo APIの検索・形態素解析を利用した「クサさ判定機能」を備えています。


----------------------------------- 主な機能 -----------------------------------


【クサさ判定機能】
ギップルbot宛に"「」"を含む文章をツイートすると、「」内の文章に対してクサさ判定を行います。

例)
"@gipple_bot 「ただし魔法は尻から出る」" というツイートをすると・・・


こんな形で返信が返ってきます。
「」内の文章から、
1.Yahoo!Japan(検索エンジンはGoogleですが)で全文検索し、ヒットした件数
2.Yahoo形態素解析により、もっともらしい文章となっているか(名詞のみだと×、など)
などによって得点を算出し、点数に応じた反応をします。
注1)返信はリプライではなく、通常形式のツイート(ハッシュタグ#kusasa付き)となります。
注2)あくまでギップルbotが感じたクサさです。思い通りの結果にならないこともありますがご了承ください。

【呼びかけて遊ぶ】
文頭に@gipple_botをつけてツイートすると反応します。
こちらは上記のクサさ判定とは異なり、通常のリプライ形式で反応します。
また特定のパターンのツイートには、特別な反応をします。
どんな反応が返ってくるのか、ぜひ色々と遊んでみてください!

・呼びかけ
「おーい」「ギップルー」「ギップルちゃーん」など、宙に向かって呼びかける感じで

・あいさつ
「おはよう」「おはよ」「おは~」
「こんちは」「こんちわ」「こんにちは」「こんにちわ」「おっす」
「こんばんは」
「おやすみ」などなど

・魔人よばわり
「魔人」「妖怪」「お化け」「モンスター」など

・ふんどしの話題
今のところ、上の魔人系が含まれていない、「ふんどし」が含まれる文章に対して

・どこにいた(る)の?
「どこに行ってた」「どこにいた」「今どこ?」など

・ウニョール語
「トッピロキー」「ウニョラー」「ウニュ者様」など

・ここは何のお店ですか?
「何の(お)店」「何屋さん」など

・○○出して!
「出して」「ちょうだい」など

・テント張って!
「テント張って」「テントを用意して」など

・その他、ギップルに関係の深い単語など


【自動フォロー返し】
ギップルbotをフォローすると、お礼のコメントとともに自動的にフォローし返します。
(すでにこちらからフォローさせていただいていた方からのフォローに対するお礼はただいま実装中です)


【時間帯によるツイート内容の変更】
朝には朝用の、夜には夜用のつぶやきを用意しています。
また、深夜はギップルbotも寝ているので、発言は控えめです。



2011年10月23日日曜日

[記事メモ] 「すべらない話」の作り方・話し方の5つのコツ

こちらの記事がおもしろかったので。

「すべらない話」の作り方・話し方の5つのコツ
http://www.earthinus.com/2011/07/suberanai-talk.html

記事の内容自体はもちろん面白いけど、これを探り当てるに至った調査力がすばらしいと思います。

2011年10月13日木曜日

「なおざり(等閑)」と「おなざり(御座なり)」の違い

なおざり(等閑):
 ないがしろ、と似た意味。やるべき事をちゃんとやらない、という感じ。

おざなり(御座なり):
 応急処置、と似た意味。やるべき事はちゃんとやる、ただし間に合わせの方法で、という感じ。

2011年10月10日月曜日

[C++] staticメンバ変数・関数とconstメンバ変数・関数

C++を勉強し始めて一週間。
個人的に覚えにくい、イメージしにくい事柄をメモっとく。

- staticメンバ変数
 - staticがついたメンバ変数は、プログラムの実行から終了まで静的領域に確保される
 - インスタンス化された複数のオブジェクトから参照できる


 - cppファイル内で一度だけ初期化される(ファイルスコープ扱いなので)
 - 初期化は、
  - int Hoge::max = ... という感じでクラスの外に書く
  - クラス定義ではできない
  - コンストラクタで初期化してはいけない 
   - オブジェクトが生成されるたびに、staticメンバ変数の初期化が実行されるから

- staticメンバ関数
 - staticメンバ変数にアクセスするための関数
 - thisポインタを持たない
 - オブジェクトを介さなくても使える。 int result = Hoge::get_max()


- constメンバ変数
 - 全てのインスタンスに対して共通にconst : static const int max = ...
 - なのでクラス内で初期化してよい

 - 扱う定数の値をオブジェクトごとに変更したい場合はコンストラクタで初期化する
   - その際は初期化の順序に気をつける
    - オブジェクト生成時に値の無いconstメンバ変数ができてはいけない
    - なので初期化リストを用い、先に初期化をしてからオブジェクト生成
     - Hoge() : max(3) { ... // max(3)は初期化、max = 3は代入

- constメンバ関数
  - その関数を実行しても、メンバ変数の値が変わらないことを保証している関数
  - メンバ変数を変更することはできないし、非constメンバ関数を呼ぶこともできない


実際の所、staticやconstはどの程度利用されるもんなんだろう?

2011年10月6日木曜日

[eclipse 3.7] Ubuntu 11.04にeclipse 3.7

本家から持ってこないとCVSかなんかが使えなかった記憶がある(と前にも書いた)ので、本家から持ってくる。今回はもう少し詳細にメモ。

1. 本家からパッケージをダウンロード。今回はEclipse IDE for C/C++ Developers。

2. ダウンロードしたら「右クリック」→「ここに展開」

3. できたフォルダをhomeの直下にでも置く。

4. コマンドラインでeclipseと打てば起動するように環境変数を設定する。

 $ chmod 666 .bashrc
 $ emacs .bashrc
 一番下に"export PATH=$PATH:~/eclipse"を追加。保存してemacsを閉じる
 $ chmod 644 .bashrc

5. コマンドラインを再起動すればeclipseコマンドが使えるように

(2011/10/06 追記)
C/C++エディタの注釈(ポップアップ?ウィンドウが黒くて見にくいので、直し方→ここ

2011年10月5日水曜日

[Ubuntu 11.04]Windows7 (VMWare3.14) 上でubuntu 11.04

ubuntu 11.04をVMWare 3.14を使った仮想マシンとしてWindows 7上にインストールしてみた。
日本語/英語の切り替え設定まで。

1. http://www.ubuntulinux.jp/products/JA-Localized/downloadから日本語版ubuntu isoイメージファイルをダウンロード

2. VMWareを起動、新しいマシンの作成、特にメインで使うつもりはないので、HDのサイズを20GBに

3. インストール

4. キーボードから日本語入力が出来なかったので、「システム管理」→「言語サポート」を開く

5. 「言語サポートが完全にインストールされていない」そうなので言語パックを取得し、さらにが空欄になってたので「ibus」を選択

6. 再起動するもいまだに日本語/英語切り替えができない

7. 結局、「設定」→「キーボード・インプットメソッド」の「インプットメソッド」タブで「インプットメソッドの選択」→「日本語」→「Anthy」を選択し追加すればOK

これで無事インストール完了。
ちなみに5.でインストールされるのはlibreoffice-help-ja。