无法从 Sparql 中抽象出印度城市
Not able to get Indian cities abstract from Sparql
我正在尝试使用 Sqarql 和 dbpedia 数据集来获取摘要。
当我 运行 在 Virtuoso 上进行以下查询时,
PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
SELECT DISTINCT ?abstract WHERE {
[ rdfs:label ?name
; dbpedia-owl:abstract ?abstract
] .
FILTER langMatches(lang(?abstract),"en")
VALUES ?name { "London"@en }
}
LIMIT 10
我得到了结果,但是如果我将名称修改为 'Gokarna' 这是南印度的旅游胜地,我就不会得到任何数据。但是,我确实在 dbpedia 上看到了 Gokarna(http://dbpedia.org/page/Gokarna,_India) 的在线资源页面。我究竟做错了什么?我需要获取近 800 个印度地方的类似数据。
我没有使用 Sparql 的经验,但我在您的代码中看到了很多,并使用 dbpedia 库进行了检查...
不仅仅是戈卡纳。它是 "Gokarna,_India".
这应该有效..
PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
SELECT DISTINCT ?abstract WHERE {
[ rdfs:label ?name
; dbpedia-owl:abstract ?abstract
] .
FILTER langMatches(lang(?abstract),"en")
VALUES ?name { "Gokarna,_India"@en }
}
LIMIT 10
如果您查看链接到的印度 Gokarna 的 DBpedia 页面,您会注意到它的 rdfs:label
是 "Gokarna, India"。但是它的 foaf:name
只是 "Gokarna"。这意味着您应该将查询修改为:
PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
SELECT DISTINCT ?abstract WHERE {
[ foaf:name ?name
; dbpedia-owl:abstract ?abstract
] .
FILTER langMatches(lang(?abstract),"en")
VALUES ?name { "Gokarna"@en }
}
LIMIT 10
虽然这也会 return 其他 Gokarnas:Gokarna、尼泊尔、Gokarna、孟加拉国和 Gokarna(电影)。如果你想删除这些,你将不得不找出另一个过滤器(可能 dbo:country dbr:India
)。
当您使用 values
时,您只会获得与您的字符串完全匹配的那些。对于 Gokarna,这适用于 @de、@it、@fr,但不适用于 @en,因为标签不同,您也可以从之前的答案中看到。
我建议使用 contains
,而不是 values
:
PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
SELECT DISTINCT ?abstract WHERE {
[ rdfs:label ?name
; dbpedia-owl:abstract ?abstract
] .
FILTER langMatches(lang(?abstract),"en")
FILTER langMatches(lang(?name),"en")
FILTER CONTAINS (?name, "Gokarna" )
}
LIMIT 10
我正在尝试使用 Sqarql 和 dbpedia 数据集来获取摘要。 当我 运行 在 Virtuoso 上进行以下查询时,
PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
SELECT DISTINCT ?abstract WHERE {
[ rdfs:label ?name
; dbpedia-owl:abstract ?abstract
] .
FILTER langMatches(lang(?abstract),"en")
VALUES ?name { "London"@en }
}
LIMIT 10
我得到了结果,但是如果我将名称修改为 'Gokarna' 这是南印度的旅游胜地,我就不会得到任何数据。但是,我确实在 dbpedia 上看到了 Gokarna(http://dbpedia.org/page/Gokarna,_India) 的在线资源页面。我究竟做错了什么?我需要获取近 800 个印度地方的类似数据。
我没有使用 Sparql 的经验,但我在您的代码中看到了很多,并使用 dbpedia 库进行了检查... 不仅仅是戈卡纳。它是 "Gokarna,_India".
这应该有效..
PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
SELECT DISTINCT ?abstract WHERE {
[ rdfs:label ?name
; dbpedia-owl:abstract ?abstract
] .
FILTER langMatches(lang(?abstract),"en")
VALUES ?name { "Gokarna,_India"@en }
}
LIMIT 10
如果您查看链接到的印度 Gokarna 的 DBpedia 页面,您会注意到它的 rdfs:label
是 "Gokarna, India"。但是它的 foaf:name
只是 "Gokarna"。这意味着您应该将查询修改为:
PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
SELECT DISTINCT ?abstract WHERE {
[ foaf:name ?name
; dbpedia-owl:abstract ?abstract
] .
FILTER langMatches(lang(?abstract),"en")
VALUES ?name { "Gokarna"@en }
}
LIMIT 10
虽然这也会 return 其他 Gokarnas:Gokarna、尼泊尔、Gokarna、孟加拉国和 Gokarna(电影)。如果你想删除这些,你将不得不找出另一个过滤器(可能 dbo:country dbr:India
)。
当您使用 values
时,您只会获得与您的字符串完全匹配的那些。对于 Gokarna,这适用于 @de、@it、@fr,但不适用于 @en,因为标签不同,您也可以从之前的答案中看到。
我建议使用 contains
,而不是 values
:
PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
SELECT DISTINCT ?abstract WHERE {
[ rdfs:label ?name
; dbpedia-owl:abstract ?abstract
] .
FILTER langMatches(lang(?abstract),"en")
FILTER langMatches(lang(?name),"en")
FILTER CONTAINS (?name, "Gokarna" )
}
LIMIT 10