2011-09-20 15 views
11

Sto scrivendo uno script python per estrarre "nomi di entità" da una raccolta di migliaia di articoli di notizie da alcuni paesi e lingue.Esempio di script python che utilizza DBPedia?

Mi piacerebbe utilizzare lo straordinario intreccio strutturato DBPedia, ad esempio per cercare i nomi di "artisti in Egitto" e nomi di "aziende in Canada".

(Se queste informazioni era in forma SQL, avrei avuto nessun problema.)

preferirei scaricare il contenuto DBPedia e utilizzarlo offline. qualche idea di cosa è necessario fare e come interrogarlo localmente da Python?

risposta

14

Il contenuto di DBpedia è in formato RDF. Le discariche possono essere scaricate da here

Dbpedia è un dataset di grandi dimensioni in RDF, per gestire la quantità di dati necessaria per utilizzare la tecnologia Triple Store. Per Dbpedia è necessario uno dei tre negozi nativi, ti consiglio di utilizzare Virtuoso o 4store. Personalmente preferisco 4store.

Una volta impostato il proprio negozio triplo con Dbpedia. È possibile utilizzare SPARQL per interrogare i tripli di Dbpedia RDF. Ci sono librerie Python che possono aiutarti in questo. 4store e Virtuoso possono restituirti i risultati in JSON, così puoi facilmente andare avanti senza librerie.

Alcuni semplice script urllib come ...

def query(q,epr,f='application/json'): 
    try: 
     params = {'query': q} 
     params = urllib.urlencode(params) 
     opener = urllib2.build_opener(urllib2.HTTPHandler) 
     request = urllib2.Request(epr+'?'+params) 
     request.add_header('Accept', f) 
     request.get_method = lambda: 'GET' 
     url = opener.open(request) 
     return url.read() 
    except Exception, e: 
     traceback.print_exc(file=sys.stdout) 
     raise e 

può aiutare a correre SPARQL ... per esempio

>>> q1 = """ 
... select ?birthPlace where { 
... <http://dbpedia.org/resource/Claude_Monet> <http://dbpedia.org/property/birthPlace> ?birthPlace . 
... }""" 
>>> print query(q1,"http://dbpedia.org/sparql") 

{ "head": { "link": [], "vars": ["birthPlace"] }, 
    "results": { "distinct": false, "ordered": true, "bindings": [ 
    { "birthPlace": { "type": "literal", "xml:lang": "en", "value": "Paris, France" }} ] } } 
>>> 

Spero che questo vi dà un'idea di come iniziare.

+0

@msalvadores Thx. Funziona perfettamente con DBPedia.org. Ancora bisogno di farlo funzionare localmente su una macchina win7. Quindi assolutamente virtuoso (4store solo linux). Ma ancora non riuscivo a trovare un buon tutorial di installazione per la piattaforma Windows – jaz

+0

Anche per Virtuoso dovresti stare meglio con Linux. Nel caso in cui si desideri attenersi al look di Virtuoso su questo http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VOSUsageWindows Ricorda inoltre che se vuoi caricare tutto DBPEDIA avrai bisogno di una macchina potente e decente , forse un server commodity. –

+0

non puoi votare perché non ho ancora abbastanza reputazione. Ma hai selezionato la tua risposta come corretta! – jaz

1

Nel python3 la risposta sarà simile a questa utilizzando la libreria richieste:

def query(q, epr, f='application/json'): 
    try: 
     params = {'query': q} 
     resp = requests.get(epr, params=params, headers={'Accept': f}) 
     return resp.text 
    except Exception as e: 
     print(e, file=sys.stdout) 
     raise 
Problemi correlati