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をUbuntu18.04上にインストールします。MeCabが動作するために必要なパッケージをapt
で事前にインストールしておきます。
$ sudo apt-get install mecab mecab-ipadic-utf8 libmecab-dev swig
MeCabをインストールする
続いてpip
コマンドでMeCabをインストールします。なお、MeCabの開発者様のWebサイトからソースをダウンロード、解凍してコンパイルすることでインストールも可能です。
なお、本来であればAnacondaのconda
とpip
の両方を使ってパッケージをインストールすることは避けるべきですが、ここでは最悪環境が壊れても良い前提で手っ取り早くpip
コマンドでインストールします。ちなみに運が良かったのか何度かこの記事の同様の手順を行っていますが、これまで特に問題が起きたことはまだないです。
ここではホームディレクトリ直下にmecab
という名前の適当なディレクトリを作成し、そこで以下のコマンドを実行します。
$ pip install mecab-python3
正常にインストールされると以下のように表示されます。
$ 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 --version
mecab of 0.996
以上でMeCabのインストールは完了です。続いてPythonを使って動作確認を行います。
インストール中にエラーが表示される場合
インストールの際に私が遭遇したエラーを以下にメモしておきます。
IndexError: list index out of range
インストールを実行したところ、以下のようなエラーが表示されました。
$ 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 "", line 1, in
File "/tmp/pip-install-cwk0px03/mecab-python3/setup.py", line 29, in
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
としました。
import MeCab
mecab = MeCab.Tagger ("-Ochasen")
testwords = "今日の天気は晴れです。"
print(mecab.parse(testwords))
上記を実行してみると以下のように各単語と品詞が表示されます。
$ python mecab-test.py
今日 キョウ 今日 名詞-副詞可能
の ノ の 助詞-連体化
天気 テンキ 天気 名詞-一般
は ハ は 助詞-係助詞
晴れ ハレ 晴れ 名詞-一般
です デス です 助動詞 特殊・デス 基本形
。 。 。 記号-句点
どのような情報を出力するかを指定する出力フォーマットはMeCab.Tagger("-Ochasen")
の-O
オプションによって指定できます。
上記で-O
オプションの値として渡したchasen
というのは、別の形態素解析であるChaSen
の出力フォーマットのようです。
そして-O
に渡す値を変更することで出力フォーマットを変更できます。以下に別の3つのオプションをそれぞれ指定した場合の結果をメモします。
wakatiオプション
wakati
はわかち書きを出力するためのオプションです。わかち書きとは、文章で語の区切りに空白を挟んで記述することです。
wakati
を指定すると(すなわち、前述したサンプルプログラムでmecab = MeCab.Tagger ("-Owakati")
とする)、以下のような結果が得られます。
$ python mecab-test.py
今日 の 天気 は 晴れ です 。
yomiオプション
yomi
は読みを出力するためのオプションです。
yomi
を指定すると(すなわち、前述したサンプルプログラムでmecab = MeCab.Tagger ("-Oyomi")
とする)、以下のような結果が得られます。
$ python mecab-test.py
キョウノテンキハハレデス。
dumpオプション
dump
は全ての情報を出力するためのオプションです。
dump
を指定すると(すなわち、前述したサンプルプログラムでmecab = MeCab.Tagger ("-Odump")
とする)、以下のような結果が得られます。
$ 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を使って色々な文章を解析して遊ぶことができそうです。
関連記事
- 公開日:2019/06/03 更新日:2019/06/03
自然言語処理ライブラリのGiNZAを使って係り受け解析を試す
自然言語処理ライブラリのGiNZAを使って係り受け解析を行ってみたのでその手順をまとめます。指定した文章の係り受け木を作成して、単語間の修飾関係を可視化してみます。また、条件に合致する文章の検索、名詞節の抽出も行います。
- 公開日:2019/05/30 更新日:2019/05/30
News APIへの登録とPythonでニュースを取得するまでの手順
News APIは、いくつかのニュースサイトからトップニュースや条件指定して合致したニュースをJSON形式で取得できるAPIです。2019年5月時点では30,000ほどのニュースサイト等のソースに対応しています。この記事では、実際にNews APIを使用してニュースを取得するまでの手順をまとめます。
- 公開日:2019/04/15 更新日:2019/04/15
UbuntuにAnacondaをインストールしてPythonとJupyter Notebookを動かすまでの手順
AnacondaをUbuntuにインストールしました。Anacondaをインストールすることで、PythonとJupyter Notebookの環境が構築できます。ここではその手順をメモします。
- 公開日:2016/03/13 更新日:2016/03/13
vagrant上のUbuntuでTensor Flowを動かすまでの手順
Tensor FlowはGoogleが2015年11月にオープンソース化して公開した機械学習ライブラリです。少し興味を持ったのでまずはTensor Flowを動かすための環境として、vagrant上のubuntuにインストールして動作させてみました。その手順をメモします。