2016-11-02 52 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