読者です 読者をやめる 読者になる 読者になる

Aqutras Members' Blog

株式会社アキュトラスのメンバーが、技術情報などを楽しく書いています。

MeCabで形態素解析をやってみる

はじめましての方ははじめまして、お久しぶりの方はお久しぶり、うっちーです。
今回は、形態素解析を行うことのできるツール MeCabの導入方法ついて紹介したいと思います。
これを読んで、MeCabの使い方と形態素解析に対する具体的なイメージを持ってもらえればと思います。 形態素解析って何?という人は、前回の自然言語処理と基礎技術の記事を見て下さい。

blog.aqutras.com

MeCabとは

MeCabとは 京都大学情報学研究科−日本電信電話株式会社コミュニケーション科学基礎研究所 共同研究ユニットプロジェクトを通じて開発されたオープンソース 形態素解析エンジンです。(MeCab公式より)
とりあえず、簡単に形態素解析ができるツールぐらいに考えてもらえれば大丈夫です。

導入

※ 使用しているOSはUbuntuなので、環境によって適宜読み替えてください。

Ubuntuの場合は、apt-getでインストールできます。
同時にインストールしているmecab-ipadic-utf8は、形態素解析の際に使用する辞書データです。

sudo apt-get install mecab mecab-ipadic-utf8

使用方法

コマンドライン上でmecabと入力すると、MeCabがコマンドラインモードで起動します。
ここで、文章を入力すると形態素解析を行い、結果を表示してくれます。
コマンドラインモードの終了はCtrl+Cです。
例として、『吾輩は猫である。』という文に対して形態素解析を行ってみます。

$ mecab
吾輩は猫である。
吾輩    名詞,代名詞,一般,*,*,*,吾輩,ワガハイ,ワガハイ
は      助詞,係助詞,*,*,*,*,は,ハ,ワ
猫      名詞,一般,*,*,*,*,猫,ネコ,ネコ
で      助動詞,*,*,*,特殊・ダ,連用形,だ,デ,デ
ある    助動詞,*,*,*,五段・ラ行アル,基本形,ある,アル,アル
。      記号,句点,*,*,*,*,。,。,。
EOS

結果を見ると、形態素解析ができているのが、なんとなくわかると思います。
出力のフォーマットは以下のようになっています。

表層形\t品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用形,活用型,原形,読み,発音

分かち書き

前回紹介した通り、形態素解析には分かち書きという技術が使われています。
なので、MeCabでは分かち書きの結果をコマンドのオプションで表示することもできます。
分かち書きを行うコマンドのオプションは、-O wakatiです。

$ mecab -O wakati
吾輩は猫である。
吾輩 は 猫 で ある 。

辞書の拡張

形態素解析を行うためには、辞書が必要になります。 MeCabは標準でIPA辞書というものを使用していますが、更新が遅く新語に対応することができません。 そのため、新語に対応するために、月に数回ほど更新されて、新語にある程度対応できるmecab-ipadic-NEologdという辞書を使用してみましょう。

github.com

それでは、neologdをインストールして使ってみましょう。

まず、git cloneでneologdのプロジェクトをクローンします。
その後、そのneologdのフォルダに移動し、インストールを行います。

$ git clone --depth 1 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"

mecab -dで使用する辞書を指定できるので、neologdのインストール先のパスを設定して利用します。

$ mecab -d neologdのインストール先

辞書の自動更新

neologdはcronを以下のように設定することで、辞書を自動で更新することも可能です。

分 時 日 月 曜日 neologdのパス -n -y -u -p /path/to/user/directory > /path/to/log/file

最後に

突然ですが、すもももももももものうちという文にが何文字含まれているか分かりますか?
次回は、この謎をプログラムで解きます!!