从维基百科信息框获取 JSON/Dictionary 的 page/resource DBPedia 中的所有属性

Getting JSON/Dictionary of all properties in DBPedia for a page/resource from Wikipedia Infobox

我正在尝试在 Python 项目中获取维基百科文章信息框的表示。我曾尝试使用维基百科 API,但它输出的数据很脏,所以我正在尝试转移到 DBpedia。我需要能够按页面名称进行查询,并接收 属性 名称及其页面值的字典。 例如,对于 London 的查询,返回的字典将包含:

{dbpedia-owl:PopulatedPlace/areaMetro : 8382.0,
 dbpedia-owl:PopulatedPlace/areaTotal : 1572.0
 .....
 dbpedia-owl:populationDensity : 5285.0
 .....
}

等,从这里我将能够读取信息框中的所有键。我确实尝试使用

的 SPARQL 查询
describe <http://dbpedia.org/resource/London>

但这会返回大量不必要的数据 &emdash;与伦敦相关的全套三胞胎 &emdash;这比我需要的多了很多数量级。

如何编写查询来获取信息框属性,如上所示?

您可以通过选择 属性 IRI 以您感兴趣的内容开头的属性和对象来获得您想要的内容(例如,http://dbpedia.org/ontology/)。您可以使用如下查询。 (它利用了前缀本身,例如 dbpedia-owl: 仍然是合法的 IRI,您可以使用 str 就可以了。你也可以只使用字符串 http://dbpedia.org/ontology/

select ?p ?o where {
  dbpedia:London ?p ?o
  filter strstarts(str(?p),str(dbpedia-owl:))
}

SPARQL results (HTML Table)
SPARQL results (JSON)

JSON 结果与您要查找的格式不完全相同,但如下所示:

{ "head": { "link": [], "vars": ["p", "o"] },
  "results": { "distinct": false, "ordered": true, "bindings": [
    { "p": { "type": "uri", "value": "http://dbpedia.org/ontology/wikiPageExternalLink" }   , "o": { "type": "uri", "value": "http://mapoflondon.uvic.ca/" }},
    { "p": { "type": "uri", "value": "http://dbpedia.org/ontology/wikiPageExternalLink" }   , "o": { "type": "uri", "value": "http://www.british-history.ac.uk/place.aspx?region=1" }},
    { "p": { "type": "uri", "value": "http://dbpedia.org/ontology/wikiPageExternalLink" }   , "o": { "type": "uri", "value": "http://www.london.gov.uk/" }},
    { "p": { "type": "uri", "value": "http://dbpedia.org/ontology/wikiPageExternalLink" }   , "o": { "type": "uri", "value": "http://www.museumoflondon.org.uk/" }},
    { "p": { "type": "uri", "value": "http://dbpedia.org/ontology/wikiPageExternalLink" }   , "o": { "type": "uri", "value": "http://www.tfl.gov.uk/" }},
    { "p": { "type": "uri", "value": "http://dbpedia.org/ontology/wikiPageExternalLink" }   , "o": { "type": "uri", "value": "http://www.visitlondon.com/" }},
    { "p": { "type": "uri", "value": "http://dbpedia.org/ontology/wikiPageExternalLink" }   , "o": { "type": "uri", "value": "https://london.gov.uk/" }},
    { "p": { "type": "uri", "value": "http://dbpedia.org/ontology/wikiPageExternalLink" }   , "o": { "type": "uri", "value": "http://www.britishpathe.com/workspace.php?id=2449&delete_record=75105/" }},
    { "p": { "type": "uri", "value": "http://dbpedia.org/ontology/thumbnail" }  , "o": { "type": "uri", "value": "http://commons.wikimedia.org/wiki/Special:FilePath/Greater_London_collage_2013.png?width=300" }},
...

不过这有点道理,因为不一定每个 属性 都有一个 唯一的 值,所以 Python dict 在问题中可能不是最好的结果格式(但创建一个将多个值放入列表的格式很容易)。

另请注意,以 dbpedia-owl: 开头的属性实际上是 DBpedia Ontology 属性,其数据比原始数据干净得多信息框值,使用以 dbpprop: 开头的属性。您可以在 4.3. Infobox Data 阅读更多关于不同数据集的信息。不过,对原始属性的查询几乎是一样的:

select ?p ?o where {
  dbpedia:London ?p ?o
  filter strstarts(str(?p),str(dbpprop:))
}

SPARQL Results (HTML Table)

要以 JSON 格式 获取整个 页面数据,您还可以使用以下方法:

假设您想要 Taj_Mahal 的 JSON 数据并且您有 link :

http://dbpedia.org/resource/Taj_Mahal

现在您必须更改此 URL,将 /resource/ 替换为 /data/ 并添加 .json扩展名在URL末尾。如下所示:

http://dbpedia.org/data/Taj_Mahal.json

您将在JSON中获得所有DBpedia页面与'Taj_Mahal'匹配的数据。 现在您必须在 JSON 中展开此“http://dbpedia.org/resource/Taj_Mahal”才能仅获取与该页面相关的数据。