Python3 + Mecab で形態素解析してみた


1. はじめに

今回は、Python3Mecab を使用して、簡単な形態素解析を実行する方法をまとめます。
※ ここでは Mac PCで実行しています。

2. 準備

形態素解析を実行するにあたって、
Python3 と Mecab・辞書、mecab-python3 パッケージ を導入します。

2-1. Python3 導入

Mac PCへの Python3 導入は、以下リンク先の記事をご参照ください。

・Qiita:Mac PC へのPython3 導入手順
https://qiita.com/Haruka-Ogawa/items/b1bf5ad9b28d44702a64

2-2. Mecab・辞書 導入

Mac PCへの Mecab・辞書の導入は、以下リンク先の記事をご参照ください。

・Qiita:RMeCabで形態素解析してみた > [2-2. MeCab 準備]
https://qiita.com/Haruka-Ogawa/items/64efefa861a49eaa4e71#2-2-mecab-%E6%BA%96%E5%82%99

使用する辞書の指定方法は、以下リンク先の記事をご参照ください。

・Qiita:MeCab システム辞書 指定方法
https://qiita.com/Haruka-Ogawa/items/f261b8b03320f2fba9f2

今回はIPA辞書 をデフォルトに指定して 使用します。

$ mecab -D
filename:   /usr/local/lib/mecab/dic/ipadic/sys.dic
version:    102
charset:    utf8
type:   0
size:   392126
left size:  1316
right size: 1316

2-3. mecab-python3 導入

MeCabをPythonで使用するために、
mecab-python3 パッケージを導入します。

① Python3 に切り替え

mecab-python3 パッケージをインストールする前に、
使用するバージョンがPython2 から Python3 に切り替えておきます。

  • グローバルで変更する場合

グローバルで Python 3.9.1 に変更する場合、以下コマンドを実行します。

pyenv global 3.9.1
  • ローカルで変更する場合

ローカルでPython 3.9.1 に変更する場合、以下コマンドを実行します。

pyenv local 3.9.1
  • 確認

Python3に切り替えられていることを確認します。
実行例は以下の通りです。

$ python -V
Python 3.9.1

② インストール

pipコマンド で mecab-python3 パッケージをインストールします。

コマンドは以下の通りです。

pip install mecab-python3

インストールが完了したら、
pip list コマンドを実行して インストール済みパッケージ一覧を確認します。

実行例は以下の通りです。

$ pip list
Package       Version
------------- -------
mecab-python3 1.0.3
pip           21.0.1
setuptools    49.2.1

mecab-python3 のv1.0.3 がインストールされたことがわかります。

3. 実行

Python3・Mecab を使用して、簡単な形態素解析を実行します。

3-1. 基本

Mecab の出力フォーマットは 様々ありますが、
まずは 何も指定せず デフォルトのフォーマットで 結果を表示させてみます。

・コーディング

テキスト“すもももももももものうち” を形態素解析して、
デフォルトの出力フォーマットで 結果を表示する処理を記述します。

mecab0.py
import MeCab

tagger = MeCab.Tagger()
print(tagger.parse("すもももももももものうち").split())

・実行

実行例は以下の通りです。

$ python mecab0.py 
['すもも', '名詞,一般,*,*,*,*,すもも,スモモ,スモモ', 'も', '助詞,係助詞,*,*,*,*,も,モ,モ', 'もも', '名詞,一般,*,*,*,*,もも,モモ,モモ', 'も', '助詞,係助詞,*,*,*,*,も,モ,モ', 'もも', '名詞,一般,*,*,*,*,もも,モモ,モモ', 'の', '助詞,連体化,*,*,*,*,の,ノ,ノ', 'うち', '名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ', 'EOS']

形態素の表層形, 品詞, 品詞細分類1, 品詞細分類2, 品詞細分類3, 活用型, 活用形, 原形, 読み,発音
結果として返されることを確認できました。

3-2. わかち書き

出力フォーマットを指定して、わかち書きにして 結果を表示させます。

・コーディング

テキスト“すもももももももものうち” を わかち書きにして、結果を返す処理を記述します。
出力フォーマットは “-Owakati” を指定します。

mecab_wakati.py
import MeCab

tagger = MeCab.Tagger("-Owakati")
print(tagger.parse("すもももももももものうち").split())

・実行

実行例は以下の通りです。

$ python mecab_wakati.py 
['すもも', 'も', 'もも', 'も', 'もも', 'の', 'うち']

3-3. その他

