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"])
Обратите внимание, что, насколько я понимаю, имена всегда берутся со страниц английской Википедии, и поэтому вы найдете только английское исполнение (если это не так, меня поправят).