Docomo発話理解APIをRubyで使ってみた
発表をされてからは随分と月日が流れてはおりますが、
卒業研究の内容と非常に関わりがあったため、Docomoが提供する「知識理解API」を試しました。Rubyで動かしてみた記事は見当たらなかったため(既にあったらすみません)、ご紹介します。
知識理解APIはユーザのテキスト(発言)を投げると、ユーザが発した発言の意図を判断し、それに見合った機能名や値を返却するAPIです。
例えば、
「つくば駅から渋谷までの乗り換え案内」という文字列を渡すと次のような結果が得られます。(実際はjson出力です。)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
発言:つくば駅から渋谷駅の乗り換え案内
分かち書き:["つくば駅", "から", "渋谷駅", "の", "乗り換え", "案内"]
位置情報:
コマンド:乗換案内
スロット名:stationTo
スロット値:渋谷駅
スロット名:stationFrom
スロット値:つくば駅
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
コマンド → 対応する機能
スロット → 対応する機能に用いる情報
得られたコマンドは、他の関数と対応づけるなどして活用ができます。
音声アシスタントアプリのようにユーザの発言から様々な機能を呼び出せるサービスが代表的ですが、他にもかなり幅広い応用が可能だと思います。
得られるコマンドはこちらに詳細が記述されています。
# coding: utf-8 require 'net/http' require 'uri' require 'json' #取得したAPIキー API_KEY = 'hoge' URL = "https://api.apigw.smt.docomo.ne.jp/sentenceUnderstanding/v1/task?APIKEY=#{API_KEY}" uri = URI.parse(URL) https = Net::HTTP.new(uri.host, uri.port) https.use_ssl = true req = Net::HTTP::Post.new(uri.request_uri) query = gets.chomp! #リクエストヘッダー req["Content-Type"] = "application/x-www-form-urlencoded" #リクエストボディ(JSON形式です) param = { "projectKey" => "OSU", "appInfo" => {"appName" => "hoge_app", "appKey" => "hoge_appkey"}, "clientVer" => "1.0.0", "dialogMode" => "off", "language" => "ja", "userId" => "12 123456 123456 0", "location" => {"lat"=> "139.766084","lon"=>"35.681382"}, "userUtterance" => {"utteranceText" => "#{query}"} }.to_json req.body = param res = https.request(req) res_parse = JSON.parse(res.body) #出力 print("発言:",res_parse["userUtterance"]["utteranceText"],"\n") print("分かち書き:",res_parse["userUtterance"]["utteranceWord"],"\n") print("位置情報:",res_parse["location"],"\n") print("コマンド:",res_parse["dialogStatus"]["command"]["commandName"],"\n") if(res_parse["dialogStatus"]["slotStatus"]!=nil) res_parse["dialogStatus"]["slotStatus"].each do |youso| print("スロット名:",youso["slotName"],"\n") print("スロット値:",youso["slotValue"],"\n") end end