わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

ワンライナーでYahoo!デベロッパーネットワークの日本語形態素解析

先週木金の1年向け授業で,Web APIを使って単語ごとに分割(形態素解析)する例を用意し,説明しました.いまそのスライドを見てみると,載せていたコマンドに書き損じがあったので,より良いコマンドを作ることにしました.
次のようにします.

curl "http://jlp.yahooapis.jp/MAService/V1/parse?appid=$APPID&sentence=$(echo -n 'よるいろいろいるよ' | ruby -r uri -e 'puts URI.escape ARGF.read')"

1つ1つ,見ていきます.

  • Linuxなどのシェル上で実行します.bashzshのいずれでも動作します*1
  • curlは,うしろにURLを書いたら,そのページにアクセスし,結果(HTMLやXML)を出力するコマンドです.
  • URLはhttpから始まるものですが,httpの直前と,コマンドの最後に「"」を置き,その間がURL(1個のコマンドライン引数)となることを指示しています.
  • http://jlp.yahooapis.jp/MAService/V1/parse」の部分が,Web APIへのアクセスとなります.詳細は以下のページに書かれています.
  • http://jlp.yahooapis.jp/MAService/V1/parse」の後ろにリクエストパラメータをつけて,1つのURLとします.具体的には,まず「?」を置き,あとは「パラメータ=値」を並べて「&」で挟みます.上のコマンドでも,「?」「appid=値」「&」「sentence=値」の順になっています.2つの「値」を,問い合わせに適した内容にすれば,URLが完成し*2,Webサーバに渡されます.
  • appid=の直後の$APPIDについては,あらかじめ,「APPID=〈アプリケーションID〉」というコマンドを実行して,シェル変数に値を格納しておきます.格納時は「$」なし,参照時は「$」つきなのは,シェルを使いこなす際の大事なところです.アプリケーションIDとは何か,またその取得方法については,以下をご覧ください.
  • もう1つの値は,コマンドでは「$(echo -n 'よるいろいろいるよ' | ruby -r uri -e 'puts URI.escape ARGF.read')」と書かれています.これは,「よるいろいろいるよ」*4を解析対象のテキストとします.「$(」と「)」の中が,1つのコマンドになっていて,これによってURLエンコードと呼ばれる変換操作をします*5

出力は次のようになりました.

44よるよる動詞いろいろいろいろ名詞いるいる助動詞助詞

見やすく整形します.

<?xml version="1.0" encoding="UTF-8" ?>
<ResultSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:yahoo:jp:jlp" xsi:schemaLocation="urn:yahoo:jp:jlp http://jlp.yahooapis.jp/MAService/V1/parseResponse.xsd">
 <ma_result>
  <total_count>4</total_count>
  <filtered_count>4</filtered_count>
  <word_list>
   <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_list>
 </ma_result>
</ResultSet>

これを見ることで,「よるいろいろいるよ」という,ひらがなばかりの文を形態素解析にかけると,「よる」「いろいろ」「いる」「よ」に分割され,それぞれの品詞が動詞・名詞・助動詞・助詞になることが分かりました---あれれ,「夜色々居るよ」だから,最初が動詞だと困るんですが*6.また失敗作かよ……
Yahoo!デベロッパーネットワークで提供されているWeb APIには,ほかにも地図やショッピングなど,便利なものがたくさんあります.アイデア次第で面白いアプリが簡単に作れますので,試してみてはいかがでしょうか.

*1:授業で載せたのはzshのみでした.

*2:どんなURLになるかは,もとのコマンドのcurlを「echo」に置き換えて,実行すれば,知ることができます.

*3:上のコマンドを実行したい場合,アプリケーションの種類は「サーバーサイド」がおすすめです.

*4:授業の例文から変更しています.後ろから読んでも「よるいろいろいるよ」です.こういうのを回文といいます.

*5:手元の環境では,URLエンコードをせず,「curl "http://jlp.yahooapis.jp/MAService/V1/parse?appid=$APPID&sentence=よるいろいろいるよ"」のコマンドでも,同じ出力を得ました.

*6:Web APIを使わずに形態素解析をするなら,mecabコマンドがお勧めです.あるLinux環境で実行しても,最初は「よる 動詞,自立,*,*,五段・ラ行,基本形,よる,ヨル,ヨル」と出ました.