1

我正在尝试在 Python 项目中获取 Wikipedia 上文章信息框的表示形式。我曾尝试使用 Wikipedia 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>

但这会返回大量不必要的数据—— 与伦敦相关的全套三胞胎—— 这比我需要的要多几个数量级。

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

4

2 回答 2

2

您可以通过选择属性 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 结果(HTML 表)
SPARQL 结果(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阅读有关不同数据集的更多信息。信息框数据。不过,对原始属性的查询几乎相同:

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

SPARQL 结果(HTML 表)

于 2015-01-22T13:31:53.593 回答
0

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

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

http://dbpedia.org/resource/Taj_Mahal

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

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

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

于 2017-07-17T13:06:13.360 回答