Python
自然言語処理
形態素解析
LIGDay 2

【準備編】Pythonで形態素解析を行う

More than 1 year has passed since last update.

こんにちは、ディレクターのJackです。
昨日の告知記事に引き続き、LIG Advent Calendar 2日目の記事を担当します!
https://qiita.com/advent-calendar/2017/lig

本日、明日でPythonで形態素解析を行うスクリプトを開発したいと思います。本日は準備編ということで、下記内容をお話できればと思います。

  • 形態素解析とは?
  • 必要ライブラリのインストールに関して
  • Pythonインタプリタでの実行

形態素解析とは?

はじめに、形態素解析について簡単に整理します。形態素解析とは、自然言語処理の分野のひとつで、自然言語によって構成された文章から、文法や単語の品詞等が登録された辞書データに基づき「形態素」に分割し、各形態素の品詞を判別することです。

自然言語って何それ?と思った方もいるかと思いますが、難しく考える必要はありません。普段我々が日常に利用している言語、そう英語や日本語のことを自然言語と呼びます。また、形態素とは、言語で意味を持つ最小単位となります。

形態素解析の例

さっそくですが、形態素解析の例を下記に記載します。言葉での説明よりも、実際にコマンドを叩いて結果を見た方が分かりやすいですよね。
今回は、みんな大好きなMeCabを利用したいと思います。

MeCabとは?

あまりに有名すぎて説明不要かもしれませんが、MeCabとは日本語形態素解析システムです。
詳細は、下記リンクに記載されています!

▼形態素解析システム MeCab
https://www.mlab.im.dendai.ac.jp/~yamada/ir/MorphologicalAnalyzer/MeCab.html

早速、試してみる

例えば、「LIG Advent Calendar 2日目です!」という文字列を形態素解析システムMeCabにかけると下記のような結果が出力されます。

% mecab
LIG Advent Calendar 2日目です!
LIG 名詞,固有名詞,組織,*,*,*,*
Advent  名詞,一般,*,*,*,*,*
Calendar    名詞,一般,*,*,*,*,*
2   名詞,数,*,*,*,*,*
日 名詞,接尾,助数詞,*,*,*,日,ニチ,ニチ
目 名詞,接尾,一般,*,*,*,目,メ,メ
です  助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
! 記号,一般,*,*,*,*,!,!,!
EOS

「LIG」という形態素は「名詞」と判別され、「です」という形態素は「助動詞」と判別されています。
さて、ここまでざっくりではありますが、形態素解析の簡単な説明をさせていただきました。
次に、Pythonで形態素解析を行う際に必要なライブラリのインストールを行いたいと思います。

必要ライブラリをインストールする

今回は、上述ではありまが、MeCabを利用して形態素解析を行いたいと思います。

MeCabをインストールする

brewを利用しインストールします。下記コマンドで簡単にインストールする事ができます。

% brew install mecab-ipadic

これで、mecab コマンドを利用できるようになりました。改めてコマンドを実行してみましょう。
「今日は良い天気ですね!」という文字列を入力してみます。

% mecab
今日は良い天気ですね!
今日  名詞,副詞可能,*,*,*,*,今日,キョウ,キョー
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
良い  形容詞,自立,*,*,形容詞・アウオ段,基本形,良い,ヨイ,ヨイ
天気  名詞,一般,*,*,*,*,天気,テンキ,テンキ
です  助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
ね 助詞,終助詞,*,*,*,*,ね,ネ,ネ
! 記号,一般,*,*,*,*,!,!,!
EOS

次に、PythonでMeCabを利用できるようにします。

mecab-python3をインストールする

mecab-python3 ですが、pipコマンドでインストールする事ができます。

% pip install mecab-python3

実際にPythonインタプリタ上でMeCabを実行してみましょう。

% python
Python 3.6.1 |Anaconda 4.4.0 (x86_64)| (default, May 11 2017, 13:04:09)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import MeCab
>>> m = MeCab.Tagger()
>>> text = "今日は良い天気ですね!"
>>> print(m.parse(text))
今日  名詞,副詞可能,*,*,*,*,今日,キョウ,キョー
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
良い  形容詞,自立,*,*,形容詞・アウオ段,基本形,良い,ヨイ,ヨイ
天気  名詞,一般,*,*,*,*,天気,テンキ,テンキ
です  助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
ね 助詞,終助詞,*,*,*,*,ね,ネ,ネ
! 記号,一般,*,*,*,*,!,!,!
EOS

>>>

text という変数に文字列「今日は良い天気ですね!」を代入し、形態素解析を実行したスクリプトを記載しました。
Pythonでも簡単にMeCabを実行する事ができました。

次回は、もう少し踏み込んで、LIGブログの特定記事の形態素解析を行ってみたいと思います。
2日目終了!それでは!