ここでは分かち書き(-Owakati) 以外の 出力フォーマットを使用してみます。

・出力フォーマット確認

辞書の出力フォーマットは dicrc ファイルに定義されています。
IPA辞書の出力フォーマットを /usr/local/lib/mecab/dic/ipadic/dicrc で確認すると、以下の通りになっています。

$ cat /usr/local/lib/mecab/dic/ipadic/dicrc 
;
; Configuration file of IPADIC
;
; $Id: dicrc,v 1.4 2006/04/08 06:41:36 taku-ku Exp $;
;
cost-factor = 800
bos-feature = BOS/EOS,*,*,*,*,*,*,*,*
eval-size = 8
unk-eval-size = 4
config-charset = EUC-JP

; yomi
node-format-yomi = %pS%f[7]
unk-format-yomi = %M
eos-format-yomi  = \n

; simple
node-format-simple = %m\t%F-[0,1,2,3]\n
eos-format-simple  = EOS\n

; ChaSen
node-format-chasen = %m\t%f[7]\t%f[6]\t%F-[0,1,2,3]\t%f[4]\t%f[5]\n
unk-format-chasen  = %m\t%m\t%m\t%F-[0,1,2,3]\t\t\n
eos-format-chasen  = EOS\n

これらの出力フォーマットは、ユーザーで設定することも可能です。
https://taku910.github.io/mecab/format.html

・コーディング・実行

  • 読み(yomi)

出力フォーマット yomi を使用すると、入力したテキストの読みが返されます。

テキスト”スモモも桃も桃のうち” の読みを表示させます。
出力フォーマットは “-Oyomi” を指定します。

ファイル名は mecab_yomi.pyとします。

mecab_yomi.py
import MeCab

tagger = MeCab.Tagger("-Oyomi")
print(tagger.parse("スモモも桃も桃のうち").split())

実行例は以下の通りです。

$ python mecab_yomi.py 
['スモモモモモモモモノウチ']
  • simple

出力フォーマット simple を使用すると、形態素と それぞれの素性が返されます。

テキスト”すもももももももものうち” の形態素と素性を表示させます。
出力フォーマットは “-Osimple” を指定します。

ファイル名は mecab_simple.pyとします。

mecab_simple.py
import MeCab

tagger = MeCab.Tagger("-Osimple")
print(tagger.parse("すもももももももものうち").split())

実行例は以下の通りです。

$ python mecab_simple.py 
['すもも', '名詞-一般', 'も', '助詞-係助詞', 'もも', '名詞-一般', 'も', '助詞-係助詞', 'もも', '名詞-一般', 'の', '助詞-連体化', 'うち', '名詞-非自立-副詞可能', 'EOS']
  • Chasen

出力フォーマット Chasen を使用すると、
1列目に 形態素の表層文字列、2列目に読み、3列目に形態素の基本形、第4列に素性 が返されます。

テキスト”すもももももももものうち”形態素の 表層文字列読み基本形素性 を表示させます。
出力フォーマットは “-Ochasen” を指定します。

ファイル名は mecab_chasen.pyとします。

mecab_chasen.py
import MeCab

tagger = MeCab.Tagger("-Ochasen")
print(tagger.parse("すもももももももものうち").split())

実行例は以下の通りです。

$ python mecab_chasen.py 
['すもも', 'スモモ', 'すもも', '名詞-一般', 'も', 'モ', 'も', '助詞-係助詞', 'もも', 'モモ', 'もも', '名詞-一般', 'も', 'モ', 'も', '助詞-係助詞', 'もも', 'モモ', 'もも', '名詞-一般', 'の', 'ノ', 'の', '助詞-連体化', 'うち', 'ウチ', 'うち', '名詞-非自立-副詞可能', 'EOS']

4. おわりに

今回は Python3Mecab を使用して、簡単な形態素解析を実行してみました。

出力フォーマットは、使用するシステム辞書によって 設定(/usr/local/lib/mecab/dic/ipadic/dicrc )が異なりますが、
デフォルトの出力や、わかち書き出力 (-Owakati) は どのシステム辞書でも使用できるようです。

・出力フォーマット
https://taku910.github.io/mecab/format.html

また、設定(/usr/local/lib/mecab/dic/ipadic/dicrc )を変更すれば、
出力フォーマット をカスタマイズすることも できそうです。

参考情報

・GitHub:SamuraiT/mecab-python3
https://github.com/SamuraiT/mecab-python3

・MeCab: Yet Another Part-of-Speech and Morphological Analyzer
https://taku910.github.io/mecab/