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. 参考サイト
以上。
Comments