MecabをPythonで使うまで


Mecabとは

形態素解析エンジンです。
形態素解析については他の方の記事がすごくわかりやすいので割愛します。
なお、名前の由来は開発者が「和布蕪」好きだからだそうですハイ

mecabに必要なライブラリ

事前に必要なライブラリを入れておきましょう。mecabのサイトより抜粋しております。他に必要なライブラリがあればコメントしていただけると助かりますm(_ _)m
・ubuntu

ubuntu.
sudo apt install mecab libmecab-dev mecab-ipadic-utf8 git make curl xz-utils file swig

コメントよりswigも必要とのことでしたのでそちらも入れておきます。これがないとインストール時にエラーが出るようです。

・Mac

Mac.
brew install mecab mecab-ipadic git curl xz

mecab導入

mecabのサイトはこちら http://taku910.github.io/mecab/
サイト通りにも導入できますが、ubuntu、Mac共にコマンド一発でいけます。
・ubuntu

ubuntu.
sudo apt-get install mecab libmecab-dev mecab-ipadic mecab-ipadic-utf8

・Mac

Mac.
brew install mecab mecab-ipadic

導入確認

ターミナルでmecabと打って何か文章を入力するとこんな感じになります。

mecabなのに和布蕪が辞書にないのは悲しいなぁ。。。

追加辞書(mecab-ipadic-neologd)の導入

初期の辞書ではどうしても登録語が少ないので、思った通りに出力してくれません。(和布蕪とか最たる例)
この追加辞書がmecabの強みといってもいいんじゃないでしょうか。辞書の更新が、定期的(少なくとも2週間に1回以上)しているので常に新しい単語に対応しています。しかも中の人の仕事が早いです(体感

ということで追加辞書はgit上にあるのでクローンしてきましょう。
辞書のアップデートがあるのでわかりやすい場所に置いておきましょう

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

クローンしたら、mecab-ipadic-neologdに入って以下のコマンドでインストールします。
-aオプションで全ての追加辞書をインストールしますがある程度の空き容量が必要です。(1GB以上)全部入れなくても良い場合は-aを外してください。
(sudoでしないと怒られたのでsudoつけてます)

sudo ./bin/install-mecab-ipadic-neologd -n -a

インストール途中でyes or noを聞かれるのでyesと答えてください。

2019年1/8現在の追加辞書の追加内容。西野カナが出てくるあたり仕事早いですねぇ

このコマンド終了時にこんな感じの画面になると思います。

この-d以降の階層に追加されています。
追加辞書を使う際には指定してあげるのでメモっておきましょう

導入確認

先ほど同様、コマンドでmecabと打つのですが、追加辞書インストール時に表示された階層を指定してあげます。

とりあえず使ってみましょう

和布蕪は正しく出力されませんでした。。。orz

一応比較

しっかり、西野カナが一つの単語として分かち書きされました。

追加辞書の階層を忘れたら

追加辞書のインストール先を忘れた場合は以下を叩けば出てきます。

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

mecabの使用方法・オプション

導入確認ではオプションを指定しませんでしたが、各オプションでより快適に使えます。
詳細はこちらを参照 http://taku910.github.io/mecab/#format
割と使うやつを表にまとめてみました。

オプション 意味 実行例
-Owakati 分かち書きのみ
-Ochasen ChaSen互換で出力
-Odump 全情報を表示
--unk-feature 'unknown' 未知語をunknownとして判別

コマンド上でテキストファイルを形態素解析する

以下で元ファイルと出力ファイルを指定することでサクッと形態素解析できます。

meacb -オプション < 元ファイル > < 出力ファイル >

Pythonでmecabを使う

Python上でmecabを動かせるようにします。筆者の環境はPython3.6.7です。
pip経由で入れることができます。

pip install mecab-python3

ipythonあたりでimport Mecabと打って確認しときましょう。

Pythonでの簡単な使用例として追加辞書との簡単な比較

demo_mecab.py
import MeCab

wakati = MeCab.Tagger('-Owakati')    #分かち書き
neo_wakati = MeCab.Tagger('-Owakati -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd') #追加辞書を適用
word = input("分かち書き:")

wakati = wakati.parse(word).strip()
neo_wakati = neo_wakati.parse(word).strip()

print('通常辞書:' + wakati)
print('追加辞書:' + neo_wakati)

一度に処理できる入力文字列のバッファについて(修正)

デフォルトは8192のようです。
参照先はこちら

追加辞書は自動的に反映されないよ!

上記のdemoコードにも書いてありますが・・・
追加辞書は、階層を指定してあげないと意味がありません!
筆者は最初気づいてませんでした^^;

(-d /usr/local/lib/mecab/dic/mecab-ipadic-neologd')

これをお忘れなく

参考

http://taku910.github.io/mecab/
https://runble1.com/python-mecab-morphological-analysis/
https://qiita.com/siraasagi/items/e07e0b271cb7cd679a70
http://www.mwsoft.jp/programming/munou/mecab_command.html