Pon De Beach

叩こう ココナッツ アゴゴ

DBpedia Japanese を利用して各プログラミング言語の関係性を可視化してみる(実践編)

f:id:mizukmb:20151209204231j:plain

この記事はFUNAdventCalendar2015 9日目の記事です。

前回の続きとして、実際に DBpedia Japanese からデータの取得 を行いたいと思います。本記事を読む前にご一読頂けると今回の内容についての理解がより深まると思います。

前回の記事

mizukmb.hatenablog.com

それでは始めます。

DBpedia Japanese からデータを取得するために

前回ご紹介した DBpedia JapaneseRDF データから求めるデータを取得するために SPARQL を利用します。

取得するデータについてですが、今回のテーマである プログラミング言語の関係性を可視化 のために 影響を受けた言語 を取得しようと思います。 RubyWikipediaページ(https://ja.wikipedia.org/wiki/Ruby) を確認すると infobox の項目に影響を受けた言語についての情報が掲載されていることが確認できます。

f:id:mizukmb:20151209205857p:plain

前回説明したとおり、 DBpedia Japanese では infobox の情報を RDF データに変換して持っていますので利用できそうなことが分かりました。

実際に SPARQL を利用してデータを取得してみようと思います。

Web 上で公開されている多くの LOD は データのアクセスポイントとして SPARQL EndPoint を持っています*1。ここに検索を問い合わせることで結果を得ることができます。

ちょっとやってみましょう。DBPedia Japanese の SPARQL EndPoint を見てみると、何か書かれてますね。 SPARQL は RDF の検索のために利用すること東京都 という文字があることから 東京都に関する情報を検索してくれそう と予想できます。とりあえず実行ボタンを押してみましょう。

どうですか。下の画像のような結果が出ていませんか?

f:id:mizukmb:20151209213100p:plain

無事 SPARQL を実行して結果を得られたようですね。おめでとうございます!??????????????????????

ちなみにさっき実行した謎の文字列

select distinct * where { <http://ja.dbpedia.org/resource/東京都> ?p ?o . }

これはおおまかに言うと 「東京都を主語として持つ述語と目的語の組み合わせを全て取得して下さい」 という意味になります。もちろんもっと細かい意味などはありますが、今回は雰囲気を掴んで欲しいので割愛します。

…ですが、 RDF の重要な項目について説明していなかった部分があったので補足します。

RDF はトリプルという 主語(Subject)、述語(Predicate)、目的語(Object) の3要素の組み合わせによって構成されています。 これらの要素は URI(あるいは IRI)を使用することが定められています。但し、目的語に関しては単純な文字列や数値(リテラル)の使用が許されています。 URI を使用することで コンピュータが参照可能なメタデータ** として扱うことができます。

雑な説明でしたが、本題に戻ります。

プログラミング言語の関係性を可視化するぞ!!

今度こそ、各プログラミング言語の関係性を DBpedia Japanese から取得し可視化しようと思います。

前述のとおり、各プログラミング言語の関係性は 影響を受けた言語 をそれぞれのプログラミング言語から取得することで可視化していきます。

Ruby を例にすると

の主語と目的語群の組み合わせを取得します。ちなみに影響を受けた言語は必ずしも書かれているわけでは無いのであしからず。

そしてデータを取得するために利用する SPARQL クエリを予め用意致しました。

SELECT DISTINCT ?label ?influencedBy
WHERE {
  ?s rdf:type dbpedia-owl:ProgrammingLanguage;
  rdfs:label ?label.
  OPTIONAL {
      ?s dbpedia-owl:influencedBy ?ib.
      ?ib rdfs:label ?influencedBy.
  }.
}
ORDER BY ?label

こいつを先ほどの SPARQL EndPoint で実行することで結果を得ることができます。

f:id:mizukmb:20151209230924p:plain

どうですか。プログラミング言語の名前が沢山出てきたと思います。左側の言語が右側の言語の影響を受けているという風に読み取れます。


これで本来の目的である 『DBpedia Japanese を利用して各プログラミング言語の関係性を可視化してみる』 を果たすことができました。 LOD という仕組みはあまり知られてない上に利用する技術も多く大変です。ですが、 LOD 及びセマンティック Web がどういうものであるのかを今回の内容を通じて知っていただけたら私自身もアドベントカレンダーをやった甲斐があるというものです。

2回に渡る説明にこれまで付き合ってくださった皆様に多大なる感謝を申し上げると共に本記事を締めさせて頂きます。ありがとうございました。

付録: Graphviz を利用したデータビジュアライゼーション

今回の結果を更に見やすくするために、 Graphviz と呼ばれるグラフ作成ツールを使ったデータビジュアライゼーションを行いました。むしろここまでやって可視化といえるのでは。

使用言語は Python です。 Python から SPARQL クエリを利用するためにSPARQLWrapperを、 Graphviz を利用するためにPyGraphviz をインストールして下さい。

$ pip install SPARQLWrapper
$ pip install pygraphviz

そして下記コードを実行すると sample.pdf というファイルが生成されます。

gist913cc0156d328720cd8a

実際に生成されるファイルはこちらです。(画像がでかいのでリンクのみ)

グラフをどんどん辿れるのでこっちの方が可視化っぽいですね。

*1:持ってない場合もあります…