Mac 環境で Python の CaboCha を使って係り受け解析を行う方法を紹介します。
- MeCab、CRF++、CaboCha のインストール
- MeCab のインストール
- CRF++ と CaboCha のインストール
- CaboCha を使ってみる(Python 経由ではない)
- CaboCha の Python バインディング
- 新たに仮想環境を作った場合
- Python で CaboCha を使う
- 係り受け関係の出力
- 形態素の出力
- NEologd 辞書で新語対応
- NEologd 辞書のインストール
- NEologd 辞書を使う
1. MeCab、CRF++、CaboCha のインストール
まず MeCab、CRF++ そして CaboCha をインストールするので、Python 仮想環境を起動した状態で下記を実行します。
MeCab のインストール
% brew install mecab % brew install mecab-ipadic % pip install mecab-python3
CRF++ と CaboCha のインストール
% brew install crf++ % brew install cabocha
2. CaboCha を使ってみる(Python 経由ではない)
上記をインストールするとターミナルで直接であれば CaboCha が使える様になります。
コマンド「cabocha」を実行してそのまま「今日は良い天気ですね。」と入力すると下記の様に出力されます。
% cabocha 今日は良い天気ですね。 今日は---D 良い-D 天気ですね。 EOS
ただ、ここまでは Python を立ち上げずに直接 Shellscript で CaboCha を使っただけです。
3. CaboCha の Python バインディング
cabocha-0.69.tar.bz2 のリンクがあるのでここからダウンロードします。
Downloads フォルダに圧縮ファイルがありますね。
% cd Users/ユーザー名/Downloads % ls cabocha-0.69.tar.bz2
ファイルを解凍して、configure、make、make install を行います。
% tar xfv cabocha-0.69.tar.bz2 % cd cabocha-0.69 % ./configure --prefix=/usr/local/cabocha/0_69 --with-charset=UTF8 --with-posset=IPA % make % make install
Python の仮想環境を立ち上げた状態で「cabocha-0.69」直下の「python」フォルダに移動して「sudo python setup.py install」を実行します。
% cd python % sudo python setup.py install
こうすると import CaboCha できる様になります。
ただ、Downloads フォルダから cabocha-0.69 ファイルを削除してもできる意味をまだいまいち理解できていません。仮想環境の site-packages に CaboCha.py は作られたんですけどそれで間に合ってるんですかね。後でログをよくみてみます。。。
追加の仮想環境を作った場合
すでに一度上記の行程を経て CaboCha を使っている場合、新たに追加の仮想環境を作る際にはいくつか行程を飛ばすことができます。
解凍した「cabocha-0.69」がある状態で「cabocha-0.69/python」ディレクトリに入り、新たに作った仮想環境を起動し、下記を実行すれば OK です。
% pip install mecab-python3 % cd cabocha-0.69/python % sudo python setup.py install
4. Python で CaboCha を使う
とりあえず Python を立ち上げて「import CaboCha」もできますし下記の処理も実行できました。
>>> import CaboCha >>> c = CaboCha.Parser() >>> sentence = '今日は良い天気ですね。' >>> print(c.parseToString(sentence)) 今日は---D 良い-D 天気ですね。 EOS
係り受け関係の出力
>>> tree = c.parse(sentence) >>> print(tree.toString(CaboCha.FORMAT_TREE)) 今日は---D 良い-D 天気ですね。 EOS >>> print(tree.toString(CaboCha.FORMAT_LATTICE)) * 0 2D 0/1 -1.140323 今日 名詞,副詞可能,*,*,*,*,今日,キョウ,キョー は 助詞,係助詞,*,*,*,*,は,ハ,ワ * 1 2D 0/0 -1.140323 良い 形容詞,自立,*,*,形容詞・アウオ段,基本形,良い,ヨイ,ヨイ * 2 -1D 0/2 0.000000 天気 名詞,一般,*,*,*,*,天気,テンキ,テンキ です 助動詞,*,*,*,特殊・デス,基本形,です,デス,デス ね 助詞,終助詞,*,*,*,*,ね,ネ,ネ 。 記号,句点,*,*,*,*,。,。,。 EOS
形態素の出力
形態素の文字列
>>> for i in range(tree.size()): ... print(tree.token(i).surface) ... 今日 は 良い 天気 です ね 。 >>>
形態素の情報
>>> for i in range(tree.size()): ... print(tree.token(i).feature) ... 名詞,副詞可能,*,*,*,*,今日,キョウ,キョー 助詞,係助詞,*,*,*,*,は,ハ,ワ 形容詞,自立,*,*,形容詞・アウオ段,基本形,良い,ヨイ,ヨイ 名詞,一般,*,*,*,*,天気,テンキ,テンキ 助動詞,*,*,*,特殊・デス,基本形,です,デス,デス 助詞,終助詞,*,*,*,*,ね,ネ,ネ 記号,句点,*,*,*,*,。,。,。 >>>
5. NEologd 辞書で新語対応
デフォルトでは「IPA 辞書」という辞書が使用されますが、新語に対応するには「NEologd 辞書」が多く使用されている様です。
NEologd 辞書のインストール
通常の辞書「ipadic」が格納されているディレクトリに移動します。おそらく「/usr/local/lib/mecab/dic」もしくはそれに似た場所にあると思います。
% /usr/local/lib/mecab/dic % ls ipadic
git clone で「mecab-ipadic-neologd」を作成します。
% git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git % ls ipadic mecab-ipadic-neologd
「mecab-ipadic-neologd」フォルダに移動し、コマンド「./bin/install-mecab-ipadic-neologd -n -a」を実行します。
% cd mecab-ipadic-neologd % ./bin/install-mecab-ipadic-neologd -n -a
途中「Do you want to install mecab-ipadic-NEologd? Type yes or no.」と聞かれるので「yes」と入力します。
これでインストール完了です。
NEologd 辞書を使う
CaboCha、MeCab を使用する際、デフォルトでは IPA 辞書が使用されるので、明示的に NEologd 辞書を指定する必要があります。
実行時に「-d /usr/local/lib/mecab/dic/mecab-ipadic-neologd」を渡すのですが、下記コードの様に「CaboCha.Parser('-d /usr/local/lib/mecab/dic/mecab-ipadic-neologd')」としてあげれば OK です。
import CaboCha sentence = '霜降り明星(しもふりみょうじょう)は、2018年『M-1グランプリ』14代目王者。' # IPA 辞書 c = CaboCha.Parser() print('IPA 辞書:') print(c.parseToString(sentence)) # NEologd 辞書 c = CaboCha.Parser('-d /usr/local/lib/mecab/dic/mecab-ipadic-neologd') print('NEologd 辞書:') print(c.parseToString(sentence))
上記を実行すると下記のアウトプットが返ってきます。
IPA 辞書: 霜降り明星---D (しも-D ふりみ-D ょうじょう)は、---------D 2018年---D | 『M--D | 1グランプリ』-D | 14代目-D 王者。 EOS NEologd 辞書: 霜降り明星-----D (しも-D | ふり-D みょうじょう)は、-----D 2018年-D | 『M-1グランプリ』-D 14代目王者。 EOS
「しもふりみょうじょう」や「M-1グランプリ」の部分が若干違いますね。
若干応用編として、YouTube のコメント欄を取得して形態素解析をしてみましたので下記に貼っておきます。