找到在DBpedia中使用SPARQL连接entites的主题

时间:2017-09-19 23:30:14

标签: sparql dbpedia

我正在从文本中提取实体,大部分时间我都会获得多个实体,例如<http://dbpedia.org/resource/NASA><http://dbpedia.org/resource/IPhone><http://dbpedia.org/resource/Apple_Inc.>

这两个人,不共享dct:subject有没有办法查询路径以获取连接我的实体的主题列表?

我的目标是创建一种“页面排名”,以找到给定实体最相关的主题。

最好用计数器在它们之间有多少步。

我试图暴力破解它,从一个实体开始,获得所有主题,然后获得所有主题,等等,但查询开始变得庞大。

1 个答案:

答案 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  .
  }