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

MeCab と mecab-ipadic-NEologd と Python3 で形態素解析(ユーザーローカル環境版)

はじめに

MeCabをユーザーのローカル環境にインストールする必要があり、手順をまとめてみました。gccやmakeは必要になりますので、最低限のコマンドだけはroot権限でインストールしておく必要があります。もしroot権限(sudoコマンドを実行できる権限)があればホストのグローバル環境にインストールできます。グローバル環境にインストールする場合はこちらの投稿を参照してください。

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

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

MeCab のインストール先はユーザーのホームディレクトリ直下にディレクトリ opt/mecab を置き、この中にインストールすることにします。グローバル環境のインストール先はデフォルトで /usr/local ですが、この投稿では ${HOME}/opt/mecab になります。

$ 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 \
    --prefix=${HOME}/opt/mecab
$ make
$ make check
$ make install

環境変数設定と適用

この時点ではmecabコマンドやライブラリにパスが通っていないためまだ実行できません。mecabコマンドを実行できるよう、環境変数にパスを書き出して適用します。

~/.mecabenv

_PREFIX="${HOME}/opt/mecab"

LD_LIBRARY_PATH="${_PREFIX}/lib"
export LD_LIBRARY_PATH

MECABRC="${_PREFIX}/etc/mecabrc"
export MECABRC

PATH="${_PREFIX}/bin:${PATH}"
export PATH

現在作業中の端末に適用します。

source ~/.mecabenv

次回以降、ログインすると自動的に環境変数が読み込まれるよう、~/bashrc の末尾に追記します。

~/.bashrc

(前略)

. ~/.mecabenv

mecab-ipadic インストール

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

$ cd ${GITHOME}/mecab/mecab-ipadic
$ ./configure \
    --with-charset=utf8 \
    --prefix=${HOME}/opt/mecab
$ make
$ make install

動作確認

この時点で、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 インストール

デフォルトではインストーラーはsudoコマンドを使ってインストールしようとしますので、オプション –asuser を付けてユーザー権限でインストールされるようにします。

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

動作確認

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

$ mecab -d ${HOME}/opt/mecab/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
import os
tagger = MeCab.Tagger('-d {0}/opt/mecab/lib/mecab/dic/mecab-ipadic-neologd'.format(os.environ['HOME']))

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 を使っています。コメントデータの処理方法の詳細はこちらをご覧ください