MAGAZINE

ルーターマガジン

データ/フォーマット

形態素解析エンジンMeCabと固有表現に強い辞書mecab-ipadic-NEologdをインストールする

2019.05.08
Pocket

こんにちは。エンジニアのAraoです。今回は、オープンソースの形態素解析エンジンのMeCabと、そのMecabで使える、固有名詞や新語、流行語に強い辞書のmecab-ipadic-NEologdをインストールする手順を紹介します。

これまでにもMecabにユーザー辞書を作成し、追加するマルコフ連鎖での文章自動生成などでMeCabを使っていましたが、MeCabのインストール手順を紹介していませんでした。自然言語処理の分野に興味がある方は、是非MeCabをインストールしてみましょう。

MeCabとは

MeCab: Yet Another Part-of-Speech and Morphological Analyzer

MeCabとは、2006年に初版がリリースされた、オープンソースの形態素解析エンジンです。形態素解析について解説すると非常に長くなってしまうためここでは省略しますが、実際にMeCabで形態素解析を行うとどうなるかだけは紹介しておきます。「あらゆる現実を、すべて自分のほうへねじ曲げたのだ。」という文をMeCabで形態素解析すると、以下のようになります。

$ mecab
あらゆる現実を、すべて自分のほうへねじ曲げたのだ。
あらゆる	連体詞,*,*,*,*,*,あらゆる,アラユル,アラユル
現実	名詞,一般,*,*,*,*,現実,ゲンジツ,ゲンジツ
を	助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
、	記号,読点,*,*,*,*,、,、,、
すべて	名詞,副詞可能,*,*,*,*,すべて,スベテ,スベテ
自分	名詞,一般,*,*,*,*,自分,ジブン,ジブン
の	助詞,連体化,*,*,*,*,の,ノ,ノ
ほう	名詞,非自立,一般,*,*,*,ほう,ホウ,ホー
へ	助詞,格助詞,一般,*,*,*,へ,ヘ,エ
ねじ曲げ	動詞,自立,*,*,一段,連用形,ねじ曲げる,ネジマゲ,ネジマゲ
た	助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
の	名詞,非自立,一般,*,*,*,の,ノ,ノ
だ	助動詞,*,*,*,特殊・ダ,基本形,だ,ダ,ダ
。	記号,句点,*,*,*,*,。,。,。
EOS

入力された文を単語ごとに分解したものと、そのそれぞれの品詞や活用形、発音などが出力されています。中学生の頃の国文法の授業を思い出しますね。

このような解析を行うには、品詞や活用形などの情報を持った辞書と呼ばれるファイルが必要になります。辞書に存在しない単語を含む文が入力された場合でも、適当にその品詞を推定するような機能をMeCabは持っていますが、残念ながら万能ではありません。解析に失敗してしまう例を紹介します。

$ mecab
北斗の拳の原作者は武論尊。
北斗	名詞,一般,*,*,*,*,北斗,ホクト,ホクト
の	助詞,連体化,*,*,*,*,の,ノ,ノ
拳	名詞,一般,*,*,*,*,拳,コブシ,コブシ
の	助詞,連体化,*,*,*,*,の,ノ,ノ
原作	名詞,一般,*,*,*,*,原作,ゲンサク,ゲンサク
者	名詞,接尾,一般,*,*,*,者,シャ,シャ
は	助詞,係助詞,*,*,*,*,は,ハ,ワ
武	名詞,一般,*,*,*,*,武,ブ,ブ
論	名詞,接尾,一般,*,*,*,論,ロン,ロン
尊	名詞,一般,*,*,*,*,尊,ミコト,ミコト
。	記号,句点,*,*,*,*,。,。,。
EOS

「武論尊(ぶろんそん)」というペンネームを正しく解析することができませんでした。「北斗の拳(ほくとのけん)」も、固有名詞一語として扱うことができず、読み方が「ほくとのこぶし」となってしまいました。

mecab-ipadic-NEologdとは

GitHub - neologd/mecab-ipadic-neologd: Neologism dictionary based on the language resources on the Web for mecab-ipadic

mecab-ipadic-NEologdとは、上記の例のような文でも正しく解析できるよう、MeCab標準の辞書に固有表現を追加するなどの改良を行った辞書です。この辞書を使って上記の文を解析すると以下のようになります。

