我正在尝试使用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
最后的手段是让我抓取每个结果网址,然后根据是否有类型信息确定它是否是艺术家。
答案 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)
祝你好运!