Raspberry Pi で形態素解析をやってみる(前編)
前回のエントリーで野望に一歩近づきました。
しかし、完成はしていません。完成させなければ意味がない! 前回ではテキストデータを与えて音声として読み上げることはできているので、 あとはテキストから特定の語尾をみつけて、変換する処理が必要になります。
一般にいう「ですます調」の文章を「である調」に変換するようなものです。 ググってみればわかりますが、スギちゃん語コンバータやみさくら語コンバータなどもあるようです。
これと同じ処理をすればいいのですが、手っ取り早くやるなら変換パターンを見つけてstringのReplace処理すればいいのかなとも思えます。
しかし、パターンが多くなると処理が泥臭くなるので、これは避けて通りたいところです。また、途中に同じかなを使用すると誤変換(置換のほうが正しい?)が多くなってしまうので、これを予防するのも面倒に感じます。
ということで、単純な処理ではなく形態素解析を使用して文章の品詞を解析し、その結果をつかって語尾変換をする方法をとることにしました。
形態素解析とは?
形態素解析(けいたいそかいせき、Morphological Analysis)とは、文法的な情報の注記の無い自然言語のテキストデータ(文)から、対象言語の文法や、辞書と呼ばれる単語の品詞等の情報にもとづき、形態素(Morpheme, おおまかにいえば、言語で意味を持つ最小単位)の列に分割し、それぞれの形態素の品詞等を判別する作業である。 自然言語処理の分野における主要なテーマのひとつであり、機械翻訳やかな漢字変換など応用も多い(もちろん、かな漢字変換の場合は入力が通常の文と異なり全てひらがなであるため、その内容も機械翻訳の場合とは異なったものになる)。
ということらしいです。
噛み砕くと自分のようにせっかちな人間からすると、文章に出てくる言葉を品詞に分けたり、分かち書き、ひらがな化などができる処理といってもいいのかなと思います。
自分は古い人間なので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という形態素解析エンジンの出力形式と互換があるものになります。
他にも
があるようです。
ちなみに、pythonから使用しなくてもコマンドを打つことで連続して形態素解析をやってくれるのでそれだけでも楽しいです。
~ $ mecab すもももももももものうち すもも 名詞,一般,*,*,*,*,すもも,スモモ,スモモ も 助詞,係助詞,*,*,*,*,も,モ,モ もも 名詞,一般,*,*,*,*,もも,モモ,モモ も 助詞,係助詞,*,*,*,*,も,モ,モ もも 名詞,一般,*,*,*,*,もも,モモ,モモ の 助詞,連体化,*,*,*,*,の,ノ,ノ うち 名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ EOS この先生きのこる この 連体詞,*,*,*,*,*,この,コノ,コノ 先 名詞,一般,*,*,*,*,先,サキ,サキ 生き 動詞,自立,*,*,一段,連用形,生きる,イキ,イキ のこる 動詞,自立,*,*,五段・ラ行,基本形,のこる,ノコル,ノコル EOS
ホント素晴らしい!
語尾を変換する
といきたいのですが、長くなりそうなので後編に続きます。