たとえば、Googleのページデータを取得したい場合、エンティティの名前に基づいてWikidataページ情報を取得する方法はありますか。対応するエンティティ値を持つ「エンティティ」を使用して実行する必要があると思いますが、エンティティ値を決定する簡単な方法があるかどうかはわかりません。
APIを使用してこれを実行する場合は、最初に wbsearchentities
を使用して、必要なエンティティを見つけます。例えば:
https://www.wikidata.org/w/api.php?action=wbsearchentities&search=Google&language=en
これに伴う問題は、「グーグル」と呼ばれる複数のエンティティが存在することです:会社(グーグル社)、検索エンジン(グーグルウェブ検索)、動詞(グーグルへ)そしてウィキペディアの曖昧さ回避ページさえ。
アクセスするエンティティをなんとかして決定したら、 wbgetentities
を使用して、必要な情報を実際に取得します。
https://www.wikidata.org/w/api.php?action=wbgetentities&ids=Q95&languages=en
または、使用するエンティティを決定できない場合は、それらすべての情報を同時に取得できます。
https://www.wikidata.org/w/api.php?action=wbgetentities&ids=Q95|Q9366|Q961680|Q1156923&languages=en
Pythonに精通している場合は、 Pywikibot を使用して、ウィキデータAPIでプログラムで実行できます。次のpythonスクリプトは、ウィキデータエンティティ。個々のウィキデータエンティティのデータオブジェクトが必要な場合は、最後の2行のコメントを解除する必要があります。
from pywikibot.data import api
import pywikibot
import pprint
def getItems(site, itemtitle):
params = { 'action' :'wbsearchentities' , 'format' : 'json' , 'language' : 'en', 'type' : 'item', 'search': itemtitle}
request = api.Request(site=site,**params)
return request.submit()
def getItem(site, wdItem, token):
request = api.Request(site=site,
action='wbgetentities',
format='json',
ids=wdItem)
return request.submit()
def prettyPrint(variable):
pp = pprint.PrettyPrinter(indent=4)
pp.pprint(variable)
# Login to wikidata
site = pywikibot.Site("wikidata", "wikidata")
repo = site.data_repository()
token = repo.token(pywikibot.Page(repo, 'Main Page'), 'edit')
wikidataEntries = getItems(site, "Google")
# Print the different Wikidata entries to the screen
prettyPrint(wikidataEntries)
# Print each wikidata entry as an object
#for wdEntry in wikidataEntries["search"]:
# prettyPrint(getItem(site, wdEntry["id"], token))
その結果、
{ u'search': [ { u'aliases': [u'Google Inc.'],
u'description': u'American multinational Internet and technology corporation',
u'id': u'Q95',
u'label': u'Google',
u'url': u'//www.wikidata.org/wiki/Q95'},
{ u'aliases': [u'Google Search', u'Google Web Search'],
u'description': u'Internet search engine developed by Google, Inc.',
u'id': u'Q9366',
u'label': u'Google',
u'url': u'//www.wikidata.org/wiki/Q9366'},
{ u'description': u'Wikipedia disambiguation page',
u'id': u'Q961680',
u'label': u'Google',
u'url': u'//www.wikidata.org/wiki/Q961680'},
{ u'aliases': [u'Google'],
u'description': u'verb',
u'id': u'Q1156923',
u'label': u'google',
u'url': u'//www.wikidata.org/wiki/Q1156923'},
{ u'id': u'Q10846831',
u'label': u'google',
u'url': u'//www.wikidata.org/wiki/Q10846831'},
{ u'aliases': [u'Google Android'],
u'description': u'operating system for mobile devices created by Google',
u'id': u'Q94',
u'label': u'Android',
u'url': u'//www.wikidata.org/wiki/Q94'},
{ u'description': u'web browser developed by Google',
u'id': u'Q777',
u'label': u'Google Chrome',
u'url': u'//www.wikidata.org/wiki/Q777'}],
u'searchinfo': { u'search': u'Google'},
u'success': 1}
たぶん、sparqlを使用してクエリを実行できます。
`SELECT ?item WHERE {
?item rdfs:label "Google"@en
}`
Pywikibotを使用してpythonで使用できます:
`import pywikibot
from pywikibot import pagegenerators, WikidataBot
sparql = "SELECT ?item WHERE { ?item rdfs:label 'Google'@en }"
entities = pagegenerators.WikidataSPARQLPageGenerator(sparql, site=repo)
entities = list(entities)`