2022年最新版 Python + mecab の周辺事情

2022年最新版 Python + mecab の周辺事情

データエンジニア兼バックエンドエンジニアの @kazasiki です。

今回は2022年現在のPythonおよびmecabまわりの事情をつらつらとまとめたいと思います。

日本語の自然言語処理(特に形態素解析)を扱う場合はよくお世話になるツールなのですが、mecab自体が歴史のあるツールだったり、辞書データにも栄枯盛衰があったり、ビルドが大変だったり、という感じで、初学者にはやさしくない要素が満載です。

実際に開発に使う際もプロジェクトによって環境構築や利用方法がばらついたりする可能性もあります。実際、社内でも少し問題になったことがあるので、今回ちょっと整理するための記事を書こうと思った次第です。

また、環境に依存しない記述をするように努めますが、筆者の環境はMacなのでWindowsのことはよくわかりません。そこは承知の上でお読みください。

結論

先に結論をかくと、mecab-python3というリポジトリがあるので、そこを見てやるのがベターで、辞書はUniDicが良いと思います。

github.com

このmoduleをinstallすれば、mecab本体をダウンロードしたりビルドしたりする必要はありません。辞書データのインストールもリポジトリのReadmeに従えば問題ありませんでした。

ここから下の文章は全て背景の知識なので、とりあえずmecabで形態素解析したいぜ!って人には不要ですが、知っておくと役に立つかもしれないので、興味があればどうぞ。

mecabについて

公式の紹介ページはこちら。

taku910.github.io

履歴を見ると、2006年にリリースされたもので、良くも悪くもかなり古くからあるツールです。実装は主にC++です。なので、Pythonでmecabを利用する場合は、C++のコンパイル後のライブラリファイルをPythonから利用してるという関係性です。

mecabをインストールしようとした時に、makeによるビルドが必要だったり、環境によってC++のコンパイラ云々でエラーが出たりするのは概ねこの辺の事情です。慣れない人がまず困るポイントですね。

また、mecab本体と辞書は別物です。辞書はいろいろな種類があります。mecab本体については2013年のv0.996で更新が止まっていますが、辞書はモノによって更新が続いてたり続いてなかったりします。

mecabにある形態素解析の処理は更新されなくても(辞書ほどは)困りませんが、辞書は更新され続けないと新しい単語が登録されず、解析に支障が出る可能性があります。なので、辞書については最近まで更新されてるものを選ぶほうが良いです。

mecabのinstallについて

結論でも書きましたが、私は mecab-python3 の利用をオススメしてます。

利点はいくつかあって、まずPython3に対応しています。mecab本体に付属しているPythonバインディングのインストーラはPython3だとそのままでは動きません。時代的にPython2がまだ主流だったときのものなので仕方ないですね。気合でインストールすればバインディング自体は動きますが、出来ればしたくない苦労です。

2つ目に、mecabのライブラリが同梱されてます。なので、mecab-python3がinstallできれば、mecab本体を入れなくても動きます。mecab自体のビルドで悩むことも(多分)ありません。ただ、CLIのmecabコマンドは入ってないので、Pythonからではなく直接mecabコマンドを叩く形での動作確認はできません。

3つ目に、今でもメンテナンスがされています。

なので、普通にPythonからmecabを使うのであれば、基本的に mecab-python3 を入れれば特に問題なく動作するはずです。

辞書について

辞書データは栄枯盛衰が激しくて、どれが良いのかわからなくなるポイントです。辞書はそれだけでとても奥が深いですし、製作者の意図によって作られ方も様々です。この記事はあまり深いところまでは踏み込まず、これを使うならここだけは注意した方が良いという点だけ書いていきます。

ipadic

Mecabの公式ページではIPA辞書(ipadic)の利用が推奨されています。IPAとは情報処理技術者機構のことです。ただ、この辞書は2007年で更新が止まっていて、その後は更新されていません。なので、例えば 令和 のような単語は入ってません。なので、互換性などの特別な事情がなければこの辞書を使うべきではないでしょう。

neologd

Webの記事などでよくオススメされているのはneologdです。

github.com

辞書の特性はリポジトリのReadmeを読んで頂くのが早いですが、ざっくりいうと はてなキーワード などWebサイトからクローラで文章を取得してきて構築している辞書です。なので、新しい単語が豊富に入っています。ただ、 少なくとも毎週 2 回更新される予定 とあるものの、2020年9月以降は一切更新されておらず、それ以降の新語が反映される見込みは薄いようです。

また、形態素解析用の辞書として不適切な分類などがあるようです。リポジトリのReadmeにも記述があるので確認しましょう。これらの特性がどのように働くかは用途次第ですが、しっかり認識して使う必要があります。

neologdについて詳細を理解したい方は、リポジトリの各種ドキュメントや以下の記事が詳細で参考になります。

engineering.linecorp.com

UniDic

最後に紹介するのはUniDicです。公式ページはこちらです。

国立国語研究所で作ってるもので由緒正しい感じがしますね。辞書の最新バージョンは2021年4月に出されたもので、現在も更新が続いているようです。正直、細かく解説できるほど理解もしてないので、解説は公式サイトで見ていただければと思います。

個人的にはUniDicを推しています。neologdはメモリやディスクを大量に使うのと、更新が止まってるのが少し気になります。なので、まずUniDicで試して、分析対象の文章によってうまく動かない場合はmecab-unidic-neologdを使うというイメージを持ってます。

辞書の使い分けについては、 mecab-python3 のメンテナもされている方の以下の記事が参考になります。ただ、2019年の記事なのでそこは注意しましょう。

www.dampfkraft.com

まとめ

mecab-python3 と UniDic を使いましょう。特別な事情がなければ、自力でmecabをソースコードからビルドしたりする必要はありません。

辞書は種類も色々あるし、更新されていきます。チームにメンバが複数いるなら揃えましょう。なんらかの分析をしたら辞書の種類とバージョンを必ず明記しましょう。

この記事がみなさんのお役に立つことを祈っています。

alt

@kazasiki

デジタルテクノロジー統括部 デジタルソリューション部 Webアプリエンジニアグループ リードエンジニア

バックエンドエンジニア。VRゲームとダンスミュージックが好き。都内のクラブによく行く。

※2022年6月現在の情報です。