特定のテキストのエンティティに関する情報を表示するアプリを構築しています。Python 用の sparqlwrapper ライブラリを使用して DBpedia にクエリを実行しています。Person
エンティティを取得するときに次のコードを使用しています。
def get_person_data(einfo):
data = {}
try:
uri = einfo['disambiguated']['dbpedia']
sparql = SPARQLWrapper("http://dbpedia.org/sparql")
query = u"""
SELECT ?birthDate, ?birthName, ?birthPlace
WHERE { <%s>
dbpprop:birthDate ?birthDate ;
dbpprop:birthName ?birthName ;
dbpprop:birthPlace ?birthPlace
}
""" % uri
sparql.setQuery(query)
sparql.setReturnFormat(JSON)
results = sparql.query().convert()
このコードの問題は、DBpedia ページでフィールドが欠落している場合、結果が何も返さないことです。特定のタイプのすべてのエンティティにどのプロパティが存在するかを知るのは難しいため、いくつかの望ましいプロパティを定義してから、存在するプロパティを取得したいと思います。次のようなクエリを試しました:
SELECT * WHERE {
?x rdfs:label "New York"@en.
?x dbpedia-owl:abstract ?abstract.
OPTIONAL {
?x dbpedia-owl:areaTotal ?areaTotal.
?x dbpprop:governor ?governor.
?x dbpprop:birthPlace ?birthPlace.
}
FILTER (LANG(?abstract) = 'en')
}
この場合、ニューヨークには がないbirthPlace
ため、情報だけを取得することになりabstract
ます。areaTotal
私も手に入れたいgovernor
です。