読者です 読者をやめる 読者になる 読者になる

Raspberry Pi で形態素解析をやってみる(前編)

Raspberry Pi形態素解析をやってみる(前編)

前回のエントリーで野望に一歩近づきました。

uepon.hatenadiary.com

しかし、完成はしていません。完成させなければ意味がない! 前回ではテキストデータを与えて音声として読み上げることはできているので、 あとはテキストから特定の語尾をみつけて、変換する処理が必要になります。

一般にいう「ですます調」の文章を「である調」に変換するようなものです。 ググってみればわかりますが、スギちゃん語コンバータやみさくら語コンバータなどもあるようです。

matome.naver.jp

これと同じ処理をすればいいのですが、手っ取り早くやるなら変換パターンを見つけてstringのReplace処理すればいいのかなとも思えます。

しかし、パターンが多くなると処理が泥臭くなるので、これは避けて通りたいところです。また、途中に同じかなを使用すると誤変換(置換のほうが正しい?)が多くなってしまうので、これを予防するのも面倒に感じます。

ということで、単純な処理ではなく形態素解析を使用して文章の品詞を解析し、その結果をつかって語尾変換をする方法をとることにしました。

形態素解析とは?

形態素解析Wikipediaさんの説明では

形態素解析(けいたいそかいせき、Morphological Analysis)とは、文法的な情報の注記の無い自然言語のテキストデータ(文)から、対象言語の文法や、辞書と呼ばれる単語の品詞等の情報にもとづき、形態素(Morpheme, おおまかにいえば、言語で意味を持つ最小単位)の列に分割し、それぞれの形態素の品詞等を判別する作業である。 自然言語処理の分野における主要なテーマのひとつであり、機械翻訳かな漢字変換など応用も多い(もちろん、かな漢字変換の場合は入力が通常の文と異なり全てひらがなであるため、その内容も機械翻訳の場合とは異なったものになる)。

形態素解析 - Wikipedia

ということらしいです。

噛み砕くと自分のようにせっかちな人間からすると、文章に出てくる言葉を品詞に分けたり、分かち書き、ひらがな化などができる処理といってもいいのかなと思います。

自分は古い人間なのでKAKASHI(KAKASI - Kanji Kana Simple Inverter)ぐらいしか知らなかった…

英語などと違って語句間にスペースが含まれない日本語ではこの解析はかなり大変に思えますが、最近は高速に行える形態素解析エンジンもフリーで存在しています。

その中に

MeCab(和布蕪)があります。

MeCab: Yet Another Part-of-Speech and Morphological Analyzer

以降はこのMeCabを使用してテキストの形態素解析を行ってみます。

MeCabのインストール

RaspberryPiでは以下のようにコマンドを打つと無事にインストールが完了します。

~ $ sudo apt-get install mecab libmecab-dev mecab-ipadic-utf8 python-mecab

公式ページにはtarの展開+configure+make+make installの記載がありますが、apt-getでうまくインストールできました。(Windowsには辞書データ付きのバイナリがあるようです。)

ちなみにライセンスは

MeCabフリーソフトウェアです.GPL(the GNU General Public License), LGPL(Lesser GNU General Public License), または BSD ライセンスに従って本ソフトウェアを使用,再配布することができます。

とのことです。

MeCabを使ってみる

せっかくインストールできたのでpythonからMeCabを使用してみます。 import MeCabでエラーがなければ問題ありません。

~ $ python
Python 2.7.9 (default, Mar  8 2015, 00:52:26)
[GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import MeCab
>>> import sys
>>> m = MeCab.Tagger("-Ochasen")

>>> print m.parse("今日はとても良い天気ですね。")
今日    キョウ  今日    名詞-副詞可能
は      ハ      は      助詞-係助詞
とても  トテモ  とても  副詞-助詞類接続
良い    ヨイ    良い    形容詞-自立     形容詞・アウオ段        基本形
天気    テンキ  天気    名詞-一般
です    デス    です    助動詞  特殊・デス      基本形
ね      ネ      ね      助詞-終助詞
。      。      。      記号-句点
EOS

>>> print m.parse("今日はとても良い天気ですぞえ")
今日    キョウ  今日    名詞-副詞可能
は      ハ      は      助詞-係助詞
とても  トテモ  とても  副詞-助詞類接続
良い    ヨイ    良い    形容詞-自立     形容詞・アウオ段        基本形
天気    テンキ  天気    名詞-一般
です    デス    です    助動詞  特殊・デス      基本形
ぞ      ゾ      ぞ      助詞-終助詞
え      エ      え      フィラー
EOS

てな具合で解析をしてくれます。便利すぎんだろJK。 というか

GoogleソフトウェアエンジニアでGoogle日本語入力開発者の一人である工藤拓によって開発されている。(Wikipediaより)

すげー。ありがたい話だ。

途中にあるm = MeCab.Tagger("-Ochasen")は解析形式のオプションでChaSenという形態素解析エンジンの出力形式と互換があるものになります。

chasen-legacy.osdn.jp

他にも

があるようです。

ちなみに、pythonから使用しなくてもコマンドを打つことで連続して形態素解析をやってくれるのでそれだけでも楽しいです。

~ $ mecab
すもももももももものうち
すもも  名詞,一般,*,*,*,*,すもも,スモモ,スモモ
も      助詞,係助詞,*,*,*,*,も,モ,モ
もも    名詞,一般,*,*,*,*,もも,モモ,モモ
も      助詞,係助詞,*,*,*,*,も,モ,モ
もも    名詞,一般,*,*,*,*,もも,モモ,モモ
の      助詞,連体化,*,*,*,*,の,ノ,ノ
うち    名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ
EOS

この先生きのこる
この    連体詞,*,*,*,*,*,この,コノ,コノ
先      名詞,一般,*,*,*,*,先,サキ,サキ
生き    動詞,自立,*,*,一段,連用形,生きる,イキ,イキ
のこる  動詞,自立,*,*,五段・ラ行,基本形,のこる,ノコル,ノコル
EOS

ホント素晴らしい!

語尾を変換する

といきたいのですが、長くなりそうなので後編に続きます。