Я использую живую Dbpedia (http://dbpedia -live.openlinksw.com / sparql / ), чтобы получить основные сведения о известных людях. Мой запрос:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
SELECT DISTINCT ?x0 ?name ?dob WHERE {
?x0 rdf:type foaf:Person.
?x0 rdfs:label ?name.
?x0 dbpedia-owl:birthDate ?dob.
FILTER REGEX(?name,"^[A-Z]","i").
} LIMIT 200
Это работает, и я использую LIMIT 200, чтобы ограничить вывод небольшим количеством людей. Моя проблема в том, что 200 человек случайны, и я хочу как-то измерить «известность», чтобы я возвращал 200 известных людей, а не 200 случайных людей. В Дбпедиа более 500 000 человек.
Мой вопрос: как я могу измерить «известность» и ограничить запрос только выдающимися людьми? Я понимаю, что не существует свойства «известности», и оно очень субъективно. Я рад использовать любую косвенную или приблизительную меру, такую как количество ссылок или количество ссылок. Но я не знаю, как это сделать.
Редактировать : В результате полезных комментариев я улучшил запрос, включив в него ранги страниц:
PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX dbo:<http://dbpedia.org/ontology/>
PREFIX vrank:<http://purl.org/voc/vrank#>
SELECT DISTINCT ?s ?name2 ?dob ?v
FROM <http://dbpedia.org>
FROM <http://people.aifb.kit.edu/ath/#DBpedia_PageRank>
WHERE {
?s rdf:type foaf:Person.
?s rdfs:label ?name.
?s dbo:birthDate ?dob.
?s vrank:hasRank/vrank:rankValue ?v.
FILTER REGEX(?name,"^[A-Z].*").
BIND (str(?name) AS ?name2)
} ORDER BY DESC(?v) LIMIT 100
Проблема в том, что есть много дубликатов, хотя я использую DISTINCT.