Python+MeCab+NEologdで自然言語の形態素解析環境構築方法のイメージ画像

Python+MeCab+NEologdで自然言語の形態素解析環境構築方法

  • 公開日:2018/10/29
  • 更新日:2018/10/29
  • 投稿者:n bit

Python、MeCab、mecab-ipadic-NEologdで自然言語の機械学習等を行う最初の工程「形態素解析(分かち書きや品詞等の推定)」用の環境構築方法について解説。辞書ファイルにmecab-ipadic-NEologdを利用しますので新しい言葉にも対応した形態素解析を行えます。

  • Python

この記事は約 分で読めます。(文字)

形態素解析環境構築方法

自然言語を機械学習させるには最初に単語単位に分割する分かち書きや品詞等の推定を行う形態素解析が必ず必要となります。英語と違って日本語は文章間にスペースがなく単語同士の切れ目がわからないからです。

形態素解析を行うには形態素解析エンジンと辞書が必要となります。

Note

形態素解析

言語で意味を持つ最小単位に文章を分割したものを『形態素』と呼び、それぞれの形態素の品詞等を判別してラベル付けしていく作業のことを形態素解析と呼びます。

日本語に対応した主要な形態素解析エンジン

日本語に対応している形態素解析エンジンで主要なものをいくつか紹介します。

  • JUMAN
  • ChaSen
  • MeCab
  • Janome
  • JUMAN++

JUMAN

京都大学大学院情報学研究科知能情報学専攻の黒橋・河原研究室で開発された形態素解析エンジン。

ChaSen

奈良先端科学技術大学院大学 情報科学研究科 自然言語処理学講座(松本裕治研究室)でJUMANをベースに開発された形態素解析エンジン。JUMAN とはその方向性が異なっている。

MeCab

京都大学情報学研究科−日本電信電話株式会社コミュニケーション科学基礎研究所 共同研究ユニットプロジェクトを通じて開発された形態素解析エンジン。奈良先端科学技術大学院大学出身で現Googleのエンジニア工藤拓氏が開発者

Janome

pure Pythonで作られた形態素解析エンジン。すべてPythonで書かれており辞書も最初から同梱されているのでpipによるインストールのみで使い始めることができる。

JUMAN++

京都大学大学院情報学研究科知能情報学専攻の黒橋・河原研究室で開発された形態素解析エンジン。ニューラルネットワークを導入したJUMAN++はJUMANと名前は似ているが根本的な設計から違う。

今回は、数多くのプログラミング言語に対応しており解析速度も速く、辞書が充実しているため解析結果も良く、情報もたくさん公開されているMeCabを利用します。

この様な素晴らしい形態素解析エンジンがオープンソースで利用できる事に対して開発者である工藤拓氏には深く感謝いたしております。

MeCabと標準辞書、新語辞書(mecab-ipadic-NEologd)のインストール

MeCabと標準辞書(mecab-ipadic)、新語辞書(mecab-ipadic-NEologd)をインストールして最近の言葉にも対応した形態素解析の環境を構築していきましょう。

Homebrewのインストール

MeCabのインストールにはHomebrewが必要となります。まだHomebrewをインストールされていない方は下記のページを参考にしてHomebrewをインストールしておいてください。

pyenvの環境構築

pyenv環境にインストールしたPythonにMeCab、mecab-ipadic、mecab-ipadic-NEologdをインストールしていきます。

pyenv環境の構築とPythonのインストールが完了していない方は下記のページを参考にしてインストールしておいてください。

MeCabのインストール

HomebrewでMeCabと標準の辞書をインストールします。

MeCabをインストール

事前にHomebrewをアップグレードしておきましょう。

$ brew upgrade

MeCabをインストールします。

$ brew install mecab

標準辞書(mecab-ipadic)をインストール

$ brew install mecab-ipadic

出力結果

==> Caveats

