如何使用SPARQL和dbpedia在人维基百科页面上提取所有超链接人的列表

时间:2012-12-18 18:03:07

标签: sparql dbpedia

我想提取所有“人”的列表,这些人在维基百科上有另一个人的链接。

例如,George H. W. Bush在他的简历中有这句话:

"Bush was born in Milton, Massachusetts, to Senator 
Prescott Bush and Dorothy Walker Bush."

现在,多萝西布什已经链接到她自己的页面。我可以获得一个类似的列表:

George H. W. Bush | Dorothy Walker Bush
George H. W. Bush | Babe Ruth
George H. W. Bush | Bill Clinton

并为维基百科的每个人扩展这个...我显然必须将其分解为比特大小的块才能输出,但我不知道如何编写此代码来仅为链接人员选择。感谢

1 个答案:

答案 0 :(得分:2)

一种开始的方法就是搜索属于Person类型的连接资源。您可以使用dbpedia's web based query form

SELECT ?person1 ?p ?person2
WHERE { 
   ?person1 ?p ?person2. 
   ?person1 a foaf:Person. 
   ?person2 a foaf:Person.
}
ORDER BY ?person1
LIMIT 10
OFFSET 0

您可以使用ORDER BY关键字“将此数据拆分为块”并迭代OFFSET之后的值(例如10,20,30,...)。您应保存这些单独查询的所有结果,然后将它们组合以获得完整结果。

如果您只是在dbpedia上寻找特定类型的人际关系,以下查询将为您提供用于连接两个人的所有属性。

SELECT DISTINCT ?p
WHERE { 
   ?person1 ?p ?person2. 
   ?person1 a foaf:Person. 
   ?person2 a foaf:Person.
}

选择其中一个或多个属性,例如。 http://dbpedia.org/property/married,并使用以下查询获取此属性相关人员列表。

SELECT ?person1 ?person2
WHERE { 
   ?person1 <http://dbpedia.org/property/married> ?person2. 
   ?person1 a foaf:Person. 
   ?person2 a foaf:Person.
}
ORDER BY ?person1
LIMIT 10
OFFSET 0

正如您将自己看到的那样,dbpedia上的属性使用非常异构,因此可能需要一些努力来获得您想要的内容。

希望这有助于作为一个起点。