Ruby on Rails で Yahoo のテキスト解析 APIを使う
Rubyで Yahooのテキスト解析APIを呼び出すサンプルコードを作ってみました。
引数にチェックを行う文書を渡すと、指摘結果を JSONデータで返すサンプルです。
公式ドキュメントはこちら。
日本語形態素解析
##
# 日本語形態素解析の実行
# @param sentence 解析対象のテキスト
# @return 形態素解析の結果
# [
# {
# Surface: "庭" //形態素の表記
# reading: "にわ" //形態素の読みがな
# pos: "名詞" //形態素の品詞
# }
# ,
# ...
# ]
def exec(sentence)
# URLおよびクエリパラメタ設定
url = URI.parse("https://jlp.yahooapis.jp/MAService/V1/parse")
url.query = [
"appid=" + URI.encode(CLIENT_ID),
"results=ma",
"sentence=" + URI.encode(sentence)
].join("&")
# getリクエスト送信
res = get_request(url, true);
# エラーの場合、nilを返却
return nil if res.code != "200"
# xml解析する
words = []
doc = REXML::Document.new(res.body)
# - word要素分繰り返し
doc.elements.each("//ma_result/word_list/word") do |el|
# - wordタグ内の各要素を読み取って、hashに格納
words << ["surface", "reading", "pos"].inject({}) do |h, nm|
child_el = el.get_elements(nm)[0]
h[nm] = child_el.nil? ? nil : child_el.text
h
end
end
return words
end
##
# GETリクエストを送信し、そのレスポンスを取得する
# @param url リクエストURL
# @return レスポンス
def get_request(url, use_ssl = true)
req = Net::HTTP::Get.new(url.request_uri)
# getリクエスト送信
res = Net::HTTP.start(url.host, url.port, :use_ssl => use_ssl) do |http|
http.request(req)
end
res
end
校正支援API
require 'net/http'
require 'uri'
require 'rexml/document'
##
# 校正支援APIの実行
# @param sentence 解析対象のテキスト
# @return 文書校正の指摘結果JSON
# [
# {
# StartPos: 2, //対象文字列開始位置(先頭からの文字数)
# Length:5 //対象文字列長(対象文字数)
# Surface: "NNN" //対象表記
# ShitekiWord: //言い換え候補文字列。複数の候補が返される際には、間に読点がはさまれます
# ShitekiInfo: //指摘の詳細情報。リクエストパラメータ no_filterの説明で挙げた指摘内容のうち、どれか1つを表示します
# }
# ,
# ...
# ]
def exec(sentence)
# API呼び出し用の URL を作成
url = URI.parse("https://jlp.yahooapis.jp/KouseiService/V1/kousei")
# CLIENT_ID の部分は、ご自分で取得した IDをセットしてください。
url.query = [
"appid=" + URI.encode(CLIENT_ID),
"sentence=" + URI.encode(sentence)
].join("&")
# getリクエスト送信
res = get_request(url, true);
# エラーの場合、nilを返却
return nil if res.code != "200"
# 校正支援APIからは XMLでレスポンスが返ってくるため、
# xmlの結果を jsonに変換する
kosei_list = []
doc = REXML::Document.new(res.body)
# - word要素分繰り返し
doc.elements.each("//ResultSet/Result") do |el|
# - Resultタグ内の各要素を読み取って、hashに格納
kosei_list << ["StartPos", "Length", "Surface", "ShitekiWord", "ShitekiInfo"].inject({}) do |h, nm|
child_el = el.get_elements(nm)[0]
h[nm] = child_el.nil? ? nil : child_el.text
h
end
end
# 結果をハッシュで返却
return kosei_list
end
0 件のコメント:
コメントを投稿