コメントで遊ぼう
一昨日日記に書いたニコニコ動画のコメント分析ツールを一通り形にしたので公開します.やってる内容は以前の日記(id:tomoemon:20070710)に書いたのと同じで,特定の動画の中に指定したキーワードがどれくらいの割合で含まれているかを調べるだけです.今回それをGUIにしてみたんですが,GUIにするのって大変ですわ.
それから,作ってみたはいいですがほんとに前にやったようなことしか使い方が思い浮かばないので,面白そうな使い方を見つけた人は教えてもらえるとありがたいです.
ダウンロードはこちら
コメアナをダウンロード
※実行するには.net framework v2.0が必要です.
(XP/Vistaで動作確認しました)
ヘルプも何も作ってないので簡単に説明を書きます.ちなみに,メニューとか押しても何も起こらなかったらまだ実装されてないんだなと思ってください.分析結果の保存すらできてません.機能的には単語の出現頻度とか,時間ごとのコメント頻度分布とか追加したいですね.
ログイン
InternetExplorerか,そのエンジンを使っているブラウザでニコニコ動画を利用している方は「ブラウザのUserSessionを用いる」にチェックを入れておくと,メールアドレス,パスワードなどの情報を入れなくても使うことができ,ブラウザ側でログインしなおすこともありません.それ以外のブラウザを使っている方はメールアドレス,パスワードを入れて使ってください.残念ながら,ブラウザでアクセスする場合は再びログインする必要があります.
解析対象の動画を選択
まずは,解析したい動画のIDを「動画のURLまたはID」に入力して(コンマ区切りで複数指定できます)追加を押すか,動画のIDが一行ごとに書かれたファイルを左の枠にドラッグアンドドロップすることで,解析対象を指定することができます.2007/10/15 0:53時点のトップ10とトップ100のリストを同梱したので,とりあえずトップ10を突っ込んでみると動きがわかると思います.
キーワードの指定
横軸と縦軸に異なるキーワードを指定することができます.一つだけ指定した場合は横一直線に並ぶと見づらいので,両方の軸に同じキーワードが指定されていると扱って描画します.キーワードは正規表現を使うことができます.
たとえば横軸に笑い表現を指定したかったら以下のように縦棒で区切って複数のワードを調べることができます.
横軸キーワード:w|w|笑|ふいた|吹いた
計算方法
キーワードのコメントにおける割合の計算方法です.
次の2つのコメントがあるとします.「テラワロスwwww」「すげえww」
キーワード「w」で計算した場合以下のようになります.
- コメント単位
「w」が一つでも入っているコメント数 / コメント数 = 1.0
- ワード単位
「w」のヒット数 / 全コメントの文字数 = 6 / 14 = 0.428
なんですが,今考えてみるとキーワードの文字数が2文字以上だと,キーワードのヒット数が絶対にコメント文字数まで達することがないので意味的におかしいですね.まぁ,あんまり気にせずに.
コメント取得&分析
左下の分析ボタンを押すと,現在の動画リストに入っているすべての動画について「コメントを取得」→「分析」を行います.動画リストの中から指定したものだけ分析したい場合はCtrlキーとかで複数指定して右クリック→分析を押してください.コメントはいったんダウンロードしたら,次からはローカルファイルを用いて分析を行います.また,複数動画のコメントをダウンロードするのに時間がかかりますが,一回ダウンロードするごとに2秒弱のスリープを入れているためです(短時間に5回連続アクセスすると一定時間アク禁されてしまいます).
分析結果
サムネイルの上にカーソルを持っていくと分析結果が表示されます.サムネイル画像の周りの色つき枠は再生数の割合が高いものが赤,コメント数の割合が高いものが青で表示されています.重なって見づらい場合は「前面に移動」とかを使ってください.
C#,VisualStudio,.net frameworkに感謝
インテリセンスのおかげでヘルプを確認する回数がだいぶ減っていると思う.こういう機能があると,自分でもきちんとコメントを書いておこうという気になる.
splitContainerのバグ
GotDotNet Japan:SplitContainer のバグについて
エラーメッセージでsplitterdistanceはpanel1MinSizeとpanel2MinSizeの間にしてくださいと出るのだが,設定値には問題ない.調べてみるとバグだったようだ.しかし,この記事2年前のものなのになぁ.VS2005のVista用のアップデートでは修正されてなかったのだろうか.
//コード化されるときに、プロパティが ABC 順でコード化されています。 //このため、Panel1MinSize や Panel2MinSize が、コンテナのSize よりも先に設定されます。 //Panel1MinSize の設定値チェックで、例外が発生します。 this.splitContainer1.Panel1MinSize = 200; this.splitContainer1.Panel2MinSize = 200; ← ここで例外発生 this.splitContainer1.Size = new System.Drawing.Size(528, 333); this.splitContainer1.SplitterDistance = 220; //200+200=400で、Size の初期値150を超えるため。 //なぜ Panel1MinSize 単独では発生しないのか、謎。 //FDBK21950 を受けて、Panel1MinSize ではチェックしていないのなら、あまりにもお粗末な対応。。。 //↓このように、先に Size を設定すれば、例外は発生しない this.splitContainer1.Size = new System.Drawing.Size(528, 333); this.splitContainer1.Panel1MinSize = 200; this.splitContainer1.Panel2MinSize = 200; this.splitContainer1.SplitterDistance = 220;