To enable mecab-ipadic dictionary, add to /usr/local/etc/mecabrc:
dicdir = /usr/local/lib/mecab/dic/ipadic
==> Summary
🍺 /usr/local/Cellar/mecab-ipadic/2.7.0-20070801: 15 files, 50.6MB

MeCabと標準辞書の動作テスト

先ほどインストールしたMeCabと標準の辞書で正しく動作するかテストを行っておきます。

ターミナルを起動し下記のコマンド入力してMeCabを起動してください。

$ mecab

MeCabが起動されると入力待ちの状態になりますので「入力待ち状態になりましたら目的の文章を入力して形態素解析を行ってください。」と入力しましょう。

入力待ち状態になりましたら目的の文章を入力して形態素解析を行ってください。

出力結果

入力	名詞,サ変接続,*,*,*,*,入力,ニュウリョク,ニューリョク

待ち 名詞,接尾,一般,*,*,*,待ち,マチ,マチ
状態 名詞,一般,*,*,*,*,状態,ジョウタイ,ジョータイ
に 助詞,格助詞,一般,*,*,*,に,ニ,ニ
なり 動詞,自立,*,*,五段・ラ行,連用形,なる,ナリ,ナリ
まし 助動詞,*,*,*,特殊・マス,連用形,ます,マシ,マシ
たら 助動詞,*,*,*,特殊・タ,仮定形,た,タラ,タラ
目的 名詞,一般,*,*,*,*,目的,モクテキ,モクテキ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
文章 名詞,一般,*,*,*,*,文章,ブンショウ,ブンショー
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
入力 名詞,サ変接続,*,*,*,*,入力,ニュウリョク,ニューリョク
し 動詞,自立,*,*,サ変・スル,連用形,する,シ,シ
て 助詞,接続助詞,*,*,*,*,て,テ,テ
形態素 名詞,一般,*,*,*,*,形態素,ケイタイソ,ケイタイソ
解析 名詞,サ変接続,*,*,*,*,解析,カイセキ,カイセキ
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
行っ 動詞,自立,*,*,五段・ワ行促音便,連用タ接続,行う,オコナッ,オコナッ
て 助詞,接続助詞,*,*,*,*,て,テ,テ
ください 動詞,非自立,*,*,五段・ラ行特殊,命令i,くださる,クダサイ,クダサイ
。 記号,句点,*,*,*,*,。,。,。
EOS

上記のような出力結果になれば正しく形態素解析されていますのでMeCabと標準の辞書は正しく動作しています。このような文章単位の形態素解析結果を見ると感動的ですね。

標準辞書で新語に対してはどのような結果かになるかをmecab-ipadic-NEologdと比較実験するため「あげみざわ」と入力しましょう。

「あげみざわ」はモデルでタレントの「けみお」さんのYou Tubeから火がついたとされています。あげ → あげみ → あげみざわ と進化したテンションが上がったときや嬉しいときに使用する言葉です。

あげみざわ

出力結果

あげ	動詞,自立,*,*,一段,連用形,あげる,アゲ,アゲ

み 動詞,非自立,*,*,一段,連用形,みる,ミ,ミ
ざわ 名詞,固有名詞,組織,*,*,*,*
EOS

標準辞書では対応できていない「あげみざわ」は出力結果のように無理矢理分かち書きされてしまいます。当然の結果とも言えますが、これでは意味がわからなくなってしまいますね。

後で新語辞書「mecab-ipadic-NEologd」の形態素解析結果と比較してみましょう。

MeCabを終了するには「Ctrl + d」を入力してください。

  • MeCabの終了コマンド:Ctrl + d

MeCabの新語辞書インストール

mecab-ipadic-NEologdはWeb上の新語をデフォルトの辞書に追加したものです。mecab-ipadic-NEologdはGitHubからcloneしてインストールします。

xzのインストール

mecab-ipadic-NEologdのインストールに圧縮・解凍用のツール「xz」が必要となりますので事前にインストールしておきましょう。

$ brew install xz

