竹林のゆとりブログ

山奥で生活し、日々の思いをつらつらと書くブログ。 IT、数学、アニメなど。

LinkedOpenData入門②

SPARQLとDBPedia

SPARQLについて、説明し、DBpediaで実際に調査した結果を記載する

SPARQLとは

RDFストアに対し、データを検索できるクエリ言語
RDBにおけるSQLと同じ。

RDFストアとは

DBpediaのように、RDFによるデータベースのこと。

DBMSと同じで、内部の実装に応じてクエリの仕様も一部変わる模様。
複雑なデータ取得方法を指定しないかぎり関係がないため、今回は触れない

SPARQLの文法

プロローグ

IRIが長いため、複数回書くものに対し、略記を定義する。 その略記を文章の冒頭部分に書くため、プロローグと名づけている(と予想)

  • BASE

BASE IRI
と表記することで、以降で、abcと書くとIRI/abcと認識される

  • PREFIX

PREFIX aaa: IRI
と表記することでaaa:abcと書くと IRI/abcと認識される。

参照クエリ

  • SELECT

SELECT ?p ?q WHERE { ?p IRI ?q . }
を実施すると、目的語がIRIに一致する、?p,?qの一覧が得られる。

他にも文法は多数あるが、複雑ではないめ、今回は省略する。

DBpedia

これまで、基本的な文法について説明してきた。 ここからは実際に調査する時にどうやって調べるかについて記載する。

今回は調べるものの例としてDBpediaを採用する。

DBpediaとは

DBpediaはWikipediaから情報を抽出してLOD (Linked Open Data)として公開するコミュニティプロジェクトです.本家のDBpediaは主にWikipedia英語版を対象としています.DBpedia Japanese の目的は,Wikipedia日本語版を対象としたDBpediaを提供することです.

DBpedia(http://ja.dbpedia.org/ )からの引用です。

現在の不明点

SPARQL/RDFの利用方法で不明になっている点を記載する。

  1. あるデータを得たい時に、このRDFストアなら調べられるのかが特定できない。
  2. 仮にこのRDFストアで調べられるとして、どういうキーワード(IRI)を使って調べればいいのかがわからない。
  3. Crawlerより早いか

そのため、DBpediaを実際に使って調べてみるにあたり、これらがわかるかで判断したい。

また、Wikipediaとくらべて早いかも判断するため、Wikipediaとも比較した

[テーマ]2 0世紀生まれの有名な数学者の一覧をを得る。

Wikipediaの場合

  1. Googleで数学者 一覧で検索
  2. Wikipediaの数学者の一覧サイトへ(https://ja.wikipedia.org/wiki/%E6%95%B0%E5%AD%A6%E8%80%85%E3%81%AE%E4%B8%80%E8%A6%A7 )
  3. 入手。

だいたい3手番。 Crawlerを作り、プログラムにするのが、+2手番ぐらいだとしても5手番ぐらい。

DBpediaの場合

1ステップ目 数学者をSubjectに設定して検索(リソースの形はDBpediaのURLから推測)

select distinct * where { <http://ja.dbpedia.org/resource/数学者> ?p ?o . } limit 100

結果(の一部) f:id:fatal-t-h-f-flydream-bamboo:20160212200337p:plain

結果に対する推論

  • 述語に記載されていることはデータ同士のつながりのみ。同じIRIといっても、これだけで、データを表すことはなさそう。

  • 目的語に(http://ja.dbpedia.org/resource/数学者の一覧) があるから、これをネタに調べられるのではと予想。

2ステップ目 目的語から検索

select distinct * where { <http://ja.dbpedia.org/resource/数学者の一覧> ?p ?o . } limit 100

結果に対する推論

  • ?oに数学者と思しき値は出てきたが、本当にこれが数学者を表すのか(定理の名前などではないこと)が構造からわからない。世紀の特定もこれだけではできない。

  • このページから次に進む方法が不明のため、知っている数学者の名前(岩澤健吉)を含むURIのリンクに遷移し、情報を確認した。

記載内容

DataのTableとしてPropertyとValueがあり、 本人の説明があった。

Wikipediaと比較したところ、日本語の説明に相当する部分がDBpediaには記載されていないことが判明。
出身大学、出身地等の情報あるが、数学者を識別できないと、20世紀の数学者も選別できないため、 これ以上進むことができず、中断。

この時点で考えたこと

  • Wikipediaよりデータ自体は劣化している。
  • 必要な情報が得られるかはDBpedia等を直接みながら探さないといけない。
  • IRIではそれを取得した後IRIから意味に変換するための操作が必要

問題に対する結論としては以下となった。 - あるデータを得たい時に、このRDFストアなら調べられるのかが特定できない。 →調べてみるまでわからない。文脈や説明でありそうか、あたりをつける程度しか不可能

  • 仮にこのRDFストアで調べられるとして、どういうキーワード(IRI)を使って調べればいいのかがわからない。 →調べながら、文章でなんとなく判断するしかない。

  • Crawlerより早いか? データがSPARQLで求まるとわかりきっているなら、早い可能性がある。
    RDFストアはJSON形式で返す機能を持っているので、アプリケーションとして使うなら早いと推測。
    だが、現状ではDBpediaを始めとして、得られるとは限らないものが多すぎてとてもではないが、遅い

堀江由衣で比較

堀江由衣さんをもとにDBpediaとWikipediaでどれだけ情報に差があるか調べた。

結果

  • Wikipediaで文章で記載されているものは取得していない。 今回だと、逸話部分はDBpediaをみても取得できない。

  • 名詞でも足りないものが有る。 シャーマンキングのアイアンメイデン・ジャンヌ役であることがDBpediaに記載がない。

  • 名詞があったとしても、関係がわからないものがある。 堀江由衣柏木由紀の関係がWikiLinkという動詞で結ばれており、Wikipediaでリンクがあることを意味しているのだろうが、 なぜ、リンクがあるのかがわからない。(WikipediaではAKB0048というアニメで柏木由紀役を演じているという関係であることがわかる)

  • 時系列的に新しすぎる情報が得られない。 2016年の魔法使いプリキュア出演の情報が得られない

結論

現状でDBpediaはまだまだ実用に耐えたものではない。

また、現在の不明点はRDFストアをみればわかるものではないということもわかった。