[Python]形態素解析ツールMeCabインストール

Python

形態素解析ツールのMeCabをPythonで動作させるところまで纏めました。
Linuxの場合とWindowsの場合で記載しています。
文字コード関連で何点かハマったので、その部分も書いておきます。

MeCabとは

MeCabはオープンソース形態素解析エンジンです。

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

何ができるのかというと「すもももももももものうち」といった日本語文章を品詞毎に分けて出力してくれます。

% mecab
すもももももももものうち
すもも  名詞,一般,*,*,*,*,すもも,スモモ,スモモ
も      助詞,係助詞,*,*,*,*,も,モ,モ
もも    名詞,一般,*,*,*,*,もも,モモ,モモ
も      助詞,係助詞,*,*,*,*,も,モ,モ
もも    名詞,一般,*,*,*,*,もも,モモ,モモ
の      助詞,連体化,*,*,*,*,の,ノ,ノ
うち    名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ
EOS

何が嬉しいのかというと、例えば、ある日本語記事の文章について、
その記事の特徴を掴む名詞を特定したい場合などに役立ちます。
応用すれば、Twitter記事を分析してトレンドとなる用語を分析してみたり、
ニュース記事を分析してみたり、色々なところで活用できそうです。

Linuxの場合

まずはLinuxでMeCabを動作させる手順を記載します。

MeCabインストール

ソースファイル(*.tar.gz)はこちらから入手できます。
MeCab本体(mecab-0.996.tar.gz)と、IPA辞書(mecab-ipadic-2.7.0-20070801.tar.gz)をダウンロードして、
ConoHa Wingのサーバ上にアップロードしてください。

ConoHa Wingでは当然のことながら、rootユーザは解放されていません。
このため、インストール先のディレクトリとして、ユーザ配下のディレクトリを指定する必要があります。

まずはMeCab本体(mecab-0.996.tar.gz)をインストールします。

$ tar fvzx mecab-0.996.tar.gz
$ cd mecab-0.996
$ ./configure --prefix=/home/<ユーザID>/.local --with-charset=utf8
$ make 
$ make check
$ make install

configure時の–prefixでインストール先ディレクトリを指定します。

–with-charset=utf8はMeCabで解析する文字コードとしてUTF-8を指定しています。
指定がないと、デフォルトでは文字コードがEUCになり、
ConoHa Wingでは見事に文字化けして正しく解析できませんでした。

次にIPA辞書(mecab-ipadic-2.7.0-20070801.tar.gz)をインストールします。

$ tar fvzx mecab-ipadic-2.7.0-20070801.tar.gz
$ cd mecab-ipadic-2.7.0-20070801
$ ./configure --prefix=/home/<ユーザID>/.local --with-charset=utf8
$ make 
$ make install

こちらもMeCab本体のインストール時と同様に–prefixおよび–with-charsetを指定します。

エラーなくインストールが完了すると /home/<ユーザID>/.local/bin/mecab が作成されますので、実行してみます。

$ cd /home/<ユーザID>/.local/bin
$ ./mecab
今日もいい天気ですね ※日本語の文章を入力してEnter
今日    名詞,副詞可能,*,*,*,*,今日,キョウ,キョー
も      助詞,係助詞,*,*,*,*,も,モ,モ
いい    形容詞,自立,*,*,形容詞・イイ,基本形,いい,イイ,イイ
天気    名詞,一般,*,*,*,*,天気,テンキ,テンキ
です    助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
ね      助詞,終助詞,*,*,*,*,ね,ネ,ネ
EOS
※Ctrl-Dで終了
$

きちんと解析できていることを確認できれば、MeCabのインストールは完了です。

mecab-python3インストール

PythonでMeCabを利用するためにライブラリをインストールします。

$ pip install --user mecab-python3
Collecting mecab-python3
  Downloading mecab_python3-1.0.4-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl (488 kB)
     |################################| 488 kB 45.8 MB/s 
