将DBpedia类型映射到Wikipedia类别

时间:2014-11-04 15:25:52

标签: sparql dbpedia

我正在尝试将DBPedia类型映射到Wikipedia Categories,一个简单的例子就是以下SPARQL查询

select distinct ?cat where {
?s a dbpedia-owl:LacrossePlayer;  dcterms:subject ?cat . filter(regex(?cat,'players','i') )
}  limit 100

SPARQL Result
但这非常低效,因为它必须首先将DBpedia类型映射到DBpedia命名实体(资源),然后提取其相应的Wikipedia类别。我正在尝试为许多其他DBpedia类型执行此映射 是否有直接或更有效的方法来做到这一点?

1 个答案:

答案 0 :(得分:1)

改善过滤器可能会有所帮助......

作为初步说明,如果您删除或改进过滤器,可能会获得一些加速。当然,你可以删除它,但你也可以使它更有效率,因为你并没有真正使用任何特殊的正则表达式。只是做

filter contains(lcase(str(?cat)),'players')

检查?cat 的URI是否包含字符串 players 。甚至可能更好(我不确定)抓住?cat 的英文 rdfs:label 并检查一下,因为你不会有做案例或字符串转换。

...但是很多的结果。

  

但这是非常低效的,因为它必须首先映射DBpedia   类型到DBpedia命名实体(资源),然后提取他们的   相应的维基百科类别。我正在尝试为此映射   很多其他DBpedia类型。是否有直接或更有效的方式   这样做?

我不确定这究竟是什么效率低下的。 DBpedia类型和类别关联的唯一方式是资源具有类型(通过 rdf:type )并具有类别(通过 dcterms:subject )。如果要查找连接,则需要查找类型的实例及其所属的类别。 可能有可能您可以查看是否有任何特定信息框提供文章类别,并在信息框映射中用于提供DBpedia类型。这是直接获取类别/ DBpedia类型的唯一方法,无需经过我能想到的实例,而且我也不知道当前数据集是否有这种信息。

通常,由于维基百科类别是一种类型层次结构,因此会有批次类别与任何特定类型的实例相关联。例如,我们可以使用以下查询计算与 Fish LacrossePlayer 类型相关联的类别数量:

select ?type (count(distinct ?category) as ?nCategories) where {
  values ?type { dbpedia-owl:Fish dbpedia-owl:LacrossePlayer }
  ?type ^a/dcterms:subject ?category 
}
group by ?type

SPARQL results

type                                        nCategories
http://dbpedia.org/ontology/LacrossePlayer  346
http://dbpedia.org/ontology/Fish            2375

该查询响应非常快,您甚至可以非常轻松地获得这些类别:

select distinct ?type ?category where {
  values ?type { dbpedia-owl:Fish dbpedia-owl:LacrossePlayer }
  ?type ^a/dcterms:subject ?category 
}
order by ?type
limit 4000

SPARQL results

但是,当您开始使用具有更多实例的类型时,这些计数会变大,并且查询需要一段时间才能返回。例如,一种非常常见的类型,如放置

select ?type (count(distinct ?category) as ?nCategories) where {
  values ?type { dbpedia-owl:Place }
  ?type ^a/dcterms:subject ?category 
}
group by ?type

type                               nCategories
http://dbpedia.org/ontology/Place  191172

我不建议尝试从远程服务器中提取所有数据。如果要提取它,则应在本地加载数据。