perlでTreeTaggerを使う

英語の文章からキーワードを抽出したくなったので
形態素解析ツールを探していた所、TreeTaggerというツールを見つけました。
英語の他にもフランス語、ドイツ語など色々などにも対応しているようです。

英語以外は解りませんので、英語をインストールしました。

インストールはここから、以下のファイル群を適当なディレクトリにダウンロードしてinstall-tagger.shを走らせます。ファイルの解凍含めて全て処理してくれます。

  • tree-tagger-linux-3.2.tar.gz (本体)
  • tagger-scripts.tar.gz (実行スクリプト)
  • install-tagger.sh (インストーラ)
  • english-par-linux-3.1.bin.gz (English parameter file)
  • english-chunker-par-linux-3.1.bin.gz (English chunker parameter file)

インストーラを走らせた場所にbin, cmdが出来るのでその下にある実行ファイル群の
シンボリックリンクをパスが通っているところに張ります。

簡単な使い方以下のような感じです。標準入力かファイルから解析する文章を流します。

$ cat test.txt
When I was younger so much younger than today, I never needed anybody's help in anyway
$ tree-tagger-english < test.txt
        reading parameters ...
        tagging ...
When    WRB     when
I       PP      I
was     VBD     be
younger JJR     young
so      IN      so
much    RB      much
younger JJR     young
than    IN      than
today   NN      today
,       ,       ,
I       PP      I
never   RB      never
needed  VBD     need
anybody NN      anybody
's      POS     's
help    NN      help
in      IN      in
anyway  RB      anyway
         finished.

2番目のカラムに出力されているコードが品詞を表しています。
正常に解析できてそうですね。あと3番目に単語の原形が出力されているのも、
結構嬉しい機能ですね。

品詞については以下に一覧を書きますが、詳しくはこのページを見て下さい。適当に訳したので間違えてたら教えて下さい。

CC  Coordinating conjunction                    等位接続詞
CD  Cardinal number                             基数
DT  Determiner                                  限定詞
EX  Existential there                           ?
FW  Foreign word                                外国語
IN  Preposition or subordinating conjunction    前置詞または従属接続詞
JJ  Adjective                                   形容詞
JJR Adjective, comparative                      比較形容詞
JJS Adjective, superlative                      最上級形容詞
LS  List item marker                            リスト項目のマーカー
MD  Modal                                       法
NN Noun, singular or mass                       単数または不可算
NNS Noun, plural                                名詞、複数形
NP  Proper noun, singular                       固有名詞、単数
NPS Proper noun, plural                         固有名詞、複数
PDT Predeterminer                               前決定詞
POS Possessive ending                           所有格の終わり
PP  Personal pronoun                            人称代名詞
PP$ Possessive pronoun                          所有代名詞
RB  Adverb                                      副詞
RBR Adverb, comparative                         副詞、比較
RBS Adverb, superlative                         副詞、最上級
RP  Particle                                    不変化詞
SYM Symbol                                      シンボル
TO  to                                          〜へ
UH  Interjection                                間投詞
VB  Verb, base form                             動詞、原形
VBD Verb, past tense                            動詞の過去時制
VBG Verb, gerund or present particle            動詞、動名詞または現在不変化詞
VBN Verb, past particle                         動詞、過去の不変化詞
VBP Verb, non-3rd person singular present       動詞、非三人称単数現在
VBZ Verb, 3rd person singular present           動詞、三人称単数現在
WDT Wh-determiner                               Wh -限定詞
WP  Wh-pronoun                                  Wh -代名詞
WP$ Possessive wh-pronoun                       所有関係代名詞
WRB Wh-adverb                                   Wh -副詞

形態素解析にかけた結果を使って処理を行いたいのでスクリプトから使えないかと
探してみたところcpanにありました。さすがcpan。Alvis::Treetaggerというパッケージです。早速インストールして使ってみました。使い方は簡単で、reopenでTreeTaggerをforkしてからtagを呼ぶだけです。

#!/usr/bin/perl

use strict;
use warnings;

use Alvis::Treetagger;

# TreeTaggerをインストールしたディレクトリを設定
$Alvis::Treetagger::taggerRoot   = '/usr/local/tree_tagger';
# よけいな出力はしない
$Alvis::Treetagger::commandLine .= " -quiet";

my $text = "When I was younger so much younger than today, I never needed anybody's help in anyway";
Alvis::Treetagger::reopen;
print &Alvis::Treetagger::tag($text);
Alvis::Treetagger::shut;

これで英語の形態素解析ができるようになりました。ライブラリのおかげで簡単で使い勝手のよい武器だと思います。あとヨーロッパの言語には結構対応してるので、おいおい試してみようと思います。

参考リンク
http://tanaken.myhome.cx/~ktanaka/diary/?20080616


追記 (2009/5/3)

Alvis::Treetaggerを使ったサンプルで、最後にshutを呼び出さないと処理中に使用した
名前付きパイプがtmpディレクトリに残ってしまいます。本文中修正済みです。

Leave a Reply

Your email address will not be published. Required fields are marked *