新語辞書(mecab-ipadic-NEologd)のインストール

最初にmecab-ipadic-NEologdをGitHubからcloneしてローカルディスクにダウンロードします。

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

mecab-ipadic-NEologdをcloneしたリポジトリに移動してインストールコマンドを実行してください。

$ cd mecab-ipadic-neologd

インストールコマンドは1部の辞書を除いたタイプのものと、すべての辞書をインストールするもので選択できます。ご自分の環境に必要な方を選択してください。

  • 1部辞書除く:$ ./bin/install-mecab-ipadic-neologd-n
  • すべての辞書:$ ./bin/install-mecab-ipadic-neologd-n -a

今回はすべての辞書をインストールしています。

1部辞書除くインストールの場合

$ ./bin/install-mecab-ipadic-neologd -n

すべての辞書インストールの場合

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

途中下記のメッセージが表示されたら「yes」と入力してReturnキーを押してください。

[install-mecab-ipadic-NEologd] : Do you want to install mecab-ipadic-NEologd? Type yes or no.

出力結果




[install-mecab-ipadic-NEologd] : Install completed.
[install-mecab-ipadic-NEologd] : When you use MeCab, you can set '/usr/local/lib/mecab/dic/mecab-ipadic-neologd' as a value of '-d' option of MeCab.
[install-mecab-ipadic-NEologd] : Usage of mecab-ipadic-NEologd is here.
Usage:
$ mecab -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd ...

[install-mecab-ipadic-NEologd] : Finish..
[install-mecab-ipadic-NEologd] : Finish..

最後に辞書がインストールされたディレクトリの表示とFinish..の文字が表示されていれば正しくインストール作業が完了できています。

新語辞書(mecab-ipadic-NEologd)の動作テスト

MeCabと新語辞書(mecab-ipadic-NEologd)で正しく動作するかテストを行います。ターミナルを起動し下記のコマンドでmecab-ipadic-NEologdを指定しMeCabを起動してください。

mecabコマンドの『-d』オプションは辞書を指定できます。『-d』オプションに続けて辞書があるディレクトリを指定しましょう。

$ mecab -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd

MeCabが起動されると入力待ちの状態になりますので先ほど標準の辞書ではうまく形態素解析できなかった新語「あげみざわ」を入力してください。

あげみざわ

出力結果

あげみざわ	名詞,固有名詞,一般,*,*,*,あげみざわ,アゲミザワ,アゲミザワ

EOS

今度は正しく形態素解析できていますね。「あげみざわ」が1つの単語として認識されているのが確認できます。これで新語にも対応した形態素解析が行えるようになりました。

MeCabを終了するには「Ctrl + d」を入力してください。

PythonでMeCabを利用するためのモジュールインストール

次はPythonでMeCabを呼び出せるようにするためのモジュール『mecab-python3』をインストールしておきます。pipコマンドでインストール完了です。

$ pip install mecab-python3

実行テスト用のPythonコード

最後にPython3でMeCabと新語辞書(mecab-ipadic-NEologd)を呼び出して動作テストをしておきましょう。実行テスト用のPythonコードは下記のものになります。下記コードをファイルにコピペしてターミナルから実行してみてください。

import MeCab


# 新語辞書(mecab-ipadic-neologd)を選択
tagger = MeCab.Tagger('-d /usr/local/lib/mecab/dic/mecab-ipadic-neologd')

# 解析するテキストを入れる
input = 'ここに形態素解析を行う文字列を入力してください'

# 指定した辞書で形態素解析を実行
result = tagger.parse(input)
print(result)

今日のdot

自然言語を機械学習などで活用しようと思うと必ず1番最初に形態素解析の作業から避けては通れません。形態素解析を行う文章のジャンルや特性によって利用する形態素解析エンジンを切り替えた方が良いケースもありますが、まずは標準的なMeCabと新語辞書(mecab-ipadic-NEologd)をセットで入れておくと幅広く活用できるので良いでしょう。