Installing collected packages: mecab-python3
Successfully installed mecab-python3-1.0.4
$

「pip install –user mecab-python3」のみでインストールできます。
–userオプションを付けることで、ユーザディレクトリ配下にインストールされます。

PythonでMeCabを使ってみる

PythonからMeCabを使ってみるのですが、デフォルトだと「/usr/local/etc/mecabrc」がないと怒られるので、
環境変数MECABRCを指定しておきます。
また、Pythonの標準入出力のエンコーディングをUTF-8に指定するため、
環境変数PYTHONIOENCODINGも指定します。

$ export MECABRC=/home/<ユーザID>/.local/etc/mecabrc
$ export PYTHONIOENCODING=UTF-8

実際にPythonでコーディングしてみます。

$ python
Python 3.6.11 (default, Aug 11 2020, 06:48:17)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> str = 'すもももももももものうち'
>>> import MeCab
>>> mecab = MeCab.Tagger('-Ochasen')
>>> print(mecab.parse(str))
すもも  スモモ  すもも  名詞-一般
も      モ      も      助詞-係助詞
もも    モモ    もも    名詞-一般
も      モ      も      助詞-係助詞
もも    モモ    もも    名詞-一般
の      ノ      の      助詞-連体化
うち    ウチ    うち    名詞-非自立-副詞可能
EOS

>>>

ファイルから日本語を読み込んで分析させる場合、open時にencoding=’utf-8’を明示設定しないと
「UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xe3 in position 0: ordinal not in range(128)」
といったエラーで怒られました。

>>> f = open('jp.txt', 'r', encoding='utf-8')
>>> str = f.readline()[:-1]
>>> str
'すもももももももものうち'
>>>
>>> import MeCab
>>> mecab = MeCab.Tagger('-Ochasen')
>>> print(mecab.parse(str))
すもも  スモモ  すもも  名詞-一般
も      モ      も      助詞-係助詞
もも    モモ    もも    名詞-一般
も      モ      も      助詞-係助詞
もも    モモ    もも    名詞-一般
の      ノ      の      助詞-連体化
うち    ウチ    うち    名詞-非自立-副詞可能
EOS

>>>

これでPythonでMeCabを使えるようになりました。
実際にプログラムを組む場合は、環境変数の扱いを気にしないといけなそうですね。

Windowsの場合

WindowsでMeCabを動作させる手順を記載します。

パッケージのインストール

MeCabを動作させるために以下のパッケージをインストールします。

  • mecab-python3
  • ipadic

pip installコマンドで特に問題なくインストールできると思います。

> pip install mecab-python3
> pip install ipadic

PythonでMeCabを使ってみる

実際に動作確認してみます。
以下を実行することで、品詞に分類された単語を確認することができます。
一般的には形態素解析と呼びます。

>>> import MeCab
>>> import ipadic
>>> mecab = MeCab.Tagger(ipadic.MECAB_ARGS)
>>> print(mecab.parse("すもももももももものうち"))
すもも  名詞,一般,*,*,*,*,すもも,スモモ,スモモ
も      助詞,係助詞,*,*,*,*,も,モ,モ
もも    名詞,一般,*,*,*,*,もも,モモ,モモ
も      助詞,係助詞,*,*,*,*,も,モ,モ
もも    名詞,一般,*,*,*,*,もも,モモ,モモ
の      助詞,連体化,*,*,*,*,の,ノ,ノ
うち    名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ
EOS

>>>

まとめ

LinuxではMeCab本体をインストールするところから行っていますが、
Windowsの場合のように、Pythonのみで形態素解析をさせたいだけなら、
mecab-python3とipadicの2つのパッケージをインストールするだけで実現することができます。
こちらの方が手軽でいいですね。

コメント

  1. […] 【Python】形態素解析ツールMeCabインストール形態素解析ツールのMeCabをConoHa… […]

タイトルとURLをコピーしました