RubyでYahoo! Web APIを使う
日々ついったったーを全裸にひんむいている「全裸bot」は、Yahoo! Web APIの日本語係り受け解析を使ってtweetをzenrailzeしている。先日血を分けた弟とも言える「北海道bot」も誕生し、日本語解析ブームはいまや最高潮と言えるだろう(私の周囲で)。
私もうらやましくて参戦の機会をうかがっていたのだが、ちょっとしたアイデアが浮かんだので手を動かしてみることにした。まずはモノを作る前の準備段階をメモしておくことにする。
準備
アプリケーションIDの取得
「Yahoo!デベロッパーネットワーク」から「アプリケーションIDの登録」をクリックして、あとは手順に従うだけ。Yahoo! JAPAN IDは事前に用意しておこう。無料のもので(たぶん)大丈夫。
RubyでHTTP Request
Rubyでは標準ライブラリがHTTP通信をラップしてくれているのでわりと簡単。
yahoo_api.rb
# -*- coding: utf-8 -*- require 'net/http' require 'cgi' class YahooApi
# Yahooに払い出されたアプリケーションID APPLICATION_ID = '****************************************************************' REQUEST_HOST = 'jlp.yahooapis.jp' API_PATH = '/DAService/V1/parse' attr_accessor :sentence def request
http = Net::HTTP.new(REQUEST_HOST,80)
query = "?appid=#{APPLICATION_ID}&sentence=#{CGI.escape(sentence)}" req = Net::HTTP::Get.new(API_PATH + query) res = http.request(req) end end y = YahooApi.new y.sentence = '裏庭には二羽鶏がいる' response = y.request puts response.body
インターネット接続がある状態でコンソールから叩いてみよう。
% ruby yahoo_api.rb > response.xml
response.xml
<?xml version="1.0" encoding="UTF-8" ?> <ResultSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:yahoo:jp:jlp:DAService" xsi:schemaLocation="urn:yahoo:jp:jlp:DAService http://jlp.yahooapis.jp/DAService/V1/parseResponse.xsd"> <Result> <ChunkList> <Chunk> <Id></Id> <Dependency>2</Dependency> <MorphemList> <Morphem> <Surface>裏庭</Surface><Reading>うらにわ</Reading><Baseform>裏庭</Baseform><POS>名詞</POS><Feature>名詞,名詞場所,*,裏庭,うらにわ,裏庭</Feature> </Morphem> <Morphem> <Surface>に</Surface><Reading>に</Reading><Baseform>に</Baseform><POS>助詞</POS><Feature>助詞,格助詞,*,に,に,に</Feature> </Morphem> <Morphem> <Surface>は</Surface><Reading>は</Reading><Baseform>は</Baseform><POS>助詞</POS><Feature>助詞,係助詞,*,は,は,は</Feature> </Morphem> </MorphemList> </Chunk> <Chunk> <Id>1</Id> <Dependency>2</Dependency> <MorphemList> <Morphem> <Surface>二羽</Surface><Reading>2わ</Reading><Baseform>2羽</Baseform><POS>接尾辞</POS><Feature>接尾辞,助数,*,二羽,2わ,2羽</Feature> </Morphem> <Morphem> <Surface>鶏</Surface><Reading>にわとり</Reading><Baseform>鶏</Baseform><POS>名詞</POS><Feature>名詞,名詞,*,鶏,にわとり,鶏</Feature> </Morphem> <Morphem> <Surface>が</Surface><Reading>が</Reading><Baseform>が</Baseform><POS>助詞</POS><Feature>助詞,格助詞,*,が,が,が</Feature> </Morphem> </MorphemList> </Chunk> <Chunk> <Id>2</Id> <Dependency>-1</Dependency> <MorphemList> <Morphem> <Surface>いる</Surface><Reading>い</Reading><Baseform>い</Baseform><POS>動詞</POS><Feature>動詞,一段,基本形,いる,い,い</Feature> </Morphem> </MorphemList> </Chunk> </ChunkList> </Result> </ResultSet>
まとめ
本日の成果
- Yahoo! APIを使うためにアプリケーションIDを取得しておこう
- Rubyでクエリを投げてXML文書を取得できた
- XMLのパーズにはREXML(標準添付ライブラリ)を使えばよさげ
次回への展望
そろそろMacBookのバッテリが切れるので、今回はこの辺で。次回は取得したXMLをほげほげして、解析結果をぴよぴよしてみたいと思う。
私信
「すぎゃーんメモ」にカテゴリ「zenra_bot」もしくは「zenrize」を希望します>@sugyan
Links
Yahoo!
●Yahoo!デベロッパーネットワーク – テキスト解析 – 日本語係り受け解析
http://developer.yahoo.co.jp/webapi/jlp/da/v1/parse.html
Bots
●全裸botのzenrize処理を改良した – すぎゃーんメモ
http://d.hatena.ne.jp/sugyan/20090821/1250810981
●北海道bot (hokkaidobot) on Twitter
http://twitter.com/hokkaidobot
Ruby
●Net::HTTPRequest – Rubyリファレンスマニュアル
http://www.ruby-lang.org/ja/man/html/Net_HTTPRequest.html
http://www.ruby-lang.org/ja/man/html/rexml.html