LoginSignup
16
12

More than 1 year has passed since last update.

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

Last updated at Posted at 2021-04-06

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/

16
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
12