2011-09-20 6 views
11

Я пишу скрипт python для извлечения «Имена сущностей» из коллекции тысяч статей новостей из нескольких стран и языков.Пример сценария python, который использует DBPedia?

Я хотел бы использовать удивительный структурированный knwoledge, скажем, например, чтобы найти имена «художников в Египте» и имена «компаний в Канаде».

(Если эта информация была в виде SQL, я не имел бы никаких проблем.)

Я предпочел бы, чтобы загрузить содержимое DBpedia и использовать его в автономном режиме. какие-либо идеи о том, что нужно для этого, и как запрашивать его локально из python?

ответ

14

Содержимое DBpedia находится в формате RDF. Дампы можно скачать с here

Dbpedia - это большой набор данных в RDF, для обработки такого количества данных, которое необходимо использовать для использования технологии Triple Store. Для Dbpedia вам понадобится один из родных трехместных магазинов, я рекомендую использовать либо Virtuoso, либо 4store. Я лично предпочитаю 4-й магазин.

Как только у вас есть трёхместный магазин с Dbpedia. Вы можете использовать SPARQL для запроса тройников Dbpedia RDF. Есть библиотеки Python, которые могут помочь вам в этом. 4store и Virtuoso могут дать вам результаты в JSON, чтобы вы могли легко обойтись без каких-либо библиотек.

Некоторые простые URLLIB сценарий как ...

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 

может помочь вам запустить SPARQL ... например

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

Я надеюсь, что это дает вам представление о том, как начать.

+0

THx @msalvadores. Это отлично работает с DBPedia.org. Все равно нужно заставить его работать локально на машине win7. Так определенно Virtuoso (только 4store linux). Но до сих пор не удалось найти хороший учебник по установке для платформы Windows. – jaz

+0

Даже для Virtuoso вам лучше с Linux. Если вы хотите придерживаться Virtuoso, посмотрите на этот http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VOSUsageWindows. Также имейте в виду, что если вы хотите загрузить всю DBPEDIA, вам понадобится достойная мощная машина , может быть, товарный сервер. –

+0

не может проголосовать за вас, потому что у меня все еще недостаточно репутации. Но выбран ваш ответ как правильный! – jaz

1

В Python3 ответ будет выглядеть следующим образом, используя библиотеку запросов:

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 

 Смежные вопросы

  • Нет связанных вопросов^_^