キーワード抽出メモ

名詞と動詞を切り出すのにはchasenを使っている。最初は外部コマンドで呼び出していたが、実行時間がかかるのでPythonのモジュールを作って組み込んだ。モジュールを作るといってもSWIGを使えば簡単で、

// swig -I/usr/include -python chasen.i
// gcc -c chasen_wrap.c -I/usr/include/python2.4 -I.
// g++ -shared chasen_wrap.o -lchasen -o _chasen.so
%module chasen
%{
#include "chasen.h"
%}

%rename(getopt)  chasen_getopt_argv;
%rename(parse)   chasen_sparse_tostr;

%ignore chasen_fparse;
%ignore chasen_fparse_tostr;
%ignore chasen_sparse;

%include "chasen.h"

こんなもんだ。それから、普通にchasenをインストールした状態では英単語や数値を切り出せない。/usr/etc/chasenrcか~/.chasenrcに追加する。

(連結品詞 ((記号 アルファベット)))
(連結品詞 ((名詞 数)))

あとは「単語」→「単語の含まれる文書数」の連想配列を作って一応pickle化して保存しておく。そんなにパワフルなマシンじゃなくて、だいたい1万文書につき40秒くらいかかってしまうので、毎回計算するわけにはいかない。あとは文書ごとに同じようにchasenで名詞と動詞を切り出して、それぞれの単語につき「単語が文書に出現する数*math.log(全文書数/単語の出現する文書数)」をスコアにして、トップ10を計算。一応キャッシュとして保存しておいて、ページのほうではキャッシュデータを元に表示。

全文書に関わる情報を毎回更新せずにやると、division by zeroが発生する。一応この場合はスコア0ということで表現している(本当は間違いで、かなり高いスコアがつくはず)。

たぶん、ちゃんとやればほぼ全部を動的にできると思うんだけどね。全文書に関わる情報をDBに保存しておいて、ページを更新するたびにその情報を更新しておく。あとは表示するときにその文書に関わる情報を見てTF-IDF法で計算したスコアを元にキーワードを求めればいい。そこまでがんばる義理まではないだろう。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です