Ontolopedia [α]

Ontolopediaの提供するAPIについて

Ontolopediaの提供するデータを使用する事で、外部のアプリケーションがOntolopediaで構築された概念データを使用することができるようになります。 本APIはREST型APIで提供されます。URLにパラメータを加えることで、結果がXMLで返されます。

APIの種類

  • 検索
    • 検索結果を取得
    • http://www.nal.ie.u-ryukyu.ac.jp/ontolopedia/api/search?keyword=琉球大学
  • 完全一致検索
    • 語句が一致した場合、概念を取得することができる。
    • hhttp://www.nal.ie.u-ryukyu.ac.jp/ontolopedia/api/matchfull?keyword=琉球大学
  • 概念取得
    • 与えられたIDの語句の概念を取得
    • http://www.nal.ie.u-ryukyu.ac.jp/ontolopedia/api/show/46579

注意点

検索を行うときに、日本語を使用する場合はURLエンコード(UTF-8)を行うこと。

URLに2バイト文字を使う際に行われる符号化のこと

Rubyのクラス(ontoloprdia.rb:Sample)

XMLパース処理をして、連想配列としてデータを返すクラスです。

ontolopedia.rb

使用方法

検索
Ontolopedia.find("琉球大学)
完全一致検索
Ontolopedia.matchfull("琉球大学")
概念取得
Ontolopedia.get("46578")
id指定した言葉だけを知りたいとき
Ontolopedia.get_target(46579)
idを指定して概念だけを取得したいとき
Ontolopedia.get_words(46579)

データ構造

search data

ソース

サンプルコード(ontolopedia.rb)
     1  $KCODE='u'
     2  require 'open-uri'
     3  require 'cgi'
     4  require 'rexml/document'
     5
     6  class Ontolopedia
     7    SEARCH_API_URL = "http://www.nal.ie.u-ryukyu.ac.jp/ontolopedia/api/search?keyword="
     8    MATCHFULL_API_URL = "http://www.nal.ie.u-ryukyu.ac.jp/ontolopedia/api/matchfull?keyword="
     9    DATA_API_URL = "http://www.nal.ie.u-ryukyu.ac.jp/ontolopedia/api/show/"
    10
    11    def initialize()
    12    end
    13
    14    # Ontolopedia から言葉を検索する
    15    def self.find(params)
    16      result = []
    17      getxml = open(SEARCH_API_URL + "#{CGI::escape(params)}").read
    18      xml = REXML::Document.new(getxml)
    19      xml.elements.each("ResultList/Result"){|word|
    20        result << {"id" => word.elements['id'].text,
    21          "word" => word.elements['word'].text,
    22          "url"  => word.elements['url'].text,
    23          "strftime" => word.elements['strftime'].text
    24        }
    25      }
    26      return result
    27    end
    28
    29    # 完全一致検索 from Ontolopedia 1つのデータが返ってくる (first にしてます)
    30    # データ形式は get に同じ
    31    def self.matchfull(params)
    32      target = Hash::new
    33      result = []
    34      getxml = open(MATCHFULL_API_URL + "#{CGI::escape(params)}").read
    35      xml = REXML::Document.new(getxml)
    36      xml.elements.each("Ontolopedia/Target"){|tword|
    37        target['id'] = tword.elements["id"].text
    38        target['word'] = tword.elements["word"].text
    39        target['url'] =  tword.elements["url"].text
    40        target['strftime'] = tword.elements["strftime"].text
    41      }
    42      xml.elements.each("Ontolopedia/conceptwords/word"){|word|
    43        words << {
    44          "id" => word.attributes['id'],
    45          "word" => word.text,
    46          "concept" => word.attributes['concept']
    47        }
    48      }
    49      return {"target" => target, "words" => words}
    50    end
    51
    52    # ID から概念を取得する。
    53    def self.get(params)
    54      target = Hash::new
    55      words= []
    56      getxml = open(DATA_API_URL + "#{params}").read
    57      xml = REXML::Document.new(getxml)
    58      xml.elements.each("Ontolopedia/Target"){|tword|
    59        target['id'] = tword.elements["id"].text
    60        target['word'] = tword.elements["word"].text
    61        target['url'] =  tword.elements["url"].text
    62        target['strftime'] = tword.elements["strftime"].text
    63      }
    64      xml.elements.each("Ontolopedia/conceptwords/word"){|word|
    65        words << {
    66          "id" => word.attributes['id'],
    67          "word" => word.text,
    68          "concept" => word.attributes['concept']
    69        }
    70      }
    71      return {"target" => target, "words" => words}
    72    end
    73
    74    # 中心になる言葉のみ取得
    75    def self.get_target(params)
    76      target = Hash::new
    77      getxml = open(DATA_API_URL + "#{params}").read
    78      xml = REXML::Document.new(getxml)
    79      xml.elements.each("Ontolopedia/Target"){|tword|
    80        target['id'] = tword.elements["id"].text
    81        target['word'] = tword.elements["word"].text
    82        target['url'] =  tword.elements["url"].text
    83        target['strftime'] = tword.elements["strftime"].text
    84      }
    85      return {"target" => target}
    86    end
    87
    88    # 関連後のみ取得
    89    def self.get_words(params)
    90      words= []
    91      getxml = open(DATA_API_URL + "#{params}").read
    92      xml = REXML::Document.new(getxml)
    93      xml.elements.each("Ontolopedia/conceptwords/word"){|word|
    94        words << {
    95          "id" => word.attributes['id'],
    96          "word" => word.text,
    97          "concept" => word.attributes['concept']
    98        }
    99      }
   100      return {"words" => words}
   101    end
   102
   103
   104  end
   105
   106  # 利用例
   107  # get id を元に関連語を引いてくる。
   108  @hoge = Ontolopedia.get(46579)
   109  p @hoge
   110  #p @hoge["words"][5]["id"]
   111  #p @hoge["target"]["word"]
   112
   113  p "--------------------------------------------"
   114
   115  @hoge = Ontolopedia.get_words(46579)
   116  p @hoge
   117
   118  p "--------------------------------------------"
   119
   120  @hoge = Ontolopedia.get_target(46579)
   121  p @hoge
   122
   123  p "--------------------------------------------"
   124
   125  @search = Ontolopedia.find("琉球大学")
   126  p @search

その他

現在、応用サンプルアプリケーションを作成中。