2011-09-20 21 views
11

Piszę skrypt Pythona, aby wyodrębnić "nazwy jednostek" z kolekcji tysięcy artykułów z kilku krajów i języków.Przykładowy skrypt python, który używa DBPedia?

Chciałbym skorzystać z niesamowitej knuckedge o strukturze DBPedia, na przykład, aby wyszukać nazwiska "artystów w Egipcie" i nazwy "firm w Kanadzie".

(Jeśli te informacje były w formie SQL, bym nie miał problemu.)

wolałbym aby pobrać zawartość dbpedia i używać go w trybie offline. wszelkie pomysły na to, co jest potrzebne, i jak zapytać o to lokalnie z Pythona?

Odpowiedz

14

Treść DBpedia jest w formacie RDF. Zrzuty można pobrać z here

Dbpedia jest dużym zbiorem danych w języku RDF, który obsługuje tę ilość danych, aby móc korzystać z technologii Triple Store. Dla Dbpedii będziesz potrzebował jednego z natywnych potrójnych sklepów, polecam ci użyć albo Virtuoso lub 4store. Osobiście wolę 4store.

Po utworzeniu swojego potrójnego sklepu z Dbpedia. Możesz użyć SPARQL, aby zapytać o trójki RDF Dbpedia. Istnieją biblioteki Pythona, które mogą ci w tym pomóc. 4store i Virtuoso mogą dać ci wyniki w JSON, dzięki czemu bez problemu przejdziesz bez żadnych bibliotek.

Niektóre prosty skrypt urllib jak ...

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 

może pomóc uruchomić sparql ... na przykład

>>> 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" }} ] } } 
>>> 

Mam nadzieję, że to daje wyobrażenie o tym, jak zacząć.

+0

THX @msalvadores. To działa dobrze z DBPedia.org. Nadal trzeba go uruchomić lokalnie na maszynie win7. Tak definitywnie Virtuoso (4store tylko Linux). Ale nadal nie można znaleźć dobrego samouczka instalacyjnego dla platformy Windows. – jaz

+0

Nawet dla Virtuoso lepiej byłoby z Linuksem. Jeśli chcesz pozostać przy Virtuoso, spójrz na ten http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VOSUsageWindows Pamiętaj też, że jeśli chcesz załadować wszystkie DBPEDIA, potrzebujesz porządnej, potężnej maszyny , może serwer towaru. –

+0

nie może głosować, ponieważ wciąż nie mam wystarczającej reputacji. Ale wybrałeś odpowiedź jako poprawną! – jaz

1

W python3 odpowiedź będzie wyglądać przy użyciu biblioteki wnioski:

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 
Powiązane problemy