Creativity Sharing and
Entrepreneurial Support

PROLOQL : PrologとSPARQLの統合を統合した推論システム

License : CC0
・PROLOQLは、PrologとSPARQLを統合した推論システムです ・LODのデータを利用し、バックトラッキングによる推論を行うことができます ・独自のルール定義や文字列置換などの特殊関数により、LOD間の差異の吸収やSPARQLの拡張ができます
Update: Feb 16, 2017

Text detail
【エントリー部門】アイディア部門 【応募者属性】学生 【応募者名】NBKN 【エントリー作品の権利指定】CC BY 【利用しているオープンデータ】 DBpedia(http://dbpedia.org/sparql) Human Disease Ontology(http://bioportal.bioontology.org/ontologies/DOID) 【エントリー作品の詳細説明】 ・PROLOQLは、PrologとSPARQLを統合した推論システムです ・大きく分けて二つの機能があります 1.LODを利用した推論機能 ・LODのデータを利用し、バックトラッキングによる推論を行うことができます ・インターフェースはPrologと同様で、コマンドプロンプトに対話的に質問を入力をします ・通常のPrologは事前にローカルに定義されたデータに対してのみ推論可能ですが、PROLOQLは定義されていないデータをSPARQLにて取得し、自身の知識のように利用して推論を行うことができます 2.独自ルール ・文字列置換や分岐処理を行い、通常のSPARQLでは実現できないより高度なLOD検索ができます ・LOD間のリソースURIの差異などを吸収可能で、複数のLODを連結することができます
Update: Feb 16, 2017 (NBKN)
Image detail
1.LODを利用した推論機能 通常のPrologの実行例。 ローカルに定義されたデータしか扱うことができない。 未定義の質問が与えられた場合は「no」という結果が返ってくる。
Update: Feb 13, 2017 (NBKN)
Image detail
1.LODを利用した推論機能 PROLOQL実行例。 定義の質問にも対しても,様々なLODからデータを取得し、自身の知識のように推論できる。 以下の画像では、?-birthPlace(?X, ?Y)というProlog形式の質問が、 SELECT * WHERE { ?X <http://dbpedia.org/ontology/birthPlace ?Y } というSPARQLクエリに変換されている。
Update: Feb 13, 2017 (NBKN)
Image detail
2.独自ルール LODの問題点の1つとして、LOD間で登録されている名称が異なっている場合がある。 下図の場合では、各LODによって「Diabetes mellitus」の登録方法が微妙に異なっているので、LODをうまく連結することができない。 これを解決するには、「Diabetes.mellitus」のように,単語の繋ぎを任意の一文字を表す「 . 」に置換し、正規表現でマッチさせる必要がある。
Update: Feb 13, 2017 (NBKN)
Image detail
2.独自ルール 2つ目の問題点として、LOD間によって単語のリソースを示すURIの表記が異なっている。 DBpediaであれば「URI+単語名」で容易にリソースにアクセス可能だが、DOID(Human Disease Ontlogy)のように「URI+独自のID」が使用されている場合があり、独自IDを知らないとそのリソースにアクセスできない。
Update: Feb 13, 2017 (NBKN)
Image detail
2.独自ルール 上記の問題を解決するために、PROLOQLの特殊関数を定義し、これらを用いて独自ルールを作る。これらは、フォーマットおよび呼び出し方法はProlog関数と同様であるが、引数を受け取るとバックグラウンドでSPARQLクエリを実行し、結果をLODから取得することができる。
Update: Feb 16, 2017 (NBKN)
Text detail
上図のquery(?url, ?query, ?var)はSPARQLクエリ実行関数であり、引数で受け取った文字列?urlと?queryをそれぞれアクセス先のエンドポイントURLと実行クエリの文字列とし、クエリを実行後得られた結果をリストとして変数?varにマッピングする。 langualge(?str, ?lang, ?var)は言語変換関数であり、文字列?strを?langにて指定した言語に変換し、結果を変数?varにマッピングする。以下は実行例である。 // 入力 ?-language('糖尿病', 'en', ?x). // 出力 ?x = Diabetes_mellitus category(?str, ?var)はカテゴリー取得関数である。以下は実行例である。 // 入力 ?-category('糖尿病', ?x). // 出力 ?x = Category: Disease replace(?before, ?str1, ?str2, after)は文字列置換関数であり、文字列?beforeに含まれる文字列?str1を?str2に置換し、結果を変数?afterにマッピングする。この関数の実行例を以下に示す。 // 入力 ?-replace('TEST', 'T', 'X', ?x). // 出力 ?x = XESX ?-extra_word(?uri, ?var)はURLから単語を抽出する。 // 入力 ?-extra_word('http://ja.dbpedia.org/resource/糖尿病', ?x). // 出力 ?x = 糖尿病
Update: Feb 16, 2017 (NBKN)
Image detail
上記の特殊関数を用いて、PROLOQL独自ルールを定義する。定義方法および呼び出し方はPrologと同様であるが、バックグラウンドでSPARQLを実行するすることによって、高度な推論を行うことができる。
Update: Feb 16, 2017 (NBKN)
Text detail
下図は定義例である。まず、①にて与えられた文字列?strを英語に変換する。「?str = 糖尿病」が与えられた場合、「?str2 = Diabetes_mellitus」となる。続いて②にて、?str2のカテゴリを取得し、それがDiseaseであるかチェックする。真であれば、③にあるように、replace関数にて単語間を繋ぐアンダーバー(_)、スペース、ハイフン(-)を、正規表現で任意の一文字を表す「 . 」に置換する。「?str2 = Diabetes_mellitus」の場合、「?str3 = Diabetes.mellitus」となる。続いて④にて、与えられたクエリを実行し、その結果得られたURIから単語を抽出して解としている(⑤)。これによって、「糖尿病」という単語から、DOIDの独自IDを取得することができる。 このようにPROLOQLでは、ユーザが独自ルールの定義をすることによってLODに関する特有の知識をコンピュータに付与し、さらにPrologとSPARQLの統合によってLOD間の差異を吸収して、複数のLODを連結することを可能にしている。
Update: Feb 16, 2017 (NBKN)
Idea detail
【関連する応募作品】
5

value



Update: Jan 15, 2017 (NBKN)

Grant Information

Suggested fund information for realizing the idea.

Related Pages

・PROLOQL Extensionは、LODを利用した文書理解補助システムです。 ・単語の上位概念を理解して、単語ごとにSPARQLクエリを切り替えて検索するなど、高度な検索ができます。 ・Google Chrome上で動作するChrome拡張アプリとして実装されています。
5

value

4

Comments