我试图在Python项目中获取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>
但这又带来了大量不必要的数据,并且发现了这些数据。与London&amp; emdash相关的全套三胞胎;这比我需要的要多很多个数量级。
如何编写查询以获取信息框属性,如上所述?
答案 0 :(得分: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 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 可能不是&# 39; t最佳结果格式(但是很容易创建一个将多个值放入列表中的格式)。
另请注意,以 dbpedia-owl:开头的属性实际上是DBpedia Ontology属性,它具有比原始信息框值更清晰的数据,其中属性以 dbpprop开头: 使用。您可以在4.3. Infobox Data了解有关不同数据集的更多信息。但是对原始属性的查询几乎是相同的:
select ?p ?o where {
dbpedia:London ?p ?o
filter strstarts(str(?p),str(dbpprop:))
}
答案 1 :(得分:0)
要以JSON格式获取整个页面数据,您还可以使用以下方法:
假设您需要Taj_Mahal的JSON数据,并且您有链接:
现在,您必须通过将 / resource / 替换为 / data / 来更改此网址,并在网址末尾添加 .json 扩展名。如下所示:
您将获得所有DBpedia页面匹配的数据与JSON中的'Taj_Mahal'。 现在,您必须在JSON中展开此“http://dbpedia.org/resource/Taj_Mahal”以仅获取与该页面相关的数据。