Sparql DBPedia-每个资源最相关的谓词
我想为DBPedia和Yago中的任何资源确定最相关的属性/谓词(而不是对象)(例如前20个)。例如,直觉上,对于一个音乐艺术家来说,你会对他的年龄、流派、音乐标签、唱片等感兴趣 一个好的算法应该是什么样子来解决这个问题? 我目前天真的做法如下 首先,我检索所有的类,按它们的“大小”排序。(警告,非常昂贵的查询!) 然后,我对这些类中的每一个进行查询,以获得该类中具有特定属性的实体的数量Sparql DBPedia-每个资源最相关的谓词,sparql,rdf,semantic-web,dbpedia,linked-data,Sparql,Rdf,Semantic Web,Dbpedia,Linked Data,我想为DBPedia和Yago中的任何资源确定最相关的属性/谓词(而不是对象)(例如前20个)。例如,直觉上,对于一个音乐艺术家来说,你会对他的年龄、流派、音乐标签、唱片等感兴趣 一个好的算法应该是什么样子来解决这个问题? 我目前天真的做法如下 首先,我检索所有的类,按它们的“大小”排序。(警告,非常昂贵的查询!) 然后,我对这些类中的每一个进行查询,以获得该类中具有特定属性的实体的数量 SELECT distinct ?prop (count(distinct ?e) as ?c) WHERE
SELECT distinct ?prop (count(distinct ?e) as ?c)
WHERE {
?e rdf:type <--CLASS--> .
?e ?prop []
}
ORDER BY DESC(?c)
它告诉我,哪些属性与哪个类最相关。当然,像http://www.w3.org/2002/07/owl#sameAs
应在以后的步骤中忽略
然而,实体存在于多个类中,可能每个类都很重要,并提供了额外的信息。例如,dbr:John_Lennon
出现在dbo:Person
和dbo:MusicalArtist
中。我需要合并这些类别的房地产排名。我想到了以下方法,但我不确定这是否是一个合理的解决方案
所以我的想法是计算每个属性(例如classA中的propX)的相对权重,方法是将classA中具有propX的实体数除以classA中的属性总数。如果我想合并两个类,例如classA和classB(或者Person和MusicalArtist),我只需将这两个类的属性按相对权重排序(这是合法的比较吗?)。如果两个类中都有一个属性,我会计算这两个类的调和平均值
假设上述步骤实际可行(请让我知道您的想法),我还有一个问题。我想合并来自DBPedia和Yago的信息,因此对于
dbr:John_Lennon
我想从Yago获取等价的(owl:sameAs
)yr:John_Lennon
。如何合并这两个数据集中的属性排名,最终得到由DBP和Yago属性组成的前20个最相关属性的列表?不清楚如何定义相关性。例如,您的示例dbr:John_Lennon
属于dbo:Person
和dbo:MusicalArtist
,因为后者是前者的子类。显然,如果某些属性仅由子类使用,则它们的区别性更强。在这种情况下,定义“相关性”其实并不简单。例如,我也没有一个客观的方法来评估我的解决方案,一旦它完成。评估可能是手动查看一些随机选取的示例,并主观检查结果是好是坏。但是你对如何进行还有什么建议吗?特别是在合并两个或多个数据集的排名方面……不清楚如何定义相关性。例如,您的示例dbr:John_Lennon
属于dbo:Person
和dbo:MusicalArtist
,因为后者是前者的子类。显然,如果某些属性仅由子类使用,则它们的区别性更强。在这种情况下,定义“相关性”其实并不简单。例如,我也没有一个客观的方法来评估我的解决方案,一旦它完成。评估可能是手动查看一些随机选取的示例,并主观检查结果是好是坏。但是你对如何进行还有什么建议吗?特别是在合并两个或多个数据集的排名方面。。。
SELECT distinct ?prop (count(distinct ?e) as ?c)
WHERE {
?e rdf:type <--CLASS--> .
?e ?prop []
}
ORDER BY DESC(?c)
"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:
...