カテゴリー
プログラミング

MeCab と mecab-ipadic-NEologd と Python3 で形態素解析

はじめに

文章の機械学習、といっても大まかすぎるのですが、文章を対象とするデータ解析には単語に分割したものを機械学習モデルの入力とする、という手法がいくつかあります。

英語の場合は単語はほとんどがスペース区切りになっているので特別な解析器がなくともなんとかなるのですが、日本語の場合はスペースはありませんし、単語でも活用があったりと簡単に分割することができません。そこで、日本語向けの解析器 MeCab (GitHub) を使って文章を単語に区切ってみたいと思います。解析器には日本語辞書が必要で、デフォルトで mecab-ipadic が付属しています。今回、Web 上にある文章の解析にも対応できるようにと、月2回程度更新されているという日本語辞書 mecab-ipadic-NEologd (GitHub) も追加でインストールしたいと思います。

最後に、Python3 プログラムで簡単な分かち書きプログラムを作成して動作確認をします。

この投稿はroot権限があるときのインストール手順です。ユーザー権限しかない場合の、ユーザーのローカル環境へのインストール手順についてはこちらの投稿を参照してください。

MeCab と mecab-ipadic のインストール

Mecab と mecab-ipadic はどちらも同じ GitHub プロジェクトに含まれています。GitHub から clone してきたものをそれぞれ設定、インストールします。

$ GITHOME="${HOME}/git"
$ mkdir -p ${GITHOME}
$ cd ${GITHOME}
$ git clone https://github.com/taku910/mecab.git

MeCab インストール

デフォルトでは文字コード EUC、インストール先ディレクトリ /usr/local にインストールされます。いまどきの Linux なら文字コードは UTF8 にしておいた方が文字化けに関する懸念がなくなり便利かと思います。また、mecab-ipadic-NEologd が対応している文字コードは UTF8 のみですので、やはりここでは UTF8 を指定します。

$ cd ${GITHOME}/mecab/mecab
$ ./configure --enable-utf8-only
$ make
$ make check
$ sudo make install

2016/08/17 現在、下記のファイルがインストールされました。

/usr/local/libexec
/usr/local/bin/mecab
/usr/local/bin/mecab-config
/usr/local/etc/mecabrc
/usr/local/include/mecab.h
/usr/local/lib/libmecab.a
/usr/local/lib/libmecab.la
/usr/local/lib/libmecab.so
/usr/local/lib/libmecab.so.2
/usr/local/lib/libmecab.so.2.0.0
/usr/local/libexec/mecab
/usr/local/libexec/mecab/mecab-cost-train
/usr/local/libexec/mecab/mecab-dict-gen
/usr/local/libexec/mecab/mecab-dict-index
/usr/local/libexec/mecab/mecab-system-eval
/usr/local/libexec/mecab/mecab-test-gen
/usr/local/share/man/man1
/usr/local/share/man/man1/mecab.1

mecab-ipadic インストール

デフォルトでは文字コード EUC、インストール先ディレクトリ /usr/local にインストールされます。こちらも、UTF8 にしたものをインストールします。

$ cd ${GITHOME}/mecab/mecab-ipadic
$ ./configure --with-charset=utf8
$ make
$ sudo make install

2016/08/17 現在、下記のファイルがインストールされました。

/usr/local/libexec /usr/local/lib/mecab /usr/local/lib/mecab/dic /usr/local/lib/mecab/dic/ipadic /usr/local/lib/mecab/dic/ipadic/char.bin /usr/local/lib/mecab/dic/ipadic/dicrc /usr/local/lib/mecab/dic/ipadic/left-id.def /usr/local/lib/mecab/dic/ipadic/matrix.bin /usr/local/lib/mecab/dic/ipadic/pos-id.def /usr/local/lib/mecab/dic/ipadic/rewrite.def /usr/local/lib/mecab/dic/ipadic/right-id.def /usr/local/lib/mecab/dic/ipadic/sys.dic /usr/local/lib/mecab/dic/ipadic/unk.dic

動作確認

