igo-python を使ってみた
前回 MeCab をちょろっと触ってみましたが、バイナリをビルドして、となるとコンソールが使えないレンタルサーバーでは使いづらいのが実情です。形態素解析器で C 言語じゃないものは他に何があるんだろうと探してみたところ、Igo という、Java の形態素解析器が見つかりました。Igo はソースコードこそ異なるものの、解析結果は MeCab 互換となることを目指して作られたもので、辞書ファイルのフォーマットも MeCab のものに合わせているそうです。(ただ、未知語の扱いについては MeCab との差異があるようなので、公式ページを確認してください。)
今回は、この Igo を更に Python に移植したという igo-python を使ってみました。形態素解析を組み込もうかと思っている chocolablog が Python 製なのが理由です。
igo-python をインストールする
まずは公式ページから igo-python を落としてきて展開します。公式ページ
https://pypi.python.org/pypi/igo-python/
現時点での最新バージョンは igo-python-0.9.2.tar.gz でした。
辞書を用意する
辞書の作成には、MeCab のサイトで配布している辞書を落とし、igo を使って igo 用の辞書にビルドする必要があります。igo 自体に辞書のビルド機能が組み込まれているので、igo の公式ページ から最新版の igo-0.4.5.jar を取ってくれば OK です。
次に、以下のコマンドで IPA 辞書を igo 用の辞書に変換します。
$ java -cp igo-0.4.5.jar net.reduls.igo.bin.BuildDic /tmp/igo_ipadic mecab-ipadic-2.7.0-20070801 EUC_JPちなみに net.reduls.igo.bin.BuildDic クラスに渡す引数は、先頭から、
・作成する igo 用辞書の出力先ディレクトリ
・MeCab の IPA 辞書を展開したディレクトリ
・辞書の文字コード
となります。
ここで、辞書の文字コードは、出力される形態素解析結果の文字コードではなく、配布されている辞書ファイル自体の文字コードとなります。上記 MeCab の IPA 辞書を使う場合は EUC_JP を指定しましょう。
ここで指定された文字コードは Java の InputStreamReader にそのまま渡されるため、java.io 及び java.lang パッケージ向けの文字コード名となります。Javadoc に一覧があるので参照してください。
igo-python を実行してみる
展開した igo-python-0.9.2 直下に python のライブラリがあるので、igo-python-0.9.2 内で以下のコードを実行すれば、 igo-python を試すことができます。sample.py
#!/usr/bin/env python # -*- coding: utf-8 -*- import sys from igo.Tagger import Tagger # 辞書のディレクトリ dicDir = '/tmp/igo_ipadic' if __name__ == '__main__': tagger = Tagger(dicDir) for arg in sys.argv[1:]: arg = unicode(arg, 'utf-8') # 形態素解析を行う print 'Text: ' + arg words = tagger.parse(arg) # 分割した単語を表示する for word in words: print word.surface, word.feature, word.start
引数には任意の数の文章をスペース区切りで渡してみてください。
実行結果はこちら
$ python sample.py すもももももももものうち 浦島太郎 Text: すもももももももものうち すもも 名詞,一般,*,*,*,*,すもも,スモモ,スモモ 0 も 助詞,係助詞,*,*,*,*,も,モ,モ 3 もも 名詞,一般,*,*,*,*,もも,モモ,モモ 4 も 助詞,係助詞,*,*,*,*,も,モ,モ 6 もも 名詞,一般,*,*,*,*,もも,モモ,モモ 7 の 助詞,連体化,*,*,*,*,の,ノ,ノ 9 うち 名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ 10 Text: 浦島太郎 浦島 名詞,固有名詞,人名,姓,*,*,浦島,ウラシマ,ウラシマ 0 太郎 名詞,固有名詞,人名,名,*,*,太郎,タロウ,タロー 2
見覚えのある感じで形態素解析結果が表示されました。
Igo も igo-python もそれほど頻繁にアップデートされているわけではないようなのですが、python だけで手軽に形態素解析してみたいということであれば、かなりお手軽でいいんじゃないかなと思います。
Igo の多言語への移植は結構活発らしくて、他にも Ruby に移植した igo-ruby や、PHP に移植した igo-php なんかもあるそうです。
移植してくださった方々に感謝ですね。
MeCab, python コメント (0) 2013/04/11 07:42:15