Yahooで形態素解析ができる

広告

だいぶ前から知っているけれど、Yahoo APIは結構便利である。色々機能があるが、形態素解析というものをやってみたいと思って試してみた。形態素解析には茶筌というのもあったと思うけど、これだけ手軽に使えるのならYahooでもいいかも知れない。

サンプル

自民党は惨敗した東京都議選ショックが尾を引き、15日も混乱が続いた。麻生太郎首相が21日にも衆院を解散し、8月30日投開票の衆院選日程を決めたのは、「麻生降ろし」を封じ込める思惑があった。しかし、反麻生勢力は首相が都議選敗北の責任を棚上げしていることに反発。両院議員総会を巻き返しの「最後の場所」と位置付け、週内の開催を迫っている。衆院解散を目前に党内対立は激化し、再び緊迫感が高まってきた。

これを形態素解析すると

<word><surface>自民党</surface><reading>じみんとう</reading><pos>名詞</pos></word>
<word><surface>は</surface><reading>は</reading><pos>助詞</pos></word>
<word><surface>惨敗</surface><reading>ざんぱい</reading><pos>名詞</pos></word>
<word><surface>し</surface><reading>し</reading><pos>助動詞</pos></word>
<word><surface>た</surface><reading>た</reading><pos>助動詞</pos></word>
<word><surface>東京</surface><reading>とうきょう</reading><pos>名詞</pos></word>
<word><surface>都議選</surface><reading>とぎせん</reading><pos>名詞</pos></word>
<word><surface>ショック</surface><reading>しょっく</reading><pos>名詞</pos></word>
<word><surface>が</surface><reading>が</reading><pos>助詞</pos></word>
<word><surface>尾</surface><reading>お</reading><pos>名詞</pos></word>
<word><surface>を</surface><reading>を</reading><pos>助詞</pos></word>
<word><surface>引き</surface><reading>ひき</reading><pos>動詞</pos></word>
<word><surface>、</surface><reading>、</reading><pos>特殊</pos></word>
<word><surface>15</surface><reading>15</reading><pos>名詞</pos></word>
<word><surface>日</surface><reading>にち</reading><pos>接尾辞</pos></word>
<word><surface>も</surface><reading>も</reading><pos>助詞</pos></word>
<word><surface>混乱</surface><reading>こんらん</reading><pos>名詞</pos></word>
<word><surface>が</surface><reading>が</reading><pos>助詞</pos></word>
<word><surface>続い</surface><reading>つづい</reading><pos>動詞</pos></word>
<word><surface>た</surface><reading>た</reading><pos>助動詞</pos></word>
<word><surface>。</surface><reading>。</reading><pos>特殊</pos></word>
(略)

という風に品詞ごとにバラバラに切ってくれて、品詞名と読みを振ってくれる。あとは色々な応用ができる。

どうやるの?

YahooでアプリケーションIDを取得する

Yahoo!デベロッパーネットワークに行き、アプリケーションIDを取得する。これは簡単に取得できて、長いIDが発行される。

HTTPでアクセスする

普通にURLにアクセスするときに、後ろに”?appid=アプリID”を付けてアクセスすればOK。

POSTを使ってみる

長いデータをGETで渡すのは嫌なのでPOSTでやってみる。必須のパラメータのsentenceを渡してやる。

XMLを解析する

結果はXMLで返ってくるので、ごにょごにょする。RubyだとREXMLのインスタンスを作って、elements.each()で欲しいものを全部引っ張ってこられる。

Rubyコード

#!/usr/bin/ruby
require 'net/http'
require 'rexml/document'

host = 'jlp.yahooapis.jp'
request = '/MAService/V1/parse?appid=あいでぃ'

text = "自民党は惨敗した東京都議選ショックが尾を引き、15日も混乱が続いた。麻生太郎首相が21日にも衆院を解散し、8月30日投開票の衆院選日程を決めたのは、「麻生降ろし」を封じ込める思惑があった。しかし、反麻生勢力は首相が都議選敗北の責任を棚上げしていることに反発。両院議員総会を巻き返しの「最後の場所」と位置付け、週内の開催を迫っている。衆院解散を目前に党内対立は激化し、再び緊迫感が高まってきた。"

http = Net::HTTP.new(host)
response = http.post(request, "sentence=#{text}")

xml = REXML::Document.new response.body
xml.elements.each("/ResultSet/ma_result/word_list/word") do |e|
puts e
end

非常に簡単♪