MecabをMacにインストールしてPython3から利用する

image

Mecabとは

日本語でかかれた文書を解析したいときに 単語ごとに文書を分割できると良いですよね。 その文書を単語ごとに分割することをもうすこし かしこまった言い方をすると形態素解析といいます。 形態素解析は、単語に分割する以外にも品詞分類なども行います。 Mecabは、形態素解析を行うソフトウェアでさまざまな言語から利用可能です。 今回は、PythonからMecabから利用する方法を紹介します。

Mecabをインストール

Macの場合、Mecabのインストールはbrewで行えます。 Windowsと比べて、とてもインストールが簡単です。

brew install mecab
brew install mecab-ipadic

Mecabがインストールされたかの確認

シェルで次のコマンドを実行します。

mecab

続けて、適当に文章を入力しEnterを押しましょう。

Mecabの動作確認です。
Mecab   名詞,固有名詞,組織,*,*,*,*
の   助詞,連体化,*,*,*,*,の,ノ,ノ
動作  名詞,サ変接続,*,*,*,*,動作,ドウサ,ドーサ
確認  名詞,サ変接続,*,*,*,*,確認,カクニン,カクニン
です  助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
。   記号,句点,*,*,*,*,。,。,。
EOS

これが表示されたら、インストールは成功です。 Ctrl-cで終了しましょう。

MecabをPythonから利用できるようにする

MecabをPythonから利用できるようにするために mecab-python3をインストールします。 これは、pipでインストールできるのでお手軽です。

pip install mecab-python3

mecab-python3の動作確認

下記のコードを実行して、動作確認をしてみましょう。

import MeCab
tagger = MeCab.Tagger()
text = 'Mecabをインストールして、テストをしてみます。'
node = tagger.parseToNode(text)
while node:
    # 単語
    word = node.surface
    # 単語の特徴(品詞、読み仮名など)
    feature = node.feature

    print("%s,%s"%(word,feature))
    node = node.next

正しくインストールされている場合、実行結果は下記のようになります。

,BOS/EOS,*,*,*,*,*,*,*,*
Mecab,名詞,一般,*,*,*,*,*
を,助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
インストール,名詞,一般,*,*,*,*,インストール,インストール,インストール
し,動詞,自立,*,*,サ変・スル,連用形,する,シ,シ
て,助詞,接続助詞,*,*,*,*,て,テ,テ
、,記号,読点,*,*,*,*,、,、,、
テスト,名詞,サ変接続,*,*,*,*,テスト,テスト,テスト
を,助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
し,動詞,自立,*,*,サ変・スル,連用形,する,シ,シ
て,助詞,接続助詞,*,*,*,*,て,テ,テ
み,動詞,非自立,*,*,一段,連用形,みる,ミ,ミ
ます,助動詞,*,*,*,特殊・マス,基本形,ます,マス,マス
。,記号,句点,*,*,*,*,。,。,。
,BOS/EOS,*,*,*,*,*,*,*,*

mecab-ipadic-neologdをインストール

言葉は、常に増え続けます。 最近流行りの言葉を解析するためには、最新の辞書が必要です。 最新の言葉が載った辞書データで mecab-ipadic-neologdという辞書があります。 https://github.com/neologd/mecab-ipadic-neologd/blob/master/README.ja.md これをインストールします。 インストールには、git,curl,xzが必要です。 もし入っていない場合は、brewでインストールしましょう。

brew install git curl xz

ソースをクローンします。

git clone https://github.com/neologd/mecab-ipadic-neologd.git

次のコマンドで辞書を取得してインストールします。

cd mecab-ipadic-neologd
./bin/install-mecab-ipadic-neologd -n

インストール先のパスは次のように確認できます。

echo `mecab-config --dicdir`"/mecab-ipadic-neologd"

基本的には、下記のパスになっていると思います。

/usr/local/lib/mecab/dic/mecab-ipadic-neologd

解析する

サンプルコード

import MeCab
tagger = MeCab.Tagger('-d /usr/local/lib/mecab/dic/mecab-ipadic-neologd')  # 辞書を指定
text = "野性爆弾の芸風は独特で面白い"
tagger.parse('')  # Unicode Decode Errorへの対処
node = tagger.parseToNode(text)
while node:
    # 単語を取得
    word = node.surface
    # 品詞を取得
    feature = node.feature
    print("%s,%s" % (word, feature))
    # 次の単語に進める
    node = node.next

実行結果

,BOS/EOS,*,*,*,*,*,*,*,*
野性爆弾,名詞,固有名詞,人名,一般,*,*,野性爆弾,ヤセイバクダン,ヤセイバクダン
の,助詞,連体化,*,*,*,*,の,ノ,ノ
芸風,名詞,一般,*,*,*,*,芸風,ゲイフウ,ゲイフー
は,助詞,係助詞,*,*,*,*,は,ハ,ワ
独特,名詞,形容動詞語幹,*,*,*,*,独特,ドクトク,ドクトク
で,助動詞,*,*,*,特殊・ダ,連用形,だ,デ,デ
面白い,形容詞,自立,*,*,形容詞・アウオ段,基本形,面白い,オモシロイ,オモシロイ
,BOS/EOS,*,*,*,*,*,*,*,*

野性爆弾が「野生」と「爆弾」に別れたないのがポイントです。

Unicode Decode Errorへの対処

mecab-python3のバグでUnicodeDecodeErrorが発生するバグがあります。 これへの対応方法として、日本語を解析する前に適当な文字列を解析させる方法があります。 なので、次のコードを挿入しています。

tagger.parse('')

コメント

タイトルとURLをコピーしました