$ mecab
北斗の拳の原作者は武論尊。
北斗の拳	名詞,固有名詞,一般,*,*,*,北斗の拳,ホクトノケン,ホクトノケン
の	助詞,連体化,*,*,*,*,の,ノ,ノ
原作者	名詞,固有名詞,一般,*,*,*,原作者,ゲンサクシャ,ゲンサクシャ
は	助詞,係助詞,*,*,*,*,は,ハ,ワ
武論尊	名詞,固有名詞,人名,一般,*,*,武論尊,ブロンソン,ブロンソン
。	記号,句点,*,*,*,*,。,。,。
EOS

「北斗の拳」も「武論尊」も期待通りに扱われています。一方で「原作者」が固有名詞になってしまっているという問題もあります。これは欠点として、「固有表現では無い語も固有表現として登録されています」と明記されています。この辞書はWeb上の言語資源を元に毎週2回更新されているため、新語に対してもかなり強いです。とりあえずMeCabを使って何かしてみたい!というような場合は、こちらの辞書を使うことを推奨します。目的によっては不都合が生じることもありますが、そのときは使う辞書を切り替えれば解決します。辞書の設定方法は後述します。

MeCabとMeCab標準のIPA辞書のインストール手順

MeCab: Yet Another Part-of-Speech and Morphological Analyzer

Homebrewやaptなどのパッケージマネージャーなどでもインストールできますが、この記事ではconfigureしてmakeしてmake installする方法で進めます。基本的には公式に書かれている手順でインストールを進めれば良いのですが、configureの際に何もオプションを指定せずにインストールすると、文字コードがEUCになってしまいます。mecab-ipadic-NEologdを使う場合は文字コードはUTF-8にする必要があるため、UTF-8 only modeでインストールしてしまいましょう。

まずは上記のリンクから、MeCab本体をダウンロードします。mecab-0.996.tar.gzがダウンロードされました。

$ tar zxvf mecab-0.996.tar.gz
$ cd mecab-0.996
$ ./configure --with-charset=utf8 --enable-utf8-only
$ make
$ sudo make install
$ mecab -v
mecab of 0.996

$ mecab-config --help
Usage: mecab-config [OPTIONS]

Options:
  [--cxx]
  [--prefix[=DIR]]
  [--exec-prefix[=DIR]]
  [--libs]
  [--cflags]
  [--dicdir]
  [--libexecdir]
  [--sysconfdir]
  [--libs-only-L]
  [--libs-only-l]
  [--inc-dir]
  [--help]
  [--version]

3行目がポイントで、オプションで使用する文字コードをUTF-8に固定しています。最後の2つはMeCabが正しくインストールされたかどうかの確認をしています。

ここまで完了したら、MeCab標準のIPA辞書をダウンロードします。mecab-ipadic-2.7.0-20070801.tar.gzがダウンロードされました。

$ tar zxvf mecab-ipadic-2.7.0-20070801.tar.gz
$ cd mecab-ipadic-2.7.0-20070801
$ ./configure --with-charset=utf8
$ make
$ sudo make install
$ mecab
あらゆる現実を、すべて自分のほうへねじ曲げたのだ。
あらゆる	連体詞,*,*,*,*,*,あらゆる,アラユル,アラユル
現実	名詞,一般,*,*,*,*,現実,ゲンジツ,ゲンジツ
を	助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
、	記号,読点,*,*,*,*,、,、,、
すべて	名詞,副詞可能,*,*,*,*,すべて,スベテ,スベテ
自分	名詞,一般,*,*,*,*,自分,ジブン,ジブン
の	助詞,連体化,*,*,*,*,の,ノ,ノ
ほう	名詞,非自立,一般,*,*,*,ほう,ホウ,ホー
へ	助詞,格助詞,一般,*,*,*,へ,ヘ,エ
ねじ曲げ	動詞,自立,*,*,一段,連用形,ねじ曲げる,ネジマゲ,ネジマゲ
た	助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
の	名詞,非自立,一般,*,*,*,の,ノ,ノ
だ	助動詞,*,*,*,特殊・ダ,基本形,だ,ダ,ダ
。	記号,句点,*,*,*,*,。,。,。
EOS

ここでも3行目がポイントで、オプションでUTF-8を指定しています。最後のはMeCabで正しく形態素解析が行えるかどうかの確認をしています。MeCabを終了したいときはCtrl+cで終了しましょう。

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

