明けましておめでとうございます
まあ今更ですが。
さて、この度私、はてなidを取り直しました。新しいidはid:MshrKatoとなります。今後、プログラミング関係の話題はそちらで扱っていく事とします。
それにともない、こちらのidでは非常に個人的などうでも良い事を記事にしていく方針となりました。
今後ともよろしくお願いします。
GAE/jからYahooAPIの形態素解析を利用してみた
概要
「形態素解析って何?」という方は、今ならウェールズ氏のどや顔も楽しめる、以下を参考にどうぞ。
形態素解析 - Wikipedia
さて、現在、twitterのbotをGAE/j上で作っている訳ですが、賢い応答をさせる為には文章の形態素解析を行う事が必要不可欠です。
しかし、問題はそれをどう行うかです。自分で書くには、言語学の勉強から始めないといけませんし、ライブラリを使おうにもGAE/jにアップするにはサイズが大きすぎます。(もっとも、自力でライブラリを分割された事例もありますが……*1)
何か他の方法は無いかと探しますと、実は有ります。それが、Yahoo!デベロッパーネットワークからWeb APIの形で提供されている、日本語形態素解析です。このサービスは、HTTPでリクエストを受け付け、XML形式で結果を返してくれます。
Yahoo!デベロッパーネットワーク - テキスト解析 - 日本語形態素解析
一方、GAE/jではHTTP又はHTTPSで外部サイトと通信できる、URL Fetch Java APIが提供されています。
The URL Fetch Java API - Google App Engine - Google Code
これらを組み合わせる事で、APIを通して別々のサービスが連携して働く、現代的なシステムが組めそうです。
そういう訳で今回、GAE/jからYahooAPIを呼び出し、返されたXMLを処理して必要な情報を取り出す所までを、実際にやってみました。
尚今回は、XMLの解析にJDOMを利用しました。こちらも、GAE/jで動かす場合にはほんの一手間必要となるので、合わせて記述します。
GAE/jでservletを定期的に実行して、twitterを検索
cron.xmlによる自動実行と直接実行の禁止
GAE/jを利用して、servletを定期的に実行する方法に関するメモ。
この際、自動実行対象が管理者以外に実行されない様にする事も可能。
詳しくは以下のGoogle公式ドキュメントで。
Java 用の cron を使用したスケジュール タスク - Google App Engine - Google Code
尚、上記公式ドキュメントを見る限り、cronジョブのアップロードには何か特別なコマンドを使う様だが、netBeans6.9.1+GAE pluginの環境*1では、特にそれを意識する必要は無かった。
searchAPIの回数制限とGAE
twitterの検索に関しては、以前の記事*2を参照。
twitterのsearchAPIはアクセス元IPアドレスでRateLimitを判定する。しかしどうやら、GAE/jからこれを実行する場合、全てのユーザが同一IPを使用する事になるらしい。結果として、かなり高い頻度でRateLimitオーバーが起こる*3。
一応、twitter側もこの問題は認識しているようで、アクセス可能回数を問い合わせると、一時間あたり20000回という非常に大きな結果が得られる。それでもやはり、RateLimitオーバーは避けられない。
現在製作中のtwitter botアプリケーションでは、検索結果はそれほど重要視していない為、このまま運用していく事とした。