2016-11-02 4 views
0

Mon problème spécifique est que j'ai un endroit appelé "Beacon Theatre". Ce que je veux trouver est la meilleure correspondance pour cela dans Wikidata.WikiData, localiser des entités avec un type ou sous-type spécifique, situé dans une ville spécifique

Un Wikidata Search me donnera trois résultats:

en direct au Beacon Theater (de Q6656601)

Beacon Theatre (de Q264186): spectacle lieu arts

Théâtres Beacon (de Q19110809)

Le premier est un film, le deuxième le résultat correct, et le troisième est une décision de la Cour suprême.

En utilisant this appel API, je peux trouver les id pour les trois:

https://www.wikidata.org/w/api.php?action=query&format=json&list=search&srsearch=Beacon Theater 

étape suivante consiste les détails pour chacun de ceux-ci. J'utilise this appel pour obtenir l'information pour les trois entités

"https://www.wikidata.org/w/api.php?action=wbgetentities&props=descriptions|labels|claims&ids=Q6656601|Q264186|Q19110809&languages=en&format=json" 

À ce stade, je veux itérer sur eux et trouver celui qui est un bâtiment. Je pourrais aussi vouloir ajouter plus tard un moyen de trouver celui situé à New York.

Mon problème est que la bonne réponse n'est pas un bâtiment (Q41176). La valeur P31 est Q3469910, ce qui est un Performance Arts Venue, donc je ne peux pas vraiment faire le tri (Imaginez que j'utilise ce code à la recherche d'un musée.) Un musée est aussi un bâtiment, mais pas un lieu de spectacle. recherche de Beacon Theater est juste un exemple

Alors question. Comment puis-je trouver l'entrée correcte, qui, aux fins de cette question que je définirais comme:

  1. être un bâtiment (ou d'être peut-être dérivé de a Building)
  2. Réponse optionnelle: Être situé à New York (En cas de résultats multiples, cela limiterait davantage les résultats)

Je pense que j'ai besoin de faire une requête SPARQL comme deuxième requête pour faire cela, mais à partir des exemples, je ne pouvais pas vraiment comprendre comment, ou si ce serait la bonne/la plus facile. Peut-être même une requête SPARQL qui ferait tout ce qui précède dans une requête?

Répondre

-1

J'ai a project où je rencontre le même genre de problèmes mais pour les livres, qui peuvent aussi être des bandes dessinées, ou manga etc. La solution la plus simple que j'ai trouvée était de garder a list of "alias entities", c'est-à-dire des entités qui pourraient être considérées en cherchant un livre Ce n'est pas aussi dynamique qu'une requête SPARQL et nécessite des mises à jour périodiques - en ajoutant des entités correspondantes nouvellement trouvées, en supprimant celles qui sont problématiques - mais cela est beaucoup plus rapide et satisfait la plupart de mes besoins.

+0

Merci, mais je préfère coder défensivement et ne pas compter sur la mise à jour constante du projet. Dans SPARQL je crois qu'il y aurait une solution qui pourrait faire cela. Coder avec des constantes (comme vous le décrivez ici) sont généralement à mon avis une recette pour le désastre si vous voulez un code à l'épreuve du futur. Merci quand même :) – Andy