Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

日本語形態素解析とは

形態素とは意味を持つ最小の言語単位であり、形態素解析とは与えられた文を形態素単位に区切り、各形態素に品詞などの情報を付与する処理である。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によって得られたテキストデータをベクトルに変換してみます。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away