MeCab で形態素解析をしてみよう!!

MeCab で形態素解析をしてみよう!!

2016.03.23

すみません。。。タイトルに何のひねりも無くて(笑)MeCab(めかぶ)とは、オープンソースの形態素解析エンジンで、日本語入力の第一人者である工藤拓氏によって開発されました。この名称は開発者の好物「和布蕪(めかぶ)」から取られています。何やら怪しい雰囲気を醸し出していますが、そんなことありません!実は世界中の自然言語処理で広く使われているソフトウェアなんです。

「自然言語処理」 と 「形態素解析」

Twitter で呟かれている言葉にどんなものが含まれているかとか、分析した例はたくさんありますよね。(※1)

英語の文章は、空白で単語が区切られているので抽出は簡単です。しかし日本語の場合はちょっと面倒です。日本語は英語のように単語を空白で区切らないので、単語の境界(切れ目)を判別するのが難しい です。

特に「つぶやき」はビジネス文書などとは違い、日常会話に近い文体が使われます。また、同じ意味を持つ言葉でも人によって使い方が異なります。例えば 「サーバー」 と 「サーバ」 とか、「バイオリン」 と 「ヴァイオリン」 など、挙げればきりがありません。
(IT用語辞典バイナリ – 表記ゆれ

自然言語を分析する

ところで、人間が日常的に使っている言葉を 「自然言語」 と呼びます。これをコンピュータで処理することを 「自然言語処理」 といいます。
「自然言語処理」を行うために 「形態素」 という単位へ分割することを 「形態素解析」 といいます。

形態素とは元々言語学の用語で、意味を持つ最小単位 のことです。自然言語処理を行うにあたり、単語はこの単位で区切られる必要があります。なぜこの分割が重要かというと、以下の文章を解釈してみてください。

「ここではきものをぬいでください」

これは以下のように解釈することが可能です。

「ここで履物を脱いでください」
「ここでは着物を脱いでください」
形態素解析の実例より)

