LoginSignup
11
14

More than 5 years have passed since last update.

Python3を使った日本語自然言語処理② MeCabによる形態素解析

Last updated at Posted at 2017-02-15

日本語形態素解析とは

形態素とは意味を持つ最小の言語単位であり、形態素解析とは与えられた文を形態素単位に区切り、各形態素に品詞などの情報を付与する処理である。Pythonによる日本語自然言語処理

つまり文章を単語に分割して、それぞれの単語について品詞を分類などを行うこと。日本語形態素解析はいくつかあるのですが、今回はMeCabというライブラリを使います。
Python形態素解析ライブラリ3つを徹底比較

MeCabのインストール(Mac)

Mecabは京都大学を中心に作成されているオープンソースの日本語形態素解析ライブラリです。Mecab公式サイト
基本的に公式のインストール手順に沿っていけば5分くらいでインストールが完了します。

公式からダウンロードしてくる必要があるもの

  • mecab-0.996.tar.gz(Mecab本体)
  • mecab-ipadic-2.7.0-20070801.tar.gz(辞書。これを使用して単語を拾っていくので、こちらも必須。ちなみにこの辞書は何種類かあります)

バージョンはその時々で変わるので公式から最新のものを持ってきてください。
あとはこのジップファイルがあるディレクトリに移動し、解凍、ターミナルで以下のコマンドを入力します。

$ tar zxfv mecab-0.996.tar.gz
$ cd mecab-0.996
$ ./ configure 
$ make
$ make check 
$ sudo make install 
$ tar zxfv mecab-ipadic-2.7.0-20070801.tar.gz
$ cd mecab-ipadic-2.7.0-20070801
$ ./ configure 
$ make
$ make check 
$ sudo make install 

これだけでmecabは使えるようになるので、試しにターミナルで遊んでみます。

$ mecab
私は犬が好き
私 名詞,代名詞,一般,*,*,*,私,ワタシ,ワタシ
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
犬 名詞,一般,*,*,*,*,犬,イヌ,イヌ
が 助詞,格助詞,一般,*,*,*,が,ガ,ガ
好き  名詞,形容動詞語幹,*,*,*,*,好き,スキ,スキ
EOS

ただこれだけではpythonで使えなため、python3のバインディングをインストールする必要があります。python3からpipでインストールできるので

pip install mecab-python3

とターミナルで入力すればオッケーです。

Python3でMeCab形態素解析を行うコードを書く

Mecabは先ほどのように単語を分割し、品詞を推定するparse()メソッドの他に、解析結果をノードの双方向連結リストとして受け取るparseToNode()メソッドも存在します。

mecab.py
import MeCab

def split_text_to_word(text):
    tagger = MeCab.Tagger("-Ochasen")
    tagger.parse('')
    text = text.replace(u" ", u" ")
    print(tagger.parse(text))

def split_text_to_node(text):
    tagger = MeCab.Tagger("-Ochasen")
    tagger.parse('')
    text = text.replace(u" ", u" ")
    node = tagger.parseToNode(text)
    while node:
        print("{0} : {1}".format(node.surface, node.feature))
        node = node.next

split_text_to_word("私は猫が好きです。")
split_text_to_node("私は猫が好きです。")

これを実行してみると、

$ python3 mecab.py
私 ワタシ   私 名詞-代名詞-一般
は ハ は 助詞-係助詞
猫 ネコ  猫 名詞-一般
が ガ が 助詞-格助詞-一般
好き  スキ  好き  名詞-形容動詞語幹
です  デス  です  助動詞   特殊・デス 基本形
。 。 。 記号-句点
EOS
 : BOS/EOS,*,*,*,*,*,*,*,*
私 : 名詞,代名詞,一般,*,*,*,私,ワタシ,ワタシ
は : 助詞,係助詞,*,*,*,*,は,ハ,ワ
猫 : 名詞,一般,*,*,*,*,猫,ネコ,ネコ
が : 助詞,格助詞,一般,*,*,*,が,ガ,ガ
好き : 名詞,形容動詞語幹,*,*,*,*,好き,スキ,スキ
です : 助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
。 : 記号,句点,*,*,*,*,。,。,。
 : BOS/EOS,*,*,*,*,*,*,*,*

実は文字コード周りでちょこっと細工しているのですがそれは割愛。
Python2で使うときはエンコード/デコードの点で少しやることが増えるので注意です。

次回はMecabによって得られたテキストデータをベクトルに変換してみます。

11
14
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
11
14