DBPedia - 每个资源最相关的谓词

时间:2016-12-16 18:28:42

标签: sparql rdf semantic-web dbpedia linked-data

我想确定DBPedia和Yago中任何资源的最相关属性/谓词(不是对象)(例如前20名)。例如,对于音乐艺术家而言,您会对他的年龄,流派,音乐标签,唱片等感兴趣。

一个好的算法应该是什么样才能解决这个问题? 我目前的天真方法如下。

首先,我按照“大小”排序所有课程。 (警告,非常昂贵的查询!)

SELECT distinct ?class (count(distinct ?e) as ?c)
WHERE {
    ?e rdf:type ?class .
}
ORDER BY DESC(?c)

然后我对每个类进行查询,以获得该类中具有该特定属性的实体数。

SELECT distinct ?prop (count(distinct ?e) as ?c)
WHERE {
    ?e rdf:type <--CLASS--> .
    ?e ?prop []
}
ORDER BY DESC(?c)

<--CLASS-->由相应类的URI替换。经过一些后期处理后,这给我一个这样的列表:

"dbo:Agent": {
    "count": 1974654,
    "properties": {
        "http://www.w3.org/1999/02/22-rdf-syntax-ns#type": 399948,
        "http://www.w3.org/2002/07/owl#sameAs": 67799,
        "dbp:name": 22272,
        "dbp:hasPhotoCollection": 13122,
        "http://xmlns.com/foaf/0.1/givenName": 10799,
        "dbo:birthPlace": 10055,
        "dbo:birthDate": 9953,
        "dbo:birthYear": 9735
    }
},
"dbo:Person": {
    count: 
...

它告诉我,哪些属性与哪个类最相关。当然,在后面的步骤中应该忽略像http://www.w3.org/2002/07/owl#sameAs这样的“元”属性。

但是,实体属于多个类,可能每个实体都很重要,并提供其他信息。例如。在dbr:John_Lennondbo:Persondbo:MusicalArtist是(等等)。我需要结合这些类的属性排名。我想到了以下方法,但我不确定这是否真的是一个合理的解决方案。

所以我的想法是通过除以 classA 中的实体数量来计算每个属性的相对权重(例如 propA classA 中)按 classA 中的属性总数 propX 。如果我想合并两个类,那么,例如 classA classB (或 Person MusicalArtist ),我只是将两个类的属性组合在一起,按其相对权重排序(这是一个合法的比较?)。如果两个类中都有属性,我会计算两者的调和均值。

假设上述步骤实际上有意义(请告诉我你的想法),我还有一个问题。我想要结合来自DBPedia和Yago的信息,因此对于dbr:John_Lennon我想从Yago获取等效的(owl:sameAsyr:John_Lennon。如何合并两个数据集中的属性排名,最终得到包含DBP和Yago属性组合的前20个最相关属性的列表?

0 个答案:

没有答案