GitHub - neologd/mecab-ipadic-neologd: Neologism dictionary based on the language resources on the Web for mecab-ipadic

こちらは特にオプションなどは指定せずに、READMEに書かれている通りにインストールを進めます。日本語版のREADMEも用意されているので、そちらを見ながら進めるのが確実かと思います。ただしREADMEに書かれているようにインストールには十分な空きメモリが必要なので注意が必要です。最小構成のLinuxのサーバーだとまず間違いなくインストールにコケてしまいます。

$ git clone --depth 1 git@github.com:neologd/mecab-ipadic-neologd.git
$ cd mecab-ipadic-neologd
$ ./bin/install-mecab-ipadic-neologd -n
yes

MeCabで使う辞書の設定方法

無事にmecab-ipadic-NEologdをインストールできても、この時点ではまだMeCabはmecab-ipadic-NEologdを使うような設定になっていません。最初にインストールしたMeCab標準のIPA辞書を使うようになっています。ここから先、MeCabで使う辞書の設定方法を、順を追って説明します。何か事情があってmecab-ipadic-NEologdではなく標準のIPA辞書を使いたくなったときも、このセクションを参考に設定を変更してみてください。

MeCabの辞書ファイルのインストール先の確認
$ mecab-config --dicdir
/usr/local/lib/mecab/dic
$ ls /usr/local/lib/mecab/dic/
ipadic			mecab-ipadic-neologd

上記コマンドで、MeCabの辞書ファイル(この記事ではIPA辞書とmecab-ipadic-NEologdの2つ)がインストールされているフォルダを知ることができます。

辞書の指定をしなかった場合に使われる辞書ファイルの確認
$ mecab -D
filename:	/usr/local/lib/mecab/dic/ipadic/sys.dic
version:	102
charset:	utf8
type:	0
size:	392126
left size:	1316
right size:	1316

オプション-Dで、標準で使われる辞書ファイルを確認できます。IPA辞書が使われる設定になっていることがわかります。

一時的に別の辞書ファイルを使う
$ mecab -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd
北斗の拳の原作者は武論尊。
北斗の拳	名詞,固有名詞,一般,*,*,*,北斗の拳,ホクトノケン,ホクトノケン
の	助詞,連体化,*,*,*,*,の,ノ,ノ
原作者	名詞,固有名詞,一般,*,*,*,原作者,ゲンサクシャ,ゲンサクシャ
は	助詞,係助詞,*,*,*,*,は,ハ,ワ
武論尊	名詞,固有名詞,人名,一般,*,*,武論尊,ブロンソン,ブロンソン
。	記号,句点,*,*,*,*,。,。,。
EOS

オプション-dの後に辞書ファイルを指定すると、その辞書ファイルを使って形態素解析を行うことができます。いちいち指定するのが面倒な場合、下記方法で標準で使われる辞書ファイルを変更しましょう。

MeCabの設定ファイル(mecabrc)の場所を調べる
$ mecab-config --sysconfdir
/usr/local/etc
$ ls /usr/local/etc/
mecabrc

上記コマンドで、MeCabの設定ファイルの場所を確認できます。

MeCabが標準で使用する辞書ファイルを変更する
$ sudo vi /usr/local/etc/mecabrc
dicdir =  /usr/local/lib/mecab/dic/ipadic
を
dicdir =  /usr/local/lib/mecab/dic/mecab-ipadic-neologd
に書き換える
$ mecab -D
filename:	/usr/local/lib/mecab/dic/mecab-ipadic-neologd/sys.dic
version:	102
charset:	UTF8
type:	0
size:	4565990
left size:	1316
right size:	1316

設定ファイル内の辞書ファイルを指定している箇所を編集し、標準で使用したい辞書を指定します。設定を変更したら、オプション-Dで正しく反映されているか確認しましょう。

まとめ

MeCab本体と、2種類の辞書のインストール方法、それら辞書の設定方法を駆け足で解説しました。ここまでできれば、あとはPythonやRubyなどからMeCabを呼び出して、様々な用途に役立てることができると思います。弊社のWebスクレイピング技術と組み合わせると、集めてきた膨大な量の文章を片っぱしから形態素解析することにより、自然言語系の教師データを作成したり、単語間の関連の強弱を調査したり、といったことが可能になります。ご興味のある方はぜひご連絡ください。

Pocket

CONTACT

お問い合わせ・ご依頼はこちらから