SPARQL запрос для поиска по имени для человека

Мне нужна помощь в запросе. У меня есть список имен, и я хочу написать программу на Python, которая будет отправлять запрос для каждого человека в списке, он будет искать его информацию в dbpedia и в викиданных и вернет некоторые из них.

Может ли кто-нибудь помочь мне с этим?

Спасибо

1 ответ

Следующий рабочий код Python берет (слегка измененный) запрос от @coder и использует его в небольшой демонстрационной программе.

Он будет искать людей, в имени которых есть слово «Андреотти», и возвращать один или несколько URL-адресов, каждый из которых указывает на страницу одного найденного человека.

      from SPARQLWrapper import SPARQLWrapper, JSON

NAME_FRAGMENT = "Andreotti"

QUERY = f"""
SELECT DISTINCT ?uri 
WHERE {{ 
   ?uri a foaf:Person. 
   ?uri ?p ?person_full_name. 
   FILTER(?p IN(dbo:birthName,dbp:birthName ,dbp:fullname,dbp:name)). 
   ?uri rdfs:label ?person_name . 
   ?person_name bif:contains "{NAME_FRAGMENT}" .  
   FILTER(langMatches(lang(?person_full_name), "en")) .
}} 
LIMIT 100
"""

# Specify the DBPedia endpoint
sparql = SPARQLWrapper("http://dbpedia.org/sparql")
sparql.setQuery(QUERY)
sparql.setReturnFormat(JSON)

# Run the query
result = sparql.query().convert()

# The return data contains "bindings" (a list of dictionaries)
for link in result["results"]["bindings"]:
    # We want the "value" attribute of the "comment" field
    print(link["uri"]["value"])

Обратите внимание, что, насколько я понимаю, имена всегда берутся со страниц английской Википедии, и поэтому вы найдете только английское исполнение (если это не так, меня поправят).

Другие вопросы по тегам