この時点で、mecab コマンドによる形態素解析ができるようになります。mecab コマンドを引数なしで実行すると標準入力の入力待ち状態になりますので、目的の文章を入力してください。形態素解析結果が表示されます。終了するには「Ctrl + d」を入力してください。

$ mecab
今週末は金剛山に登りに行って、そのあと新世界かどっかで打ち上げしましょ。
今週	名詞,副詞可能,*,*,*,*,今週,コンシュウ,コンシュー
末	名詞,接尾,副詞可能,*,*,*,末,マツ,マツ
は	助詞,係助詞,*,*,*,*,は,ハ,ワ
金剛山	名詞,固有名詞,一般,*,*,*,金剛山,コンゴウザン,コンゴーザン
に	助詞,格助詞,一般,*,*,*,に,ニ,ニ
登り	名詞,一般,*,*,*,*,登り,ノボリ,ノボリ
に	助詞,格助詞,一般,*,*,*,に,ニ,ニ
行っ	動詞,自立,*,*,五段・カ行促音便,連用タ接続,行く,イッ,イッ
て	助詞,接続助詞,*,*,*,*,て,テ,テ
、	記号,読点,*,*,*,*,、,、,、
その	連体詞,*,*,*,*,*,その,ソノ,ソノ
あと	名詞,一般,*,*,*,*,あと,アト,アト
新	接頭詞,名詞接続,*,*,*,*,新,シン,シン
世界	名詞,一般,*,*,*,*,世界,セカイ,セカイ
か	助詞,副助詞/並立助詞/終助詞,*,*,*,*,か,カ,カ
どっか	名詞,代名詞,一般,*,*,*,どっか,ドッカ,ドッカ
で	助詞,格助詞,一般,*,*,*,で,デ,デ
打ち上げ	動詞,自立,*,*,一段,連用形,打ち上げる,ウチアゲ,ウチアゲ
し	動詞,自立,*,*,サ変・スル,連用形,する,シ,シ
ましょ	助動詞,*,*,*,特殊・マス,未然ウ接続,ます,マショ,マショ
。	記号,句点,*,*,*,*,。,。,。
EOS

mecab-ipadic-NEologd のインストール

mecab-ipadic-NEologd は GitHub から clone して設定、インストールします。

$ cd ${GITHOME}
$ git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git

mecab-ipadic-NEologd インストール

$ cd ${GITHOME}/mecab-ipadic-neologd
$ ./bin/install-mecab-ipadic-neologd

2016/08/17 現在、下記のファイルがインストールされました。

/usr/local/lib/mecab/dic/mecab-ipadic-neologd
/usr/local/lib/mecab/dic/mecab-ipadic-neologd/char.bin
/usr/local/lib/mecab/dic/mecab-ipadic-neologd/dicrc
/usr/local/lib/mecab/dic/mecab-ipadic-neologd/left-id.def
/usr/local/lib/mecab/dic/mecab-ipadic-neologd/matrix.bin
/usr/local/lib/mecab/dic/mecab-ipadic-neologd/pos-id.def
/usr/local/lib/mecab/dic/mecab-ipadic-neologd/rewrite.def
/usr/local/lib/mecab/dic/mecab-ipadic-neologd/right-id.def
/usr/local/lib/mecab/dic/mecab-ipadic-neologd/sys.dic
/usr/local/lib/mecab/dic/mecab-ipadic-neologd/unk.dic

動作確認

mecab コマンドを実行する際、-d オプションで mecab-ipadic-NEologd の辞書を指定します。

