2014-12-12 3 views
9

예를 들어 Google의 페이지 데이터를 가져 오려는 경우 엔티티 이름을 기반으로 위키 데이터 페이지 정보를 얻을 수있는 방법이 있습니까? "엔티티"를 해당 엔티티 값과 함께 사용하여 완료해야한다고 생각하지만 엔티티 값을 쉽게 확인할 수있는 방법이 있는지 잘 모르겠습니다.이름의 위키 데이터 엔터티 값

답변

11

API를 사용하여이 작업을 수행하려면 먼저 wbsearchentities을 사용하여 원하는 엔티티를 찾으십시오. 예를 들면 :

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

이의 문제 "구글"라고 여러 기관이 있다는 것입니다 : 회사 (구글에) (구글 주식), 검색 엔진 (Google 웹 검색), 동사 심지어 위키 피 디아 (Wikipedia)의 모호성 제거 페이지도 있습니다. 당신이 사용하는 어떤 실체를 결정할 수없는 경우에 대한 정보를 얻을 수,

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

또는 : 당신은 어떻게 든, 실제로 당신이 원하는 정보를 얻을 수 wbgetentities를 사용하여 액세스하는 개체 결정 후

동시에 그들 모두는 : 파이썬에 익숙하다면

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

+0

안녕하세요 @svick 대단히 감사합니다! 가장 최근의 지원을 제공 할 수 있다면 배열 또는 엔터티 번호 문자열을 반환하기 위해 데이터를 파싱하는 데 어려움을 겪고 있습니다. 나에게 조언 해주실 수 있으신가요? – Oroku

5

당신은 Pywikibot를 사용하여 위키 데이터 API를 사용하여 프로그래밍을 할 수 다음 파이썬 스크립트는 위키 데이터 엔터티를 가져옵니다. 각 개별 위키 데이터 엔티티의 데이터 오브젝트를 원한다면, 당신은

{ 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

나는 이것을 시험해 보았지만'CRITICAL : 1 개의 네트워크 쓰레드가 끝날 때까지 기다리는 중 '오류가 계속 발생한다. ctrl-c를 눌러 중단하십시오. 그게 무엇인지 알아? 어쩌면 내가 어떻게 든 그것을 실행할 포트 또는 soemthing을 지정할 수 있습니까? –

+0

당신은 'get getItem (site, wdItem, token)'에'token = repo.token (pywikibot.Page (repo,'Main Page '),'edit ')'및 위치 토큰' 이 시점에서 아무 것도 편집하지 마십시오. (미안하지만 아직 답을 편집 할 수 없습니다. 평판이 충분하지 않습니다.) – Kaleidophon

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

은 어쩌면 당신은 쿼리를 실행하기 위해, SPARQL 사용할 수있는 마지막 두 줄의 주석을 해제해야합니다

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

}` 

당신은 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)`