RSS2.0

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 なんかもあるそうです。
移植してくださった方々に感謝ですね。

  MeCabpython  コメント (0) 2013/04/11 07:42:15


公開範囲:
プロフィール HN: ももかん
ゲーム作ったり雑談書いたり・・・していた時期が私にもありました。
カレンダー
<<2024, 11>>
272829303112
3456789
10111213141516
17181920212223
24252627282930