$ mecab -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd
今週末は金剛山に登りに行って、そのあと新世界かどっかで打ち上げしましょ。
今週	名詞,副詞可能,*,*,*,*,今週,コンシュウ,コンシュー
末	名詞,接尾,副詞可能,*,*,*,末,マツ,マツ
は	助詞,係助詞,*,*,*,*,は,ハ,ワ
金剛山	名詞,固有名詞,一般,*,*,*,金剛山,コンゴウザン,コンゴーザン
に	助詞,格助詞,一般,*,*,*,に,ニ,ニ
登り	名詞,一般,*,*,*,*,登り,ノボリ,ノボリ
に	助詞,格助詞,一般,*,*,*,に,ニ,ニ
行っ	動詞,自立,*,*,五段・カ行促音便,連用タ接続,行く,イッ,イッ
て	助詞,接続助詞,*,*,*,*,て,テ,テ
、	記号,読点,*,*,*,*,、,、,、
その	連体詞,*,*,*,*,*,その,ソノ,ソノ
あと	名詞,一般,*,*,*,*,あと,アト,アト
新世界	名詞,固有名詞,一般,*,*,*,新世界,シンセカイ,シンセカイ
か	助詞,副助詞/並立助詞/終助詞,*,*,*,*,か,カ,カ
どっか	名詞,代名詞,一般,*,*,*,どっか,ドッカ,ドッカ
で	助詞,格助詞,一般,*,*,*,で,デ,デ
打ち上げ	動詞,自立,*,*,一段,連用形,打ち上げる,ウチアゲ,ウチアゲ
し	動詞,自立,*,*,サ変・スル,連用形,する,シ,シ
ましょ	助動詞,*,*,*,特殊・マス,未然ウ接続,ます,マショ,マショ
。	記号,句点,*,*,*,*,。,。,。
EOS

Python3 で MeCab を使う

MeCab と mecab-ipadic-NEologd を Python3 で使用できるようにします。

モジュールインストール

venv環境を有効にした状態でインストールします。

(venv35)$ pip install mecab-python3

動作確認

tagger を取得する際、デフォルトの辞書(mecab-ipadic) 以外の辞書を指定するには、mecab コマンドを実行したときのように -d オプションで mecab-ipadic-NEologd の辞書を指定します。下記プログラムでは、解析結果のうち名詞だけ抽出して表示する処理も追加してみました。

import MeCab
tagger = MeCab.Tagger('-d /usr/local/lib/mecab/dic/mecab-ipadic-neologd')

input = '今週末は金剛山に登りに行って、そのあと新世界かどっかで打ち上げしましょ。'

result = tagger.parse(input)
print(result)

node = tagger.parseToNode(input)
target_parts_of_speech = ('名詞', )
while node:
    if node.feature.split(',')[0] in target_parts_of_speech:
        print(node.surface)
    node = node.next
今週	名詞,副詞可能,*,*,*,*,今週,コンシュウ,コンシュー
末	名詞,接尾,副詞可能,*,*,*,末,マツ,マツ
は	助詞,係助詞,*,*,*,*,は,ハ,ワ
金剛山	名詞,固有名詞,一般,*,*,*,金剛山,コンゴウザン,コンゴーザン
に	助詞,格助詞,一般,*,*,*,に,ニ,ニ
登り	名詞,一般,*,*,*,*,登り,ノボリ,ノボリ
に	助詞,格助詞,一般,*,*,*,に,ニ,ニ
行っ	動詞,自立,*,*,五段・カ行促音便,連用タ接続,行く,イッ,イッ
て	助詞,接続助詞,*,*,*,*,て,テ,テ
、	記号,読点,*,*,*,*,、,、,、
その	連体詞,*,*,*,*,*,その,ソノ,ソノ
あと	名詞,一般,*,*,*,*,あと,アト,アト
新世界	名詞,固有名詞,一般,*,*,*,新世界,シンセカイ,シンセカイ
か	助詞,副助詞/並立助詞/終助詞,*,*,*,*,か,カ,カ
どっか	名詞,代名詞,一般,*,*,*,どっか,ドッカ,ドッカ
で	助詞,格助詞,一般,*,*,*,で,デ,デ
打ち上げ	動詞,自立,*,*,一段,連用形,打ち上げる,ウチアゲ,ウチアゲ
し	動詞,自立,*,*,サ変・スル,連用形,する,シ,シ
ましょ	助動詞,*,*,*,特殊・マス,未然ウ接続,ます,マショ,マショ
。	記号,句点,*,*,*,*,。,。,。
EOS

今週
末
金剛山
登り
あと
新世界
どっか

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください