2011年01月06日

GoSen と Aquestalk2 を使って日本語をしゃべる Android アプリを作ってみた。

今年もよろしくお願いします。
さて、年末に作り始めたAndroidアプリを公開します。
仮公開先:[nihongoyomiagetest.apk]
(2011.01.09 19:20 数字・アルファベットに対応)
(2011.01.07 01:40 速度の情報が保存されない不具合修正)
(2011.01.07 01:12 再生ボタンの不具合修正)

まだテスト中ですので、不具合があるかもしれません。そのときは速やかにアンインストールしてください。

Aquestalk2の音声で日本語を読みます。
通常、Aquestalk2 は仮名文字しか読めませんが、GoSenを使って日本語の形態素解析をし、漢字仮名交じり文の読みを推定しています。機能そのものは入力されたテキストをただ変換し読み上げるだけのシンプルなものです。


辞書はとても巨大なので本体には同梱していません(50MB)。SDカード上に後述する専用のフォルダを作って、その中に配置してください。もしくは、このアプリのメニューに入れてあるネット上からダウンロードしてインストールする機能を使ってもよいです。ですが、スリープさせずに実行させて1時間近くかかってしまいます。スリープさせながらだと2時間以上かかります(IS03にて)。

そういうわけで、Java のプログラムに慣れた人ならば、辞書のインストールはパソコンでコンパイルした後SDカードにコピーしたほうが簡単です。パソコンでのコンパイルは1分ほどで終わります。そのかわり、ちょっと準備が必要です。

パソコンで辞書を作成するには、JDKantがインストールされている必要があります。そして GoSen のソースコードも必要です。GoSen のソースコードは svn を使って、https://itadaki.svn.sourceforge.net/svnroot/itadaki/GoSen からダウンロードしてください。
まず、ant を使って、GoSen をコンパイルします。その後、testdata/dictionary フォルダで、ant を実行すると、ipadic-2.6.0 の辞書データがコンパイルされます。GoSen は Sen よりは新しいですが、それでもやはり古いプログラムなので 2.6.2 以降のipadic 辞書にはそのままでは対応できません。今回のアプリで利用している jarでは、この対策を施していますが、パソコンで使うときの対策は次回詳しく説明します。
参考:GoSenのちょっとした改良

コンパイルが終われば辞書をSDカードに移します。Android本体をケーブルで繋ぐ方法でも、SDカードを外してパソコンに差す方法でも、 DropBox などパソコンからAndroid内にファイルを転送できるソフトやファイルマネージャーアプリを駆使する方法でもかません。SDカードの所定の場所(/sdcard/GoSen/ipadic-xxxxx/)にコピーしてください。/sdcard/GoSen/内に ipadic で始まるフォルダを見つけると、その中に ipadic の辞書データが入っていると判断するようにしています。

パソコンでコンパイルした場合、dictionary フォルダにはいくつかのファイルができていますが、コピーするのは dictionary.xml、connectionCost.sen、partOfSpeech.sen、token.sen、trie.sen の5つです。将来、辞書の再構築が Android 内でできるようになったらさらに二つのcsvファイルも必要になりますが、今はいりません。

JDK や ant の環境構築はプログラミングをやったことがない人にはハードルの高いものです。SDカードへのコピーも難しいかもしれません。そういう方はこのアプリで辞書をコンパイルしてください。時間はとってもかかってしまいますが。細かいことは何もせずにすみます。なお変換途中で終了すると、次回インストールでは展開するところからやり直します。



この GoSen の辞書は一度入れてしまえば、他のアプリからでも利用できます。今回作ったソフトの辞書関連のクラスを独立させて、辞書管理のアプリを別に作ってみようと思っています。単語を追加して、辞書を構築しなおすたびに一時間かかるような今の状況では使い物にはなりませんが。


今回公開するアプリにはアクエスト社のAndroid向けAquesTalk2ライブラリ、および音声Phontファイルが含まれています。このAquesTalk2ライブラリは非営利の個人利用に限り無償で使用できます。それ以外のご利用の場合はライセンスの購入が必要です。また、AquesTalk2ライブラリ単体での再配布はできません。


posted by takayan at 03:10 | Comment(2) | TrackBack(0) | Android | このブログの読者になる | 更新情報をチェックする

2011年01月27日

GoSenのちょっとした改良

遅くなりましたが、書いておきます。
Sen/GoSen は ChaSen用の ipadic 辞書を変換して使うのですが、ipadicのバージョン2.6.2以降には対応していません。

対応できない原因は何かというと、ChaSen向けのipadicは2.6.2以降から連接表であるconnect.cha内において「その他の語形」を表す連接規則が書かれなくなっているからです。そのため辞書コンパイル中にレアな語形が出てくると対応しきれずにエラーが出てしまいます。Senの場合はエラーメッセージを出しながら処理は続きます。GoSenの場合はエラーが出たらそこで終わりになります。

そのため今回単純な修正をしています。連接表にない語形の組み合わせが出てきたときには、コスト配列から値を読み込まずに、省略時の値を代入することにしています。この修正が望み通りの日本語を作り出せるかどうか不安ですが、とりあえず問題はないようです。

この修正を加えてもGoSenではまた別の問題が出てきます。メタ文字としても使われる「,」と「{」の解釈です。このような記号も2.6.2以降では辞書に登録されているので、辞書を変換するとき不具合が発生します。ChaSen向けのデータをMeCab向けのデータに変換するとき、単語の区切り記号として「,」が使われるのですが、この解析に問題があります。これを回避する処理が必要になります。「{」に対しても特別な処理が必要になります。

これらの修正を加えたソースを以下に置いておきます。前回のAndorid向けのGoSenで利用する辞書をパソコンで作成するときに使ってみてください。
ダウンロード:gosen-t001.zip

辞書の作り方ですが、antが実行できる環境を作り、エクスプローラで展開したフォルダで開き、その中でシフトを押しながら右クリックをしてコンテクストメニューを開き、メニューからコマンドウィンドウを開いて、antと入力してエンターをします。そのあと、エクスプローラでtestdata/dictionaryフォルダを開き、その中でコマンドウィンドウを開いて、antと入力してエンターをすると、辞書のダウンロードとコンパイルが始まります。なおbuild.xml中のipadic.versionプロパティの値を書き換えると、2.6.0以外の辞書もコンパイルできます。


ここまで書いてきましたが、以下のリンクにGoSenの別の修正についての記事があります。先のAndroid用の辞書作成に使わないのであれば、NAIST 辞書が使えるこちらのほうを使ったほうがいいかもしれません。

GAE/J で GoSen を動かして形態素解析

Google App Engine Java で形態素解析器の比較


Sen(GoSen)はChaSen用の辞書をコンパイルして専用辞書を作っていた頃のMeCabを元にして移植されています。したがってそれ以降改良されてきた現行のMeCabと比べるとどうしても見劣りしてしまいます。今回のその他の語形への対処も現行のMeCabが使っているMeCab専用辞書では細かなコストの設定がされているようで精度に違いが出てくるはずです。新しいJava用の形態素解析器が必要だと思います。

IgoGomokuには期待しています。


posted by takayan at 01:13 | Comment(0) | TrackBack(0) | プログラミング | このブログの読者になる | 更新情報をチェックする

2011年01月29日

「プリマヴェーラ」のこと

ボッティチェリの「プリマヴェーラ」のことをいろいろ調べて書いていたのはもう2年も前になります。門外漢なのでアビ・ヴァールブルクのことも知らないままに書き始めてしまいました。好奇心をとてもくすぐる題材のようで、英語はもちろん、ラテン語、古典ギリシア語、イタリア語といった言語の壁も物ともせず、何の苦も感じずに調べに調べて書いていました。今読み返してみても自分でも信じられないくらいの探求心です。

この絵に描かれている神々が誰かを知りたいだけで、いつ描かれたのか、誰に似せて描かれたのか、何のために描かれたのかというのはそれほど興味がありません。全然ないと言うと嘘になりますが、ここにこうして描かれている神々がそれらの情報によって解釈が変わってくるわけがないと考えています。この前提に立ってこの絵を解釈しました。

二年経ち、自分の考えに対しての固執も適度に消えかかってきているので、冷静に自分の考えを検証してみようと思います。



posted by takayan at 02:03 | Comment(2) | TrackBack(0) | プリマヴェーラ | このブログの読者になる | 更新情報をチェックする
×

この広告は90日以上新しい記事の投稿がないブログに表示されております。