我的具体问题是我有一个名为" Beacon Theatre"的地方。我想要找到的是维基数据中最匹配的。
Wikidata Search会给我三个结果:
住在灯塔剧院(Q6656601)
灯塔剧院(Q264186):表演艺术场地
Beacon Theatres(Q19110809)
第一部是电影,第二部是正确的结果,第三部是最高法院的决定。
使用this API调用,我可以找到所有三个的ID:
https://www.wikidata.org/w/api.php?action=query&format=json&list=search&srsearch=Beacon Theater
下一步是获取每个细节。我使用this调用来获取所有三个实体的信息
"https://www.wikidata.org/w/api.php?action=wbgetentities&props=descriptions|labels|claims&ids=Q6656601|Q264186|Q19110809&languages=en&format=json"
此时,我想迭代它们并找到一个建筑物。我后来也想添加一种方法来找到位于纽约的那个。
我的问题是正确答案不是建筑物(Q41176)。 P31值是Q3469910,这是一个Performance Arts Venue,所以我无法对此进行排序(想象一下,我将来使用此代码搜索博物馆。博物馆也是一座建筑,但不是表演艺术场地。寻找灯塔剧院只是一个例子。
所以问题:如何找到正确的条目,为了这个问题,我将其定义为:
我认为我需要将SPARQL查询作为第二个查询来执行此操作,但是从示例中我无法弄清楚如何,或者这是否是正确/最简单的方法。甚至可能在一个查询中执行上述所有操作的SPARQL查询?
答案 0 :(得分:0)
对于您而言,完全可以匹配标签
SELECT DISTINCT ?loc ?locLabel ?locDescription
WHERE
{
values ?locLabel {"Beacon Theater"@en }
?loc rdfs:label ?locLabel .
SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en"}
}
答案 1 :(得分:-1)
我有a project我遇到同样的问题,但对于书籍,也可以是漫画书或漫画等。我找到的最简单的解决方案是保留a list of "alias entities",即在寻找书籍时可以考虑匹配的实体。它不像SPARQL查询那样动态,需要定期更新 - 添加新发现的匹配实体,删除有问题的实体 - 但这样更快,更能满足我的大部分需求。