如何使用SPARQL查找类似的内容

时间:2014-01-22 17:46:38

标签: rdf sparql semantic-web linkedmdb

我正在尝试使用SPARQL识别事物之间的概念重叠。

以电影为例(LinkedMDB数据),如果我有一部电影,“The Matrix”,我的目标是列出与该电影相似的电影,我可能会先做以下几点:

  • 黑客帝国
    • 获取流派
    • 让演员
    • 获得导演
    • 获取位置

然后使用我在矩阵中识别的东西,我会查询具有这些属性的东西(伪查询)

SELECT movie, genre, director, location, actors
WHERE {
  genre is action or sci-fi .

  director are the Wachowski brothers .

  location is set in a big city .

  OPTIONAL( actors were in the matrix . )
}

SPARQL中是否有允许我检查不同节点之间属性重叠的内容?或者必须像我提议的那样手动完成?

2 个答案:

答案 0 :(得分:11)

匹配某些特定属性

听起来你要求的是

select ?similarMovie ?genre ?director ?location ?actor where { 
  values ?movie { <http://.../TheMatrix> }
  ?genre   ^:hasGenre ?movie, ?similarMovie .
  ?director ^:hasDirectory ?movie, ?similarMovie .
  ?location ^:hasLocation ?movie, ?similarMovie .
  optional { ?actor ^:hasActor ?movie, ?similarMovie .
}

使用向后路径表示法^和对象列表使其比以下更短:

select ?similarMovie ?genre ?director ?location ?actor where { 
  values ?movie { <http://.../TheMatrix> }
  ?movie        :hasGenre    ?genre .
  ?movie        :hasDirector ?director .
  ?movie        :hasLocation ?location .
  ?similarMovie :hasGenre    ?genre .
  ?similarMovie :hasDirector ?director .
  ?similarMovie :hasLocation ?location .
  optional { 
    ?movie        :hasActor ?actor .
    ?similarMovie :hasActor ?actor .
  }
}

例如,使用DBpedia,我们可以获得与The Matrix有相同经销商和电影摄影师的其他电影:

select ?similar ?cinematographer ?distributor where {
  values ?movie { dbpedia:The_Matrix }
  ?cinematographer ^dbpprop:cinematography ?movie, ?similar .
  ?distributor ^dbpprop:distributor ?movie, ?similar .
}
limit 10

SPARQL Results

结果都属于同一特许经营权;你得到:黑客帝国,矩阵重装,矩阵革命,黑客帝国(特许经营)和终极矩阵集。

匹配至少一些属性

也可以要求至少具有一些共同属性的东西。两件事物在被认为是相似之前需要有多少属性,这显然是主观的,取决于具体的数据,需要一些实验。例如,我们可以要求DBpedia上的Films至少有35个与Matrix相同的属性,并带有如下查询:

select ?similar where { 
  values ?movie { dbpedia:The_Matrix }
  ?similar ?p ?o ; a dbpedia-owl:Film .
  ?movie   ?p ?o .
}
group by ?similar ?movie
having count(?p) > 35

SPARQL results

这会拍摄13部电影(包括黑客和其他电影):

  • V for Vendetta(电影)
  • The Matrix
  • 邮差(电影)
  • 执行决定
  • 入侵(电影)
  • 拆迁人(电影)
  • The Matrix(特许经营)
  • The Matrix Reloaded
  • Freejack
  • 退出伤口
  • 矩阵革命
  • 爆发(电影)
  • Speed Racer(电影)

使用这种方法,您甚至可以使用常用属性的数量作为相似性的度量。例如:

select ?similar (count(?p) as ?similarity) where { 
  values ?movie { dbpedia:The_Matrix }
  ?similar ?p ?o ; a dbpedia-owl:Film .
  ?movie   ?p ?o .
}
group by ?similar ?movie
having count(?p) > 35
order by desc(?similarity)

SPARQL results

The Matrix             206
The Matrix Revolutions  63
The Matrix Reloaded     60
The Matrix (franchise)  55
Demolition Man (film)   41
Speed Racer (film)      40
V for Vendetta (film)   38
The Invasion (film)     38
The Postman (film)      36
Executive Decision      36
Freejack                36
Exit Wounds             36
Outbreak (film)         36

答案 1 :(得分:0)

有了DBpedia中的新前缀,Joshua Taylor的答案将是:

select ?similar (count(?p) as ?similarity) where { 
  values ?movie { dbr:The_Matrix }
  ?similar ?p ?o ; a dbo:Film .
  ?movie   ?p ?o .
}
group by ?similar ?movie
having (count(?p) > 35)
order by desc(?similarity)

SPARQL results