はじめに
自分のMacにCabochaを導入したのだが、一箇所トラップがあってハマったので、自分用メモ
事前準備
MacにJupyter Notebookとbrewコマンドは導入済みであることが前提です。
Jupyter Notebookはanacondaから入れてしまうのが簡単です。
- brewコマンド
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Mecabの導入
最初のステップはMecabの導入です。以下の2つのbrewコマンドを実行します。
Mecab導入
$ brew install mecab
$ brew install mecab-ipadic
Mecabテスト
導入が正常終了したら、簡単なテストを実施します。
コンソールで、mecab
を実行し、入力プロンプトが出たらこれは日本語の文章です。
を入力して下さい。
うまくいくと、下記のような結果になるはずです。
$ mecab
これは日本語の文章です。
これ 名詞,代名詞,一般,*,*,*,これ,コレ,コレ
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
日本語 名詞,一般,*,*,*,*,日本語,ニホンゴ,ニホンゴ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
文章 名詞,一般,*,*,*,*,文章,ブンショウ,ブンショー
です 助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
。 記号,句点,*,*,*,*,。,。,。
EOS
結果を確認したらctrl+c
でコマンド入力状態に戻します。
mecab-python3の導入
最後のステップは、導入されたmecabをpythonのAPIとして利用できるようにすることです。
この目的のため、pipコマンドを利用してmecab-python3を導入します。
$ pip install mecab-python3
mecab-python3のテスト
mecab-python3の導入が正常終了したら、次のnotebookを実行して結果を確認します。
# MecabをPythonから呼び出す
import MeCab
# 解析対象文
text = 'これは日本語の文章です。'
# 利用パターン1 対象文書を分かち書きにする
tagger1 = MeCab.Tagger("-Owakati")
print('【利用パターン1】分かち書き')
print(tagger1.parse(text).split())
print()
# 利用パターン2 単語毎に分析結果を全部表示する
tagger2 = MeCab.Tagger()
print('【利用パターン2】品詞解析')
print(tagger2.parse(text))
次の結果が返ってきたら、OKです。
【利用パターン1】分かち書き
['これ', 'は', '日本語', 'の', '文章', 'です', '。']
【利用パターン2】品詞解析
これ 名詞,代名詞,一般,*,*,*,これ,コレ,コレ
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
日本語 名詞,一般,*,*,*,*,日本語,ニホンゴ,ニホンゴ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
文章 名詞,一般,*,*,*,*,文章,ブンショウ,ブンショー
です 助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
。 記号,句点,*,*,*,*,。,。,。
EOS
Cabochaの導入
次のステップがCabochaの導入です。
Command Line Toolsのバージョン確認(重要)
次のコマンドで、CLT
の行を見てCommand Line Toolsのバージョンを確認します。
$ brew --config
結果例
HOMEBREW_VERSION: 2.1.3
ORIGIN: https://github.com/Homebrew/brew
HEAD: 099b047349d4ec67519206f15401d0e1cf90e953
Last commit: 7 days ago
Core tap ORIGIN: https://github.com/Homebrew/homebrew-core
Core tap HEAD: fd1ef471a25cb83041e710018f9ad9686fc50d97
Core tap last commit: 30 hours ago
HOMEBREW_PREFIX: /usr/local
CPU: quad-core 64-bit broadwell
Homebrew Ruby: 2.3.7 => /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/bin/ruby
Clang: 10.0 build 1001
Git: 2.21.0 => /usr/local/bin/git
Curl: 7.54.0 => /usr/bin/curl
Java: 12.0.1
macOS: 10.14.5-x86_64
CLT: 9.4.0.0.1.1526532315
Xcode: 10.2.1
これから行うビルド作業では、CLTのバージョンが9.4である必要があります。
もし、CLTのバージョンはこれより大きなものの場合、Appleダウンロードサイトから、Command Line Tools 9.4をダウンロード・導入するようにして下さい。
必要モジュールの導入
次に、下記のコマンドで、必要なモジュールを導入しておきます。
$ brew install git curl xz
$ brew install crf++
Cabochaの導入
いよいよCabochaの導入です。次のコマンドで導入します。
$ brew install cabocha
Cabochaのテスト
上記の導入が一通り終わったら、いったんコマンドラインでテストをします。
$ cabocha
コマンドが実行され、入力プロンプトが出たら今日はいい天気ですね
と入力してenterキーを押してください。
下記の結果が出れば正常に動いているので、ctrl + c
で抜けます。
今日はいい天気ですね
今日は---D
いい-D
天気ですね
EOS
Python用ラッパーの導入
次に、CabochaをPythonから呼び出せるようにします。 少し長いのですが、以下の手順で導入してください。
# 作業用ディレクトリは適当に決めて下さい
WORK_DIR=(作業用ディレクトリ)
cd $WORK_DIR
curl -OL https://github.com/taku910/cabocha/archive/master.zip
unzip master.zip
pip install cabocha-master/python/
git clone https://github.com/kenkov/cabocha
pip install cabocha/
(備考)CLTのバージョンが古いと最後のpipコマンドでビルドに失敗します。
Python用ラッパーのテスト
次のコマンドでテストしてみて下さい。
# Cabochaの利用 (Tokenの取得)
from cabocha.analyzer import CaboChaAnalyzer
analyzer = CaboChaAnalyzer()
tree = analyzer.parse('今日はいい天気ですね')
for chunk in tree:
for token in chunk:
print(token
# Cabochaの利用 (チャンクを先頭からたどる)
chunks = tree.chunks
start_chunk = chunks[0]
print('開始チャンク: ', start_chunk)
next_chunk = start_chunk.next_link
print('次のチャンク: ', next_chunk)
次のような結果が返ってくれば成功です。
Token("今日")
Token("は")
Token("いい")
Token("天気")
Token("です")
Token("ね")
開始チャンク: Chunk("今日は")
次のチャンク: Chunk("天気ですね")