Пример скрипта Python, который использует DBPedia?

Я пишу скрипт Python для извлечения «имен объектов» из коллекции тысяч новостных статей из нескольких стран и языков.

Я хотел бы использовать потрясающие структурированные знания DBPedia, например, для поиска имен "художников в Египте" и названий "компаний". в Канаде".

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

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


person jaz    schedule 20.09.2011    source источник


Ответы (2)


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

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

Как только вы настроите тройной магазин с Dbpedia. Вы можете использовать SPARQL для запроса троек RDF Dbpedia. Существуют библиотеки 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" }} ] } }
>>> 

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

person Manuel Salvadores    schedule 20.09.2011
comment
Спасибо @msalvadores. Это отлично работает с DBPedia.org. Все еще нужно заставить его работать локально на машине win7. Так что определенно Virtuoso (4store только для Linux). Но все еще не смог найти хороший учебник по установке для платформы Windows. - person jaz; 22.09.2011
comment
Даже для Virtuoso лучше использовать Linux. Если вы хотите придерживаться Virtuoso, посмотрите на этот virtuoso.openlinksw.com/ dataspace/dav/wiki/Main/VOSUsageWindows Также имейте в виду, что если вы хотите загрузить все DBPEDIA, вам понадобится приличная мощная машина, может быть, обычный сервер. - person Manuel Salvadores; 22.09.2011
comment
не могу проголосовать за вас, потому что у меня все еще недостаточно репутации. Но выбрал ваш ответ как правильный! - person jaz; 24.09.2011

В 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
person N. Alonso    schedule 06.01.2016