Python - MeCab で形態素解析!

Updated:


以前、 LMDE 2 上で Ruby を使って形態素解析 MeCab をする方法を紹介しました。

今回は Python で形態素解析 MeCab を使用してみましたので、その記録です。

0. 前提条件

  • LMDE 3 (Linux Mint Debian Edition 3; 64bit) での作業を想定。(Ubuntu, Debian でも同様)
  • ソースをビルドしてインストールした Python 3.7.0 での作業を想定。
  • RAM 容量が充分にあること。(最低:1.5GB, 推奨:5GB)
  • 辞書には、最近の語を網羅している mecab-ipadic-NEologd を使用する。
  • 当方、 Python は複数のバージョンの共存環境であり、 python3.7, pip3.7 で 3.7 系を使用するようにしている。(適宜、置き換えて考えること)

1. MeCab と辞書のインストール

MeCab と辞書(UTF-8)を Synaptic パッケージマネージャか apt-get 等でインストールする。
apt-get でインストールするなら以下のようにする。

$ sudo apt install mecab libmecab-dev mecab-ipadic-utf8
$ mecab -v
mecab of 0.996

MeCab 0.996 がインストールできている。

さらに、 mecab-ipadic-NEologd のインストールには git, make, curl, xz-utils, file も必要なので、未インストールならインストールしておく。

2. mecab-ipadic-neologd のインストール

Git リポジトリのクローン。

$ git clone --depth 1 git@github.com:neologd/mecab-ipadic-neologd.git

インストール。(途中、インストールするかどうか問われたら yes で応答する)

$ cd mecab-ipadic-neologd
$ ./bin/install-mecab-ipadic-neologd -n

インストールディレクトリの確認。(後述のテスト用 Python スクリプト内に設定するもの)

$ echo `mecab-config --dicdir`"/mecab-ipadic-neologd"
/usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd

その他、コマンドラインオプションの確認は、

$ ./bin/install-mecab-ipadic-neologd -h

3. MeCab 単体での動作確認

$ mecab
太郎はこの本を二郎を見た女性に渡した。
太郎    名詞,固有名詞,人名,名,*,*,太郎,タロウ,タロー,,
は      助詞,係助詞,*,*,*,*,は,ハ,ワ,,
この    連体詞,*,*,*,*,*,この,コノ,コノ,,
本      名詞,一般,*,*,*,*,本,ホン,ホン,,
を      助詞,格助詞,一般,*,*,*,を,ヲ,ヲ,,
二      名詞,数,*,*,*,*,二,ニ,ニ,,
郎      名詞,一般,*,*,*,*,郎,ロウ,ロー,,
を      助詞,格助詞,一般,*,*,*,を,ヲ,ヲ,,
見      動詞,自立,*,*,一段,連用形,見る,ミ,ミ,み/見,
た      助動詞,*,*,*,特殊・タ,基本形,た,タ,タ,,
女性    名詞,一般,*,*,*,*,女性,ジョセイ,ジョセイ,,
に      助詞,格助詞,一般,*,*,*,に,ニ,ニ,,
渡し    動詞,自立,*,*,五段・サ行,連用形,渡す,ワタシ,ワタシ,わたし/渡し,
た      助動詞,*,*,*,特殊・タ,基本形,た,タ,タ,,
。      記号,句点,*,*,*,*,。,。,。,,
EOS

4. mecab-python のインストール

$ sudo pip3.7 install mecab-python3

5. テスト用 Python スクリプトの作成

File: test_mecab.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#! /usr/local/bin/python3.7
"""
Test of MeCab library
"""
import sys
import traceback
import MeCab


class TestMecab:
    DIR_DIC  = "/usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd"
    SENTENCE = "太郎はこの本を二郎を見た女性に渡した。"

    def exec(self):
        try:
            t = MeCab.Tagger("-d " + self.DIR_DIC)
            #print(t.parse(self.SENTENCE))
            for c in t.parse(self.SENTENCE).splitlines()[:-1]:
                surface, feature = c.split('\t')
                print("{}\t{}".format(surface, feature))
        except Exception as e:
            raise

if __name__ == '__main__':
    try:
        obj = TestMecab()
        obj.exec()
    except Exception as e:
        traceback.print_exc()
        sys.exit(1)

6. テスト

作成した Python スクリプトを実行して動作を確認してみる。

まず、実行権限を付与。

$ chmod +x test_mecab.py

そして、実行。

$ ./test_mecab.py
太郎    名詞,固有名詞,人名,名,*,*,太郎,タロウ,タロー
は      助詞,係助詞,*,*,*,*,は,ハ,ワ
この    連体詞,*,*,*,*,*,この,コノ,コノ
本      名詞,一般,*,*,*,*,本,ホン,ホン
を      助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
二      名詞,数,*,*,*,*,二,ニ,ニ
郎      名詞,一般,*,*,*,*,郎,ロウ,ロー
を      助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
見      動詞,自立,*,*,一段,連用形,見る,ミ,ミ
た      助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
女性    名詞,一般,*,*,*,*,女性,ジョセイ,ジョセイ
に      助詞,格助詞,一般,*,*,*,に,ニ,ニ
渡し    動詞,自立,*,*,五段・サ行,連用形,渡す,ワタシ,ワタシ
た      助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
。      記号,句点,*,*,*,*,。,。,。

問題ないようだ。

ちなみに、出力フォーマットは以下の通り。

表層形\t品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用形,活用型,原形,読み,発音

※コスト(出現頻度)の取得方法は不明。(現時点)

7. 参考サイト


以上。





 

Sponsored Link

 

Comments