言葉を区切る位置によって意味が全く異なります。また、文章を意味のある単語へ分割することの重要性をお分かりいただけるかと思います。形態素解析は 日本語処理 を行う上での第一段階となっています。
(参考:自然言語(日本語)処理

形態素解析エンジン Mecab

MeCab は オープンソースの形態素解析エンジン で、分割規則を定義した辞書を併用 しています。某大手メーカーの かな漢字変換 等にも応用されており、単独での使用はもちろん、C/C++、Python、Java、R などへ組み込んで使うこともできます。

※1 Twitter の解析例
Rを使った解析例
あなたのつぶやきを分析するサービス14選
などいろいろあります。

MeCab をインストールしてみよう!!

MeCab には UNIX/Linux版と Windows版があります。Windows版にはインストーラ付きのバイナリパッケージがあるので簡単に導入ができます。
しかし筆者は Windows が苦手なので、Linux 環境に MeCab をインストール してみようと思います。

実行環境

PC      : DELL T3500(メモリ16GB、ディスク 約500GB)
OS      : CentOS7(7.0.1406) 64bit
MeCab : ver.0.996
– システム辞書:IPA(UTF8)
– その他設定はひとまずデフォルト値

インストールに使用したソフトウェア

MeCab ソース        : mecab-0.996
システム辞書ソース : mecab-ipadic-2.7.0-20070801
Cコンパイラ           : gcc 4.8.2 20140120 (CentOS7標準のもの)
make                    : GNU Make 3.82 (CentOS7標準のもの)

ビルドの方法は一般的なオープンソースのソフトウェア導入手順と同様です。

MeCab のインストール

(1) ソースのダウンロードと展開

[root@hogehoge ~]# wget http://mecab.googlecode.com/files/mecab-0.996.tar.gz
[root@hogehoge ~]# tar xvfz mecab-0.996.tar.gz

(2) Makefile の生成

[root@hogehoge ~]# cd mecab-0.996
[root@hogehoge mecab-0.996]# ./configure

(3) ソースのコンパイル

[root@hogehoge mecab-0.996]# make

(4) モジュールインストール前のチェック

[root@hogehoge mecab-0.996]# make check

(5) モジュールのインストール

[root@hogehoge mecab-0.996]# make install

システム辞書のインストール

(1) ソースのダウンロードと展開

[root@hogehoge ~]# wget http://mecab.googlecode.com/files/mecab-ipadic-2.7.0-20070801.tar.gz
[root@hogehoge ~]# tar xvfz mecab-ipadic-2.7.0-20070801.tar.gz

(2) Makefile の生成

[root@hogehoge ~]# cd mecab-ipadic-2.7.0-20070801
[root@hogehoge mecab-ipadic-2.7.0-20070801]# ./configure --with-charset=utf8
 → 文字コードをUTF8で使いたいので、--with-charsetオプションを指定します。

(3) ソースのコンパイル

[root@hogehoge mecab-ipadic-2.7.0-20070801]# make

(4) モジュールのインストール

[root@hogehoge mecab-ipadic-2.7.0-20070801]# make install

これで MeCab を使用する環境が整いました。

MeCab を使ってみよう!!

では早速以下の文章が書かれたファイルを MeCab で解析してみましょう。
このとき、辞書ファイルは UTF8 で構成しましたので、テキストファイルも UTF8 (BOM無 ※2)で作成します。

[root@hogehoge ~]# cat chau.txt
 ちゃうちゃうちゃうんちゃう?

パッと見でどういう意味か解る方はなかなかの強者です(笑)標準語訳(?)だと、「(この犬、)チャウチャウとは違うのではないですか?」という意味です。
この文章を MeCab を使って解析 してみましょう。

[root@hogehoge ~]# mecab chau.txt -o chau-result.txt

先ほどの chau.txt を読み込み、結果を chau-result.txt へ出力しました。

[root@hogehoge ~]# cat chau-result.txt
 ち      動詞,自立,*,*,五段・ラ行,体言接続特殊2,ちる,チ,チ
 ゃうちゃうちゃうんちゃう        名詞,一般,*,*,*,*,*
 ?      記号,一般,*,*,*,*,?,?,?
 EOS

ちょっとわかりにくいですが、解析結果の一番左列の文字が形態素に分割された結果です。でも全く意味がわかりません(笑)。
では、ちょっと原文を修正してみます。

[root@hogehoge ~]# cat chau2.txt
 チャウチャウちゃうんちゃう?
 [root@hogehoge ~]# mecab chau2.txt -o chau-result2.txt
 [root@hogehoge ~]# cat chau-result2.txt
 チャウチャウ    名詞,一般,*,*,*,*,*
 ちゃう  動詞,自立,*,*,五段・ワ行促音便,基本形,ちゃう,チャウ,チャウ
 ん      名詞,非自立,一般,*,*,*,ん,ン,ン
 ちゃう  動詞,自立,*,*,五段・ワ行促音便,基本形,ちゃう,チャウ,チャウ
 ?      記号,一般,*,*,*,*,?,?,?
 EOS

当然のように思えますが、今度は想定した文字列に分解できたようです。品詞の認識は微妙ですが・・・

※2 BOM (Byte Order Mark:バイト順マーク)
→ ファイルの文字コードがUTF-8であることを明示するために付ける3バイトの文字コード。

さいごに ~ これからどうする?

これじゃ、入力する文章をいちいち修正しなくちゃ使い物にならないじゃないか!と思われるかもしれませんが、原文を修正するのではなく、切り出した形態素の解釈を補正・補足する方法 がいろいろあります。

また、形態素解析は日本語処理を行う上での第一段階となっていると申し上げましたが、次の段階として 「構文解析」、「意味解析」、「文脈解析」などのステップがあり、その先には 人工知能(AI) への応用が期待されています。
(参考:人工知能って何? – (社)人工知能学会)

次回はそのあたりの手法を探ってみようと思います。

ではまた!

記事は、予告なく変更または削除される場合があります。
記載された情報は、執筆・公開された時点のものであり、予告なく変更されている場合があります。
また、社名、製品名、サービス名などは、各社の商標または登録商標の場合があります。