Nuco Advent Calendar 15日目の記事です。
#概要
Mecabはオープンソースの形態素解析エンジンです。
機械学習のための前準備として、日本語の文章を分かち書きにすることができます。
そうすることで、この単語の後にはこの単語がきやすいというパターンを学習することができます。
今回はUbuntu14.04にMecabをインストールし、形態素解析を行おうと思います。
#形態素解析とは
文法的な情報の注記の無い自然言語のテキストデータ(文)から、対象言語の文法や、辞書と呼ばれる単語の品詞等の情報にもとづき、形態素(Morpheme, おおまかにいえば、言語で意味を持つ最小単位)の列に分割し、それぞれの形態素の品詞等を判別する作業である。
#Mecabとは
日本語形態素解析システムです。
名称は開発者の好物「和布蕪(めかぶ)」から取られた。
めかぶってこう書くんだ。。。
#Mecabインストール
$ sudo apt-get install mecab libmecab-dev mecab-ipadic mecab-ipadic-utf8
mecab
コマンドで使用することができます。
「この世の中で一番贅沢な娯楽は、誰かを許すことだ。」という文章でテストしてみましょう。
$ mecab
この世の中で一番贅沢な娯楽は、誰かを許すことだ。
この 連体詞,*,*,*,*,*,この,コノ,コノ
世の中 名詞,一般,*,*,*,*,世の中,ヨノナカ,ヨノナカ
で 助詞,格助詞,一般,*,*,*,で,デ,デ
一番 名詞,副詞可能,*,*,*,*,一番,イチバン,イチバン
贅沢 名詞,形容動詞語幹,*,*,*,*,贅沢,ゼイタク,ゼイタク
な 助動詞,*,*,*,特殊・ダ,体言接続,だ,ナ,ナ
娯楽 名詞,一般,*,*,*,*,娯楽,ゴラク,ゴラク
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
、 記号,読点,*,*,*,*,、,、,、
誰 名詞,代名詞,一般,*,*,*,誰,ダレ,ダレ
か 助詞,副助詞/並立助詞/終助詞,*,*,*,*,か,カ,カ
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
許す 動詞,自立,*,*,五段・サ行,基本形,許す,ユルス,ユルス
こと 名詞,非自立,一般,*,*,*,こと,コト,コト
だ 助動詞,*,*,*,特殊・ダ,基本形,だ,ダ,ダ
。 記号,句点,*,*,*,*,。,。,。
EOS
#mecab-python3インストール
次にpythonで使用できるようにしましょう。
pip install mecab-python3
コンソールで試してみましょう。
$ python
Python 3.5.3 (default, Jun 5 2017, 06:11:58)
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import MeCab
>>> m = MeCab.Tagger()
>>> print(m.parse("この世の中で一番贅沢な娯楽は、誰かを許すことだ。"))
この 連体詞,*,*,*,*,*,この,コノ,コノ
世の中 名詞,一般,*,*,*,*,世の中,ヨノナカ,ヨノナカ
で 助詞,格助詞,一般,*,*,*,で,デ,デ
一番 名詞,副詞可能,*,*,*,*,一番,イチバン,イチバン
贅沢 名詞,形容動詞語幹,*,*,*,*,贅沢,ゼイタク,ゼイタク
な 助動詞,*,*,*,特殊・ダ,体言接続,だ,ナ,ナ
娯楽 名詞,一般,*,*,*,*,娯楽,ゴラク,ゴラク
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
、 記号,読点,*,*,*,*,、,、,、
誰 名詞,代名詞,一般,*,*,*,誰,ダレ,ダレ
か 助詞,副助詞/並立助詞/終助詞,*,*,*,*,か,カ,カ
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
許す 動詞,自立,*,*,五段・サ行,基本形,許す,ユルス,ユルス
こと 名詞,非自立,一般,*,*,*,こと,コト,コト
だ 助動詞,*,*,*,特殊・ダ,基本形,だ,ダ,ダ
。 記号,句点,*,*,*,*,。,。,。
EOS
>>>
わかち書きにするには、
MeCab.Tagger("-Owakati")
とします
$ python
Python 3.5.3 (default, Jun 5 2017, 06:11:58)
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import MeCab
>>> m = MeCab.Tagger("-Owakati")
>>> print(m.parse("この世の中で一番贅沢な娯楽は、誰かを許すことだ。"))
この 世の中 で 一番 贅沢 な 娯楽 は 、 誰 か を 許す こと だ
最後に形態素解析したものを配列に入れてみました。
import MeCab
def main():
text = "この世の中で一番贅沢な娯楽は、誰かを許すことだ。"
m = MeCab.Tagger()
l = m.parse(text).split('\n') #改行でスプリット
one_line = []
for e in l:
one_line.append(e.split('\t')[0]) #タブでスプリットして0番目を取得
ret = one_line[0:-2] #"EOS"と""を抜いたものを取得
print(ret)
if __name__ == '__main__':
main()
$ python morphological.py
['この', '世の中', 'で', '一番', '贅沢', 'な', '娯楽', 'は', '、', '誰', 'か', 'を', '許す', 'こと', 'だ', '。']
#まとめ
「mecab-ipadic-NEologd」という分かち書き辞書を取り入れることで、きちんと最近の単語にも反応できるようになるみたいですね。
今回は分かち書きされた単語を取り出しましたが、分かち書きした後の品詞だけほしいとか、カタカナだけ欲しいとか、色々な用途がありますね。
別途その他の機械学習の前処理といわれているものも触ってみたいと思います。