1. はじめに
今回は、Python3・Mecab を使用して、簡単な形態素解析を実行する方法をまとめます。
※ ここでは 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 の出力フォーマットは 様々ありますが、
まずは 何も指定せず デフォルトのフォーマットで 結果を表示させてみます。
・コーディング
テキスト*“すもももももももものうち”* を形態素解析して、
デフォルトの出力フォーマットで 結果を表示する処理を記述します。
import MeCab
tagger = MeCab.Tagger()
print(tagger.parse("すもももももももものうち").split())
・実行
実行例は以下の通りです。
$ python mecab0.py
['すもも', '名詞,一般,*,*,*,*,すもも,スモモ,スモモ', 'も', '助詞,係助詞,*,*,*,*,も,モ,モ', 'もも', '名詞,一般,*,*,*,*,もも,モモ,モモ', 'も', '助詞,係助詞,*,*,*,*,も,モ,モ', 'もも', '名詞,一般,*,*,*,*,もも,モモ,モモ', 'の', '助詞,連体化,*,*,*,*,の,ノ,ノ', 'うち', '名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ', 'EOS']
形態素の表層形, 品詞, 品詞細分類1, 品詞細分類2, 品詞細分類3, 活用型, 活用形, 原形, 読み,発音が
結果として返されることを確認できました。
3-2. わかち書き
出力フォーマットを指定して、わかち書きにして 結果を表示させます。
・コーディング
テキスト*“すもももももももものうち”* を わかち書きにして、結果を返す処理を記述します。
出力フォーマットは “-Owakati” を指定します。
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とします。
import MeCab
tagger = MeCab.Tagger("-Oyomi")
print(tagger.parse("スモモも桃も桃のうち").split())
・実行
実行例は以下の通りです。
$ python mecab_yomi.py
['スモモモモモモモモノウチ']
- simple
出力フォーマット simple を使用すると、形態素と それぞれの素性が返されます。
テキスト”すもももももももものうち” の形態素と素性を表示させます。
出力フォーマットは “-Osimple” を指定します。
ファイル名は 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とします。
import MeCab
tagger = MeCab.Tagger("-Ochasen")
print(tagger.parse("すもももももももものうち").split())
実行例は以下の通りです。
$ python mecab_chasen.py
['すもも', 'スモモ', 'すもも', '名詞-一般', 'も', 'モ', 'も', '助詞-係助詞', 'もも', 'モモ', 'もも', '名詞-一般', 'も', 'モ', 'も', '助詞-係助詞', 'もも', 'モモ', 'もも', '名詞-一般', 'の', 'ノ', 'の', '助詞-連体化', 'うち', 'ウチ', 'うち', '名詞-非自立-副詞可能', 'EOS']
4. おわりに
今回は Python3・Mecab を使用して、簡単な形態素解析を実行してみました。
出力フォーマットは、使用するシステム辞書によって 設定(/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/