Python で DBpedia から情報抽出する
自然言語処理では、ナレッジベース(knowledge base)を使う場合があります。 その際、手軽に使えるナレッジベースとして DBpedia があります。 DBpedia は Web 上でクエリ(SPARQL)を実行できるのですが、利便性を考えるとプログラムからクエリを実行したくなります。
本記事では、Python から DBpedia に対してクエリを実行し、結果を取得する方法を紹介します。
インストール
Python で SPARQL を実行するのは、SPARQLWrapper を使えばできます。 SPARQLWrapper はリモートのサーバに対してクエリを実行し、取得した結果を使いやすい形に変換することができます。
SPARQLWrapper が何かわかったところで、さっそくインストールしてみましょう。 pipを使って以下のコマンドを実行することで、SPARQLWrapper をインストールできます。
$ pip install sparqlwrapper
インストールはこれで終わりです。 次に、SPARQLWrapper の使い方を見ていきましょう。
使い方
SPARQLWrapper を使う際は、以下の手順を実行します。
簡単なので、先にコードを見てみましょう。 以下のようなコードを書くことで、DBpedia に対してクエリを実行することができます。 ちなみに、日本の都道府県を取得しています。
from SPARQLWrapper import SPARQLWrapper sparql = SPARQLWrapper(endpoint='http://ja.dbpedia.org/sparql', returnFormat='json') sparql.setQuery(""" PREFIX dbpedia-owl: <http://dbpedia.org/ontology/> SELECT ?pref WHERE { ?pref dbpedia-owl:wikiPageWikiLink category-ja:日本の都道府県. } """) results = sparql.query().convert()
まず、インポートした SPARQLWrapper をインスタンス化します。 インスタンス化する際に、endpoint と返り値の形式を指定することになります。 endpoint で叩く先を指定し、返り値の形式で取得結果の形式を指定します。
インスタンス化した後、setQuery メソッドを使用して、クエリを設定します。 ここには SPARQL のクエリを文字列として渡してあげます。 ここで設定したクエリを次の段階で実行します。
そして最後に、query メソッドでクエリを実行し、結果を取得します。 結果を取得した後、convert メソッドを用いて、結果を扱いやすい形に変換しています。
最終的に、以下のような結果が得られます。
>>> print(results["results"]["bindings"]) [{'pref': {'type': 'uri', 'value': 'http://ja.dbpedia.org/resource/内陸県'}}, {'pref': {'type': 'uri', 'value': 'http://ja.dbpedia.org/resource/都道府県独立国家論'}}, {'pref': {'type': 'uri', 'value': 'http://ja.dbpedia.org/resource/県央地域'}}, {'pref': {'type': 'uri', 'value': 'http://ja.dbpedia.org/resource/県民手帳'}}, {'pref': {'type': 'uri', 'value': 'http://ja.dbpedia.org/resource/都道府県別百科事典'}}, {'pref': {'type': 'uri', 'value': 'http://ja.dbpedia.org/resource/佐賀県'}}, {'pref': {'type': 'uri', 'value': 'http://ja.dbpedia.org/resource/兵庫県'}}, {'pref': {'type': 'uri', 'value': 'http://ja.dbpedia.org/resource/北海道'}}, {'pref': {'type': 'uri', 'value': 'http://ja.dbpedia.org/resource/和歌山県'}}, {'pref': {'type': 'uri', 'value': 'http://ja.dbpedia.org/resource/大分県'}} ...
プログラムから情報抽出できるようになったことで、色々おもしろいことができそうです。