учитывая имя человека, как запросить свойства вики-данных об этом человеке? - PullRequest
0 голосов
/ 19 октября 2019

Я делаю проект торгового центра на Python. у меня есть таблица со столбцами: "автор", "заголовок", "текст".

Что мне нужно: для данного имени автора я хочу каким-то образом получить таблицу со свойством столбцов: ""," значение ", содержащее информацию (строки) о свойствах" род занятий "и" пол или пол "из Wiki-данных.

* РЕДАКТИРОВАТЬ: тип таблицы на самом деле не имеет значения. датафрейм был бы хорош, но любой другой тип, который работает, прекрасно!

Пример: для имени автора - Дэвид Дэвид, я хочу получить следующую таблицу:

  • row1: свойство = "занятие";значение = род деятельности Дэвида.
  • row2: свойство = "пол или пол";значение = пол Дэвида.

спасибо: -)

1 Ответ

0 голосов
/ 31 октября 2019

хорошо, вот способ (который я видел) сделать это:

с использованием запросов и json. например: если я хочу узнать день рождения, род занятий и пол Дональда Трампа, я должен сначала импортировать пакет запросов и определить свой запрос SPARQL. (База данных WikiData может быть запрошена с использованием языка запросов SPARQL)

import requests

sparql_query = """
        prefix schema: <http://schema.org/>
        SELECT ?item ?occupation ?genderLabel ?bdayLabel
        WHERE {
            <https://en.wikipedia.org/wiki/Eric_P._Schmitt> schema:about ?item .
            ?item wdt:P106 ?occupation .
            ?item wdt:P21 ?gender .
            ?item wdt:P569 ?bday .
            SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
        }
    """

(не имеет значения, кем на самом деле является Эрик П. Шмитт ..), тогда мне нужно сделать запрос, применить и запросить, используя запросМетод .get:

url = 'https://query.wikidata.org/sparql'

# sleep(2)
r = requests.get(url, params={'format': 'json', 'query': sparql_query})

и последний шаг, получите результаты в виде json и получите доступ к необходимой информации из ее структуры:

url = 'https://query.wikidata.org/sparql'

r = requests.get(url, params={'format': 'json', 'query': sparql_query})
data = r.json()

print(data['results']['bindings'])
>>>> [{'item': {'type': 'uri', 'value': 'http://www.wikidata.org/entity/Q5387230'}, 'genderLabel': {'xml:lang': 'en', 'type': 'literal', 'value': 'male'}, 'bdayLabel': {'type': 'literal', 'value': '1959-11-02T00:00:00Z'}, 'occupation': {'type': 'uri', 'value': 'http://www.wikidata.org/entity/Q1930187'}}]

...