我正在从文本中提取实体,大部分时间我都会获得多个实体,例如<http://dbpedia.org/resource/NASA>
,<http://dbpedia.org/resource/IPhone>
和<http://dbpedia.org/resource/Apple_Inc.>
这两个人,不共享dct:subject
有没有办法查询路径以获取连接我的实体的主题列表?
我的目标是创建一种“页面排名”,以找到给定实体最相关的主题。
最好用计数器在它们之间有多少步。
我试图暴力破解它,从一个实体开始,获得所有主题,然后获得所有主题,等等,但查询开始变得庞大。
答案 0 :(得分:2)
来自@ AKSW的评论......
一个选项,不限制skos:broader
路径长度的长度,这将超过公共DBpedia端点上的资源消耗限制,但可以在私有实例(in the cloud或其他地方)上运行你可以放松这些限制 -
PREFIX dbr: <http://dbpedia.org/resource/>
PREFIX dct: <http://purl.org/dc/terms/>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
SELECT DISTINCT ?cat
WHERE
{ <http://dbpedia.org/resource/Apple_Inc.>
dct:subject/skos:broader* ?cat .
dbr:IPhone
dct:subject/skos:broader* ?cat . }
简洁的选项,使用特定于Virtuoso的语法(基于SPARQL属性路径的早期草案)来限制路径的长度(这里需要至少1 skos:broader
并允许最多3个) -
PREFIX dbr: <http://dbpedia.org/resource/>
PREFIX dct: <http://purl.org/dc/terms/>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
SELECT DISTINCT ?cat
WHERE
{ ?cat
^skos:broader{1,3}/^dct:subject
<http://dbpedia.org/resource/Apple_Inc.> ,
dbr:IPhone
}
另一个简洁的选项,这次使用标准的SPARQL Property Paths syntax来限制路径的长度 -
PREFIX dbr: <http://dbpedia.org/resource/>
PREFIX dct: <http://purl.org/dc/terms/>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
SELECT DISTINCT ?cat
WHERE
{ ?cat
^skos:broader/^skos:broader?/^skos:broader?/^dct:subject
<http://dbpedia.org/resource/Apple_Inc.> ,
dbr:IPhone
}
您还可以在WHERE子句中使用带有未反转路径的2个语句,首先是Virtuoso特定的形式 -
{ <http://dbpedia.org/resource/Apple_Inc.>
dct:subject/skos:broader{1,3} ?cat .
dbr:IPhone
dct:subject/skos:broader{1,3} ?cat .
}
- 然后在标准的SPARQL中 -
{ <http://dbpedia.org/resource/Apple_Inc.>
dct:subject/skos:broader/skos:broader?/skos:broader? ?cat .
dbr:IPhone
dct:subject/skos:broader/skos:broader?/skos:broader? ?cat .
}