python

MeCabをインストールしてPythonで動作させるまでの手順

はじめに

日本語による文章を解析してみたいと思い、色々調べたところMeCabという形態素解析エンジンがあることを知りました。自然言語処理自体に全く縁がありませんでしたが、手始めとしてMeCabをインストールして実際に動作させたのでその手順をメモします。

環境と前提

以下の環境と前提です。今回使用したOSは純粋なUbuntu18.04ですが、Windows Subsystem LinuxやVagrant上のUbuntuでも同じ手順で進められると思います。
なお、Pythonの実行環境はAnacondaを使用して構築済です。もしAnacondaでPython環境を構築していない場合は、UbuntuにAnacondaをインストールしてPythonとJupyter Notebookを動かすまでの手順を見てみてください。

  • OS : Ubuntu18.04
  • Pythonのバージョン:python3.5(Anaconda)

MeCabとは

MeCabはオープンソース形態素解析エンジンです。形態素解析とは、ある文章、フレーズなどを単語毎に分割したり各単語の品詞を判定したりする解析作業のことです。
文章の中にどのような単語が含まれておりその単語の品詞は何かを判定したり、どの単語が何回出現するかなどを解析できます。
形態素解析エンジンは、MeCabだけでなく他にもいくつかありますが、ここではおそらく一番情報が多いMeCabを使ってみます。
MeCab: Yet Another Part-of-Speech and Morphological Analyzer

できるようになること

この記事では、MeCabをインストールし、Pythonを使って適当な文章を与えて出現する単語に関する情報を表示するところまでの手順をメモします。
例えば、以下のような文章を与えます。

~/mecab今日の天気は晴れです。

これをMeCabによって以下のように単語毎に分割して品詞を表示します。

~/mecab今日    キョウ  今日    名詞-副詞可能
の      ノ      の      助詞-連体化
天気    テンキ  天気    名詞-一般
は      ハ      は      助詞-係助詞
晴れ    ハレ    晴れ    名詞-一般
です    デス    です    助動詞  特殊・デス      基本形
。      。      。      記号-句点

MeCabに必要なパッケージをインストールする

今回はMeCabをUbuntu18.04上にインストールします。MeCabが動作するために必要なパッケージをaptで事前にインストールしておきます。

~/mecab$ sudo apt-get install mecab mecab-ipadic-utf8 libmecab-dev swig

MeCabをインストールする

続いてpipコマンドでMeCabをインストールします。なお、MeCabの開発者様のWebサイトからソースをダウンロード、解凍してコンパイルすることでインストールも可能です。
なお、本来であればAnacondaのcondapipの両方を使ってパッケージをインストールすることは避けるべきですが、ここでは最悪環境が壊れても良い前提で手っ取り早くpipコマンドでインストールします。ちなみに運が良かったのか何度かこの記事の同様の手順を行っていますが、これまで特に問題が起きたことはまだないです。

ここではホームディレクトリ直下にmecabという名前の適当なディレクトリを作成し、そこで以下のコマンドを実行します。

~/mecab$ pip install mecab-python3

正常にインストールされると以下のように表示されます。

~/mecab$ pip install mecab-python3
Collecting mecab-python3
  Using cached https://files.pythonhosted.org/packages/ac/48/295efe525df40cbc2173748eb869290e81a57e835bc41f6d3834fc5dad5f/mecab-python3-0.996.1.tar.gz
Building wheels for collected packages: mecab-python3
  Running setup.py bdist_wheel for mecab-python3 ... done
  Stored in directory: /home/albion/.cache/pip/wheels/73/71/4f/63a79925b5e9bb38932043917cc60140beb8022ac14a952b1e
Successfully built mecab-python3
Installing collected packages: mecab-python3
Successfully installed mecab-python3-0.996.1

実際にmecabコマンドでバージョンを確認してみると、以下のように表示されると思います。

~/mecab$ mecab --version
mecab of 0.996

以上でMeCabのインストールは完了です。続いてPythonを使って動作確認を行います。

インストール中にエラーが表示される場合

インストールの際に私が遭遇したエラーを以下にメモしておきます。

IndexError: list index out of range

インストールを実行したところ、以下のようなエラーが表示されました。 

~/mecab$ pip install mecab-python3
Collecting mecab-python3
  Downloading https://files.pythonhosted.org/packages/ac/48/295efe525df40cbc2173748eb869290e81a57e835bc41f6d3834fc5dad5f/mecab-python3-0.996.1.tar.gz
    Complete output from command python setup.py egg_info:
    /bin/sh: 1: mecab-config: not found
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-install-cwk0px03/mecab-python3/setup.py", line 29, in <module>
        inc_dir  = mecab_config("--inc-dir")
      File "/tmp/pip-install-cwk0px03/mecab-python3/setup.py", line 27, in mecab_config
        return os.popen("mecab-config " + arg).readlines()[0].split()
    IndexError: list index out of range

これは前述した必要なパッケージ(mecab, mecab-ipadic-utf8, libmecab-dev, swig)がインストールされていない場合に出ました。
したがって、冒頭で述べたようにこれらのパッケージをaptコマンドでインストールします。その後改めてpip install mecab-python3を実行すると正常にインストールできました。

PythonからMeCabを使ってみる

実際に簡単なPythonのプログラムを作成してMeCabを使用してみます。以下にサンプルプログラムを載せます。ファイル名はmecab-test.pyとしました。

~/mecab/mecab-test.pyimport MeCab
mecab = MeCab.Tagger ("-Ochasen")
testwords = "今日の天気は晴れです。"
print(mecab.parse(testwords))

上記を実行してみると以下のように各単語と品詞が表示されます。

~/mecab$ python mecab-test.py
今日    キョウ  今日    名詞-副詞可能
の      ノ      の      助詞-連体化
天気    テンキ  天気    名詞-一般
は      ハ      は      助詞-係助詞
晴れ    ハレ    晴れ    名詞-一般
です    デス    です    助動詞  特殊・デス      基本形
。      。      。      記号-句点

どのような情報を出力するかを指定する出力フォーマットはMeCab.Tagger("-Ochasen")-Oオプションによって指定できます。
上記で-Oオプションの値として渡したchasenというのは、別の形態素解析であるChaSenの出力フォーマットのようです。
そして-Oに渡す値を変更することで出力フォーマットを変更できます。以下に別の3つのオプションをそれぞれ指定した場合の結果をメモします。 

wakatiオプション

wakatiはわかち書きを出力するためのオプションです。わかち書きとは、文章で語の区切りに空白を挟んで記述することです。
wakatiを指定すると(すなわち、前述したサンプルプログラムでmecab = MeCab.Tagger ("-Owakati")とする)、以下のような結果が得られます。

~/mecab$ python mecab-test.py
今日 の 天気 は 晴れ です 。

yomiオプション

yomiは読みを出力するためのオプションです。
yomiを指定すると(すなわち、前述したサンプルプログラムでmecab = MeCab.Tagger ("-Oyomi")とする)、以下のような結果が得られます。

~/mecab$ python mecab-test.py
キョウノテンキハハレデス。

dumpオプション

dumpは全ての情報を出力するためのオプションです。
dumpを指定すると(すなわち、前述したサンプルプログラムでmecab = MeCab.Tagger ("-Odump")とする)、以下のような結果が得られます。

~/mecab$ python mecab-test.py
0 BOS BOS/EOS,*,*,*,*,*,*,*,* 0 0 0 0 0 0 2 1 0.000000 0.000000 0.000000 0
7 今日 名詞,副詞可能,*,*,*,*,今日,キョウ,キョー 0 6 1314 1314 67 2 0 1 0.000000 0.000000 0.000000 3947
22 の 助詞,連体化,*,*,*,*,の,ノ,ノ 6 9 368 368 24 6 0 1 0.000000 0.000000 0.000000 5018
28 天気 名詞,一般,*,*,*,*,天気,テンキ,テンキ 9 15 1285 1285 38 2 0 1 0.000000 0.000000 0.000000 7161
34 は 助詞,係助詞,*,*,*,*,は,ハ,ワ 15 18 261 261 16 6 0 1 0.000000 0.000000 0.000000 7181
38 晴れ 名詞,一般,*,*,*,*,晴れ,ハレ,ハレ 18 24 1285 1285 38 2 0 1 0.000000 0.000000 0.000000 12805
55 です 助動詞,*,*,*,特殊・デス,基本形,です,デス,デス 24 30 460 460 25 6 0 1 0.000000 0.000000 0.000000 14118
63 。 記号,句点,*,*,*,*,。,。,。 30 33 8 8 7 3 0 1 0.000000 0.000000 0.000000 10728
65 EOS BOS/EOS,*,*,*,*,*,*,*,* 33 33 0 0 0 0 3 1 0.000000 0.000000 0.000000 9192

上記の結果がそれぞれ何を出力しているかは、以下のサイト様の「-O –output-format-type」部分に記載されていました。
MeCabのコマンドライン引数一覧とその実行例

まとめ

MeCabを使ってみることで形態素解析に触れることができ面白いです。MeCabを使って色々な文章を解析して遊ぶことができそうです。

SPONSORED LINK

コメントを残す

メールアドレスが公開されることはありません。