my story blog

JavaScriptとかRubyの技術的なことを書きたい

Yahoo!の日本語形態素解析APIのgemを作ってみた

前回のキーフレーズ抽出のgemに続き、 Yahoo!が提供している 日本語形態素解析APIのgemを作りました。

kyohei8/yahoo_parse_api · GitHub

yahoo_parse_api | RubyGems.org | your community gem host

インストール

Gemfileに以下を追加

gem 'yahoo_parse_api'

そして bundle install

またはgemを直接インストール

$ gem install yahoo_parse_api

 

設定

アプリケーションIDをYahooから取得して、 以下の用に設定

require 'yahoo_parse_api'

YahooParseApi::Config.app_id = [application_ID]

 

使い方

YahooParseApi::Parseをnewして、parseメソッドを呼び出します。

  • 第一引数に解析したい文字列、
  • 第二引数にリクエストパラメータをハッシュ形式で指定します。(リクエストパラメータについてはこちらをご参考下さい)
  • 第三引数にはリクエスト方法(:GET:POST)を指定します。指定しない場合はGETリクエストになります。
  • 戻り値はXML形式のレスポンスをハッシュにして返しています。
parse_api = YahooParseApi::Parse.new

# GET Request
result = parse_api.parse('庭には二羽ニワトリがいる。', {
            results: 'ma,uniq',
            uniq_filter: '9|10'
         })
# => {"ResultSet"=>{
#        "ma_result"=>{
#          "total_count"=>"8",
#          "filtered_count"=>"8",
#          "word_list"=>{"word"=>[{"surface"=>"庭", "reading"=>"にわ", "pos"=>"名詞"},
#                                 {"surface"=>"に", "reading"=>"に", "pos"=>"助詞"},
#                                 {"surface"=>"は", "reading"=>"は", "pos"=>"助詞"},
#                                 {"surface"=>"二羽", "reading"=>"にわ", "pos"=>"名詞"},
#                                 {"surface"=>"ニワトリ", "reading"=>"にわとり", "pos"=>"名詞"},
#                                 {"surface"=>"が", "reading"=>"が", "pos"=>"助詞"},
#                                 {"surface"=>"いる", "reading"=>"いる", "pos"=>"動詞"},
#                                 {"surface"=>"。", "reading"=>"。", "pos"=>"特殊"}]}},
#        "uniq_result"=>{
#           "total_count"=>"8",
#           "filtered_count"=>"4",
#           "word_list"=>{"word"=>[{"count"=>"1", "surface"=>"いる", "reading"=>nil, "pos"=>"動詞"},
#                                  {"count"=>"1", "surface"=>"ニワトリ", "reading"=>nil, "pos"=>"名詞"},
#                                  {"count"=>"1", "surface"=>"二羽", "reading"=>nil, "pos"=>"名詞"},
#                                  {"count"=>"1", "surface"=>"庭", "reading"=>nil, "pos"=>"名詞"}]}},
#     "schemaLocation"=>"urn:yahoo:jp:jlp http://jlp.yahooapis.jp/MAService/V1/parseResponse.xsd"}}


# POSTリクエストの場合
result = yp.parse('庭には二羽ニワトリがいる。', { results: 'ma,uniq', uniq_filter: '9|10' }, :POST)
# => {"ResultSet"=>...


# リクエストパラメータのサンプル
result = yp.parse('庭には二羽ニワトリがいる。', {
                      results: 'ma',
                      ma_response: 'surface',
                      ma_response: '2|5'
                  })

 

リクエストする文字数について

渡す文字列ですが、公式の仕様にはリクエストは100KBまでと書いてあるが実際には13,000文字(38KB)くらいで 制限に引っかかってしまいます。(このへんがどういう計算なのかわからない・・・)。

rubyでサクッと形態素解析をしたい場合は、便利かなと思うのでもしよければ使ってみて下さい。