SPARQL-запрос для поиска "заметных" людей - PullRequest
0 голосов
/ 08 мая 2018

Я использую живую 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.

...