2014-12-12 17 views
9

C'è un modo per ottenere informazioni sulla pagina di Wikidata in base al nome dell'entità, ad esempio se volevo ottenere i dati della pagina per Google. Penso che debba essere fatto usando "entità" con il corrispondente valore di entità, ma non sono sicuro che ci sia un modo semplice per determinare il valore dell'entità.Valore entità Wikidata dal nome

risposta

11

Se si desidera eseguire questa operazione utilizzando l'API, per prima cosa utilizzare wbsearchentities per individuare l'entità desiderata. Per esempio:

https://www.wikidata.org/w/api.php?action=wbsearchentities&search=Google&language=en

Il problema di questo è che ci sono più entità chiamato "Google": la società (Google Inc.), il motore di ricerca (Google Web Search), il verbo (to google) e anche una pagina di disambiguazione di Wikipedia.

Dopo aver in qualche modo decidere quale soggetto ad accedere, utilizzare wbgetentities per ottenere effettivamente le informazioni desiderate:

https://www.wikidata.org/w/api.php?action=wbgetentities&ids=Q95&languages=en

Oppure, se non è possibile decidere quale entità da utilizzare, si potrebbe ottenere le informazioni per tutti loro allo stesso tempo:

https://www.wikidata.org/w/api.php?action=wbgetentities&ids=Q95|Q9366|Q961680|Q1156923&languages=en

+0

Ciao @svick grazie mille! Se potessi fornire un ultimo bit di assistenza, sto riscontrando delle difficoltà nell'analisi dei dati per poter dire una matrice o una stringa dei numeri di entità. Potresti gentilmente avvisare? – Oroku

5

Se si ha familiarità con Python che si possa fare a livello di codice con l'API Wikidata, utilizzando Pywikibot Il seguente script python, ottiene le entità wikidata. Se si desidera che gli oggetti di dati per ogni entità Wikidata individuo, è necessario rimuovere il commento le ultime due righe

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)) 

che si traduce in

{ 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} 
+0

ho provato questo, ma continuo a ricevere l'errore 'CRITICO: in attesa di 1 thread di rete per terminare. Premi ctrl-c per interrompere, sai di cosa si tratta? forse posso in qualche modo specificare su quale porta eseguirlo o soemthing? –

+0

Si omette 'token = repo.token (pywikibot.Page (repo, 'Pagina principale'), 'modifica')' e l'argomento posizionale 'token' in' def getItem (sito, wdItem, token) 'perché si ' non modificare nulla a questo punto (mi dispiace, non posso ancora modificare la risposta, la mia reputazione non è sufficiente). – Kaleidophon

2

forse è possibile utilizzare SPARQL, di eseguire una query:

`SELECT ?item WHERE { 
    ?item rdfs:label "Google"@en 

}` 

È possibile utilizzare in Python usando pywikibot:

`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)`