Help us understand the problem. What is going on with this article?

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のデモ.png
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-01-09 1.47.03.png
2019年1/8現在の追加辞書の追加内容。西野カナが出てくるあたり仕事早いですねぇ

このコマンド終了時にこんな感じの画面になると思います。
スクリーンショット 2019-01-09 1.53.10.png
この-d以降の階層に追加されています。
追加辞書を使う際には指定してあげるのでメモっておきましょう

導入確認

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

とりあえず使ってみましょう
スクリーンショット 2019-01-09 1.58.11.png
和布蕪は正しく出力されませんでした。。。orz

一応比較
スクリーンショット 2019-01-09 2.05.07.png
しっかり、西野カナが一つの単語として分かち書きされました。

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

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

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

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

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

オプション 意味 実行例
-Owakati 分かち書きのみ スクリーンショット 2019-01-09 13.05.45.png
-Ochasen ChaSen互換で出力 スクリーンショット 2019-01-09 13.06.25.png
-Odump 全情報を表示 スクリーンショット 2019-01-09 13.06.56.png
--unk-feature 'unknown' 未知語をunknownとして判別 スクリーンショット 2019-01-09 13.20.24.png

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

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

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)

mecabのバグ(?

python上でmecabを使っていた時、一定以上の大きさのファイルをmecabで形態素解析させようとしたところ、"None"を返されることがありました。字数でいうと大体2~300万字を超えると飽和したのかなんなのかNoneを返しちゃうみたいです。解決策とかありましたらコメントお願いしますm(_ _)m

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

上記の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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした