2016-11-02 81 views
0

我的具体问题是我有一个名为“Beacon Theatre”的地方。我想找到的是在Wikidata中与此最匹配的内容。WikiData,定位特定类型或子类型的实体,位于特定城市

一个Wikidata Search会给我三种结果:

住在灯塔剧院(Q6656601)

灯塔剧院(Q264186):表演场地

灯塔剧院(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,所以我不能真正分类(想象一下,在未来,我使用这个代码来搜索博物馆,博物馆也是一座建筑物,但不是表演艺术场所。搜索灯塔剧院仅仅是一个例子

所以问题:我如何才能找到正确的条目,这对于这个问题的目的,我定义为:

  1. 作为一个建筑(或者是从衍生a Building)
  2. 可选答案:位于纽约(如果有多个匹配,这会进一步限制结果)

我想我需要做一个SPARQL查询作为第二个查询来做到这一点,但从例子我无法弄清楚如何,或者如果这将是正确的/最简单的方法。也许甚至可以在一个查询中完成上述所有操作的SPARQL查询?

回答

-1

我有a project我遇到同样的问题,但对于书籍,也可以是漫画书,漫画等。我找到的最简单的解决方案是保留a list of "alias entities",也就是说,可以考虑匹配的实体当寻找一本书时。它不像SPARQL查询那样动态,并且需要定期更新 - 添加新发现的匹配实体,删除有问题的实体 - 但速度更快,并满足我的大部分需求。

+0

谢谢,但我宁愿防守编码,也不要指望不断更新项目。在SPARQL中,我相信会有一些解决方案可以做到这一点。如果你想要面向未来的代码,用常数编码(如你在这里描述的)通常在我看来是一个灾难的秘诀。虽然谢谢:) – Andy