チャット用「今北産業」 - tf/idf による単語抽出@IRC

 これまでの会話を要約し、入ってきた人に「今北産業」として提供する IRC マクロを実験中。
 friend 系列の IRC サーバでは、一度に三行より多くの行を送ろうとすると遅延が掛かるので三行で要約出来ると都合が良い。


 Webサービス上の類似の技術:

★ tf-idf による単語抽出@IRC

 td-idf の解説は以下が参考になる。

 チャットの場合は、「キーワード抽出対象テキスト」をどう決めるか、すなわちどのぐらいのログまでを遡って要約するかによって動きが異なって来る。どうすれば良いかは…用途と対象ログの性質次第かな?


 で、TF,N,DF はこんな感じにすれば良いのだろうか。

  1. 遡ったログの代表キーワード候補出現数 (TF)
  2. 全ログの行数 (N)
  3. 代表キーワード候補が含まれるログの行数 (DF)

 本来ならば「ログの行数」では無く「ドキュメントの数」となるのだが、idf=(log(N/DF)) の意味 (一般語フィルタ) がそこまで損なわれないような気がするので多分大丈夫…だと思う。自分の環境では IRC のログを自動で SQL サーバに積むプログラムを稼動させており、N や DF の値を求めるのが楽なのでログは SQL サーバに積むことをおすすめ*1
 TF を求める際は形態素解析が必要。マクロとして TF を求めるならば外部コマンドで mecabchasen を呼び出せば良いだろう。自分は PHP で組んでいるので php_mecab を使っている。


 とりあえず代表キーワードの抽出は出来たが、これをどう要約に使うか…

*1:正確には「形態素解析後」のデータを検索するべきであるような気がするが、手間がかかるしまぁいいだろう