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('')
コメント