如何使用Dbpedia ruby​​ gem获取流派信息

时间:2014-08-21 13:39:20

标签: ruby-on-rails ruby screen-scraping wikipedia dbpedia

我正在尝试使用Dbpedia gem https://github.com/farbenmeer/dbpedia

从维基百科中获取艺术家信息

但我无法弄清楚结果项的类型是什么。

基本上我想修改以下功能,找出哪个结果是艺术家,然后返回其网址:

  def self.get_slug(q)
    results = Dbpedia.search(q)
    result  = # Do something to find out the result that is an artist
    uri   = result.uri rescue ""
    return uri
  end

最后的手段是让我抓取每个结果网址,然后根据是否有类型信息确定它是否是艺术家。

1 个答案:

答案 0 :(得分:3)

您可以利用DBpedia's SPARQL端点,而不是废弃所有结果。

假设您需要包含genre的所有内容的列表。你可以查询:

SELECT DISTINCT ?thing WHERE {
  ?thing dbpedia-owl:genre ?genre
}
LIMIT 1000

但是说你不想要一切,你只是寻找艺术家。它可以是音乐家,画家,演员等。

SELECT DISTINCT ?thing WHERE {
  ?thing dbpedia-owl:genre ?genre ;
         rdf:type          dbpedia-owl:Artist

}
LIMIT 1000

或许你只想要音乐家 OR 乐队:

SELECT DISTINCT ?thing WHERE {
  {
    ?thing dbpedia-owl:genre ?genre ;
           rdf:type          dbpedia-owl:Band
  }
  UNION
  {
    ?thing dbpedia-owl:genre ?genre ;
           a                 dbpedia-owl:MusicalArtist # `a` is a shortcut for `rdf:type`
  } 
}
LIMIT 1000

归根结底,你想要拥有" mega"的音乐家或乐队。在他们的名字中,例如Megadeath或Megan White,以及资源的URL。

SELECT DISTINCT ?thing, ?url, ?genre WHERE {
  ?thing foaf:name             ?name ;
         foaf:isPrimaryTopicOf ?url .
  ?name  bif:contains "'mega*'" .
  {
    ?thing dbpedia-owl:genre ?genre ;
           a                 dbpedia-owl:Band
  }
  UNION
  {
    ?thing dbpedia-owl:genre ?genre ;
           a                 dbpedia-owl:MusicalArtist
  }
  UNION
  {
    ?thing a <http://umbel.org/umbel/rc/MusicalPerformer>
  }
}
LIMIT 1000

尝试使用DBpedia's SPARQL Query Editor尝试此查询。

您指出的dbpedia gem会在其API中显示sparql-client。所以,我认为您将能够使用#query方法

运行所有这些查询
Dbpedia.sparql.query(query_string)

祝你好运!