December 20, 2003
文章要約プログラムを書いてみよう!
その3 〜Chasen〜
その2では、単語の重要度を教えてくれる「TF-IDF」というとっても素敵なアルゴリズムを紹介した。「なるほど、これを使えば文章を要約するプログラムなんて簡単に書けるぜ!」って、思った? だけど、TF-IDFを使うには、日本語の文章を単語に分割する必要がある。日本語は英語のように分かち書きされてないので、単語に分割するだけの処理をするのも容易じゃない。文法的な知識と辞書を用意して、膨大な規則をコーディングして行かなくてはならない……というわけで、この部分を自力で実装するのは現実的でない。与えられた文を構成要素に分割する処理のことを、「形態素解析」という。すばらしいことに、これをやってくれるいかしたツールがいくつか公開されている。今回書いたプログラムでは、『Chasen(茶筌)』という形態素解析ツールを使っている。
試しにやってみよう。次のような文をChasenに喰わせる。
| NTT基礎研究所を経て, 2000年より電気通信大学電気通信学部情報工学科教授(大学院情報工学専攻 教授兼任). |
すると、たとえば次のようなアウトプットを得られる。
N 記号-アルファベット
T 記号-アルファベット
T 記号-アルファベット
基礎 名詞-一般
研究所 名詞-一般
を 助詞-格助詞-一般
経 動詞-自立
て 助詞-接続助詞
, 未知語
2 名詞-数
0 名詞-数
0 名詞-数
0 名詞-数
年 名詞-接尾-助数詞
より 助詞-格助詞-一般
電気通信大学 名詞-固有名詞-組織
電気 名詞-一般
通信 名詞-サ変接続
学部 名詞-一般
情報 名詞-一般
工学科 名詞-一般
教授 名詞-一般
( 未知語
大学院 名詞-一般
情報 名詞-一般
工学 名詞-一般
専攻 名詞-サ変接続
記号-空白
教授 名詞-一般
兼任 名詞-サ変接続
) 未知語
. 未知語
EOS |
便利至極。この例だと、単語(形態素)とその分類とが、タブで区切って出力される。"EOS"ってのはEnd Of Sentenceの略で、文の終わりをあらわす。所望するならもっと詳細な情報を得ることもできる。
では、どうやってChasenをプログラムに組み込んだらよいのか。いくつかの方法がある。
・Chasenの実行ファイルを呼びだす
Chasenの実行ファイルをプログラム内から直接叩く。パイプを使うか、ファイルを経由するかして、input&outputを行う。僕が作ったプログラムではこの方法を使っている。
実装はもっとも容易だが、処理速度は劣るし、Windowsで書くとコマンドプロンプトのウィンドウがぽんぽん出てきて非常に鬱陶しい。実装としては、ライブラリをリンクするほうが望ましい。vectorにある古いバージョンのChasenのアーカイブには、旧VB(Visual Basic6)で作成されたサンプルコードが添付されている。旧VBのコードが読めるなら、これを参考にすると手っ取り早く使い方を習得できるとおもう。
・ライブラリ(Windowsなら.dll、Linuxなら.so & .a)をリンクする
手間を惜しまないならおすすめ。ライブラリの使い方はマニュアルに記載されている。
・Chasen.pmを使う。ただしperlのみ
マニュアルに記載がある。perlで書こうという人は使えるかも。
Chasenのマニュアルはインストールされたディレクトリの./docにある。一通りのことは書いてあるので、困ったらマニュアルを見よう。
Trackback
You can ping this entry by using http://windy.ac/MT/mt-tb.cgi/300 .
Comments
great site!
Big thanks!
