2008/06/12

MeCab+pythonという組み合わせ


photo by s1m0ne "Ocean tender love cocktail"


最近は日本語を解析してなんかできないかなぁと思っているので、形態素解析用のソフトウェアMeCabをインストールして、いろいろ遊んでいる状態です。インストールはそんなに難しくないと思いますが、とりあえず載せておきたいと思います。

まずはMeCabとその辞書、ライブラリ一式のインストール。ソースからビルドしてインストールするのでもいいですが、今回は手軽にapt-getを使用。
$ sudo apt-get install mecab mecab-ipadic mecab-utils libmecab1 libmecab-dev
で簡単にインストールできました。
ですがこのままでは辞書の文字コードがeuc-jpであるため、utf-8が標準のubuntuでは少し使いづらい。調べてみたら、IPA辞書をeuc-jpからutf-8に変えるコマンド
$ sudo /usr/lib/mecab/mecab-dict-index -d /usr/share/mecab/dic/ipadic
-o /var/lib/mecab/dic/ipadic -f euc-jp -t utf-8 -p
がありました(From ubulog)ので、それを実行。ためしにコマンドラインから


$ mecab
隣の客はよく柿食う客だ
隣 名詞,一般,*,*,*,*,隣,トナリ,トナリ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
客 名詞,一般,*,*,*,*,客,キャク,キャク
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
よく 副詞,一般,*,*,*,*,よく,ヨク,ヨク
柿 名詞,一般,*,*,*,*,柿,カキ,カキ
食う 動詞,自立,*,*,五段・ワ行促音便,基本形,食う,クウ,クウ
客 名詞,一般,*,*,*,*,客,キャク,キャク
だ 助動詞,*,*,*,特殊・ダ,基本形,だ,ダ,ダ
EOS


無事に文字化けせずに形態素解析が行われているようです。面白い!

次にpython上からmecabを動かしたいので、mecab-pythonバインディングをインストールします。
sourceforge.jpからmecab-python moduleをダウンロードして、メインディレクトリ上から
$ python setup.py build
$ sudo python setup.py install
でインストール。ためしにpython上から、
$ python
>>> import MeCab
>>> m = MeCab.Tagger("-Ochasen")
>>> print m.parse("羊をめぐる冒険")
羊 ヒツジ 羊 名詞-一般
を ヲ を 助詞-格助詞-一般
めぐる メグル めぐる 動詞-自立 五段・ラ行 基本形
冒険 ボウケン 冒険 名詞-サ変接続
EOS

無事に出力されていることがわかります。

あとは文章のキーワードを抽出するようなプログラムを自分で書くだけ…と思っていたのですが、なんともう実際にモジュールとして提供しているサイトを発見。しかもApache License v2.0なのでとても使いやすい。マジっすか!ということでこれも試用してみます。

まずはhttp://tanashi.s240.xrea.com/mword/にアクセス。mword.pyとして保存。ただしこれは辞書がeuc-jpであることを前提としているので、エンコーディングをutf-8にした上で、"coding: euc_jp"から"coding: utf-8"に変更します。そしてsample.pyを手本にしながら、試しにあるニュース記事のキーワード抽出を行ってみると、

キーワードを抽出させる元の文章:
「4月半ばからレンジ相場が続いてきたドル/円<JPY=>が10日、テクニカル上の上値抵抗線だった106円半ばを上抜け、3カ月ぶり高値を更新した。バーナンキ米連邦準備理事会(FRB)議長の発言などをきっかけに、市場では米当局が信用リスク問題をにらんだ金融緩和から、インフレとドル安警戒に軸足を移したとの見方が強まっている。ドルは短期的に2月高値の108円台への上昇を見込む声も上がっている。....」

$ python test.py | head -n 10
ドル 63.639610
市場 17.320508
通貨 16.000000
インフレ 14.000000
上昇 13.856406
姿勢 12.000000
発言 10.392305
米当局 10.182920
豪ドル 9.797959
ドル安 8.239069

と、どうやらドル通貨に関する記事であるということがわかります。きちんとキーワード抽出を行えているようです。

しかし、殆どソースコードを書かずに日本語解析まで出来てしまうと、逆に心配になってきます。
『車輪の再発明は極力行わない』というのがプログラミングでの大原則ですが、ここまで簡略化されてしまうとなんか申し訳ないですね。開発者に感謝。

3 件のコメント:

匿名 さんのコメント...

今学期、Yahoo! JAPANの提供してる講座を受講してます。
単位の埋め合わせだけど。マーケティングの人とか、
オークションの担当の人とか、知恵袋の開発した人とか、
いろんな人が週替わりで来て講師を務めてくれます。
先週は形態素解析の人でした。

http://developer.yahoo.co.jp/jlp/

ここの部長みたいな人なんだって。面白かったよ。

rezoolab さんのコメント...

形態素解析は検索エンジンの核となる技術だから、yahoo!とかは相当力入れてるでしょうねぇ。

実際『日本語形態素解析Webサービス』を使用してみたんだけど、やっぱ精度がけっこう高い。どういうアルゴリズムなんだか分からないですけど、よく作ったなぁという感じです。

というか早稲田すごいなぁ。こっちの大学ももっと有名な方呼んできてほしい(笑)

kohei さんのコメント...

なんか女の人だったの。
上智の文学部国文科日本語専攻卒。
で、ことえりだったかATOKだったかで働いてて、
5年くらい前にYAHOOに引っこ抜かれたんだって。

ほらみなさん、スタバ、スターバックス、
スターバックスジャパンっていうけど、
どれでひいても出てくるでしょ(といって
実際に検索かけてみる)?簡単に言ってしまえば
これも私たちのやってることのひとつでしてね…

と語り始めてたあたりは面白かったんだけど、
助詞とか単語だとかよくわからない数式とか
出てきたあたりでよくわかんなくなって寝ちゃった。

けど聞いてた部分は面白かったよ。