2013年8月4日日曜日

Googleの人口音声APIを使ってTwitterの自動つぶやきアプリを作ろうとして挫折した話

Googleは非公開の人口音声APIであるGoogle TTSがあります。

Google TTSについては、

あたりを見てみて下さい。
GETパラメータに読み上げさせたい文字列のクエリを送ることで読み上げてくれるというとてもシンプルな作りになっています。

読み上げといえば、Twitterのタイムラインですよね。
早速Twitterタイムラインを読み上げるプログラムをGAE for PHPで組んでみました。
いざ、読み上げる時に幾つか問題が発生しました。

1点目:日本語で英語を読み上げさせると1文字ずつアルファベットで読み上げてしまう。

2点目:文字列によって読みあげられないパターンが有る。(http://www.ffffine.net/blog/2011/05/google-tts%E3%81%A7twitter%E3%81%AEtl%E3%82%92%E8%AA%AD%E3%81%BF%E4%B8%8A%E3%81%92%E3%82%8B/でも触れられていますね。)

3点目:APIを短い時間にコールし過ぎると止められる。

まず1点目を解消するために、Yahooの日本語形態素解析API(http://developer.yahoo.co.jp/webapi/jlp/ma/v1/parse.html)をつかって、文章を区切って、全て英字だった場合には英語で読み上げさせるようにしました。

2点目はどうやら名詞で終わる場合は「埼玉。」のように句点をつけなければ読み上げが出来ないみたいだったり、逆に句点があると読みあげられなかったりと色々なパターンが有るようだ、ということがわかりました。
1週間ほど試行錯誤を繰り返してみて、通常の文章でエラーだったら最後に「。」を追加して再度読み上げにチャレンジ、それでもだめだったら「,」を最後に追加して読み上げにチャレンジ、ととりあえず自動的になんパターンかで読み上げるようにしてみました。
それでもまだ読み上げに失敗するケースが多く、結局これ以上やっても時間の無駄ということで諦めることにしました。
正式なAPIでないため、ドキュメントもなくその辺りを探るのはしんどいので。。。

3点目はSleepを埋め込むことで対応しました。本来であればSleepの秒数を(例えば)2〜10秒の間でランダムにするとかといったことでより人間的な動きに近づき、また読み上げ間隔も変わって面白いと思いますが、すでに2点目でこのプロジェクトに挫折したため、単純なSleepだけになっています。


もし読み上げさせに興味が有る方はGithubからforkなりしてみて下さい。

0 件のコメント:

コメントを投稿