python-cjuman: A Python (SWIG) bindings of JUMAN, A Japanese Morphological Analyzer

python-cjuman とは

python-cjuman は 京都大学大学院 黒橋研究室で開発・公開されている日本語形態素解析システム JUMAN を Python のモジュールとして利用するためのバインディングです。サーバーモードで起動したJUMANと通信する場合にくらべて、15%から20%ほど高速です。バインディングをコンパイルするためには、SWIG のバイナリと JUMAN のソースコードが必要です。Python-2.4 以上と JUMAN-5.1 以上で動作します。

新着情報

ダウンロード

最新版:cJuman.i

または以下からバージョンを選択してください。

python-cjuman をコンパイルするために は SWIGJUMAN が必要です。JUMAN はソースコードが必要 です。SWIG はコンパイル済みの物があればソースコードは必要ありませ ん。一般的に SWIG は Linux のディストリビューションに含まれている ことが多いようです。

使用例

次のファイルを実行してください。この例ではファイルのエンコードを euc-jp にしています。他のエンコーディングで書く場合は、cJuman.parse_opt() に文字列を渡す前に euc-jp に変換しなければいけません。

#!/bin/env python
# -*- coding: euc-jp -*-
import cJuman

S = [
     '私の名前は中野です。',
     '',
     'これはJUMAN Pythonテストです。',
]

cJuman.init(['-B', '-e2'])
print cJuman.parse_opt(S, cJuman.SKIP_NO_RESULT)

結果は次のようになります。エンコーディングは euc-jp です。

私 わたし 私 名詞 6 普通名詞 1 * 0 * 0 "代表表記:私/わたし 漢字読み:訓 カテゴリ:人"
の の の 助詞 9 接続助詞 3 * 0 * 0 NIL
名前 なまえ 名前 名詞 6 普通名詞 1 * 0 * 0 "代表表記:名前/なまえ カテゴリ:抽象物"
は は は 助詞 9 副助詞 2 * 0 * 0 NIL
中野 なかの 中野 名詞 6 人名 5 * 0 * 0 "人名:日本:姓:41:0.00311"
@ 中野 なかの 中野 名詞 6 地名 4 * 0 * 0 "代表表記:中野/なかの 地名:日本:東京都:区"
@ 中野 なかの 中野 名詞 6 地名 4 * 0 * 0 "代表表記:中野/なかの 地名:日本:長野県:市"
です です だ 判定詞 4 * 0 判定詞 25 デス列基本形 28 NIL
。 。 。 特殊 1 句点 1 * 0 * 0 NIL
EOS
EOS
これ これ これ 指示詞 7 名詞形態指示詞 1 * 0 * 0 NIL
は は は 助詞 9 副助詞 2 * 0 * 0 NIL
JUMAN JUMAN JUMAN 未定義語 15 その他 1 * 0 * 0 NIL
\  \  \  特殊 1 空白 6 * 0 * 0 NIL
Python Python Python 未定義語 15 その他 1 * 0 * 0 NIL
テスト てすと テスト 名詞 6 サ変名詞 2 * 0 * 0 "代表表記:テスト/てすと カテゴリ:抽象物 ドメイン:教育・学習"
です です だ 判定詞 4 * 0 判定詞 25 デス列基本形 28 NIL
。 。 。 特殊 1 句点 1 * 0 * 0 NIL
EOS

インストール

最初に JUMAN をコンパイルしてインストールした後、残されたオブジェクトファイルと SWIG で生成されたラッパーをリンクします。以下は CentOS 5.4 64bit 環境で、システム標準の Python2.4 を利用する場合の例です。

# インストールされていなければ swig パッケージをインストール
sudo yum install swig

# cJuman とJUMAN 本体をダウンロード
wget 'http://app-dist.khlog.net/software/python-cjuman/cJuman.i'
wget 'http://www-lab25.kuee.kyoto-u.ac.jp/DLcounter/lime.cgi?down=http://nlp.kuee.kyoto-u.ac.jp/nl-resource/juman/juman-6.0.tar.gz&name=juman-6.0.tar.gz'

# JUMAN をコンパイルしてインストール
tar xzf juman-6.0.tar.gz
cd juman-6.0
CFLAGS=-fPIC ./configure
make
sudo make install

# JUMAN のオブジェクトファイルと swig のインターフェースを結合して Python 用のバインディングを作成
cd lib
cp ../../cJuman.i .
swig -python cJuman.i
gcc -c cJuman_wrap.c -fPIC -I/usr/include/python2.4
gcc -shared *.o -o _cJuman.so
sudo install -m 644  _cJuman.so cJuman.py /usr/lib/python2.4/site-packages/
    

もし自分でコンパイルしてインストールした Python で python-cjuman を使いたければ、そのバージョンの Python 用にコンパイルした swig をインストールする必要があります。たとえば Python2.6 が /usr/local/bin/python2.6 としてインストールされてる場合は次のようになります。

# swig をダウンロード
wget 'http://prdownloads.sourceforge.net/swig/swig-2.0.0.tar.gz'
wget 'http://app-dist.khlog.net/software/python-cjuman/cJuman.i'
wget 'http://www-lab25.kuee.kyoto-u.ac.jp/DLcounter/lime.cgi?down=http://nlp.kuee.kyoto-u.ac.jp/nl-resource/juman/juman-6.0.tar.gz&name=juman-6.0.tar.gz'

# swig のインストール
# パスは別に切っておく
tar xzf swig-2.0.0.tar.gz
cd swig-2.0.0
./configure --prefix=/usr/local/swig-py26/ --with-python=/usr/local/bin/python2.6
make
sudo make install 
cd ..

# あとは上の例と同じ、ただし指定する Python のバージョンは SWIG コンパイル時のものと合わせておく
tar xzf juman-6.0.tar.gz
cd juman-6.0
CFLAGS=-fPIC ./configure
make
sudo make install

cd lib
cp ../../cJuman.i ./
/usr/local/swig-py26/bin/swig -python cJuman.i
gcc -c cJuman_wrap.c -fPIC -I/usr/local/include/python2.6
gcc -shared *.o -o _cJuman.so
sudo install -m 644  _cJuman.so cJuman.py /usr/local/lib/python2.6/site-packages/
    

謝辞

すばらしいソフトウェアを公開されている京都大学大学院 黒橋研究室 の方々に心から感謝いたします。cJumanは JUMAN 本体があってこそのもの であり、SWIG 定義ファイルの一部として JUMAN 本体のコードの一部 を流用させていただいています。

また、このバインディングを作成するきっかけとなったのは yazu 氏 の 83's : JumanのRubyバインディング という記事でし た。有用な情報の公開に感謝いたします。

連絡先

twitter: kharakawa
e-mail: