WikiData, обнаруживающая объекты определенного типа или подтипа, расположенные в определенном городе.

Моя конкретная проблема в том, что у меня есть место под названием Beacon Theater. Я хочу найти лучшее соответствие для этого в Викиданных.

A Поиск в Викиданных даст мне три результата:

В прямом эфире в Beacon Theater (Q6656601)

Beacon Theater (Q264186): концертный зал

Beacon Theaters (Q19110809)

Первый - фильм, второй - правильный результат, а третий - решение Верховного суда.

Используя этот вызов API, я можно найти идентификаторы для всех трех:

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

Следующим шагом будет получение подробной информации по каждому из них. Я использую noreferred"> этот вызов для получения информации обо всех трех объектах

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

На этом этапе я хочу перебрать их и найти то, что является зданием. Возможно, позже я захочу добавить способ найти тот, который находится в Нью-Йорке.

Моя проблема в том, что правильный ответ - это не здание (Q41176). Значение P31 - Q3469910, это заведение исполнительского искусства, поэтому я не могу сортировать об этом (представьте, что в будущем я буду использовать этот код для поиска музея. Музей - это тоже здание, но не место проведения исполнительских искусств. Поиск Beacon Theater - лишь пример.

Итак, вопрос: как мне найти правильную запись, которую для целей этого вопроса я определяю как:

  1. Быть зданием (или, возможно, происходить из здания)
  2. Необязательный ответ: находиться в Нью-Йорке (в случае нескольких совпадений это еще больше ограничит результаты)

Я думаю, что для этого мне нужно выполнить запрос SPARQL в качестве второго запроса, но из примеров я не мог понять, как это сделать, и будет ли это правильный / самый простой способ. Может быть, даже запрос SPARQL, который выполнит все вышеперечисленное за один запрос?


person Andy    schedule 02.11.2016    source источник


Ответы (2)


В вашем случае точное совпадение ярлыка может уже подойти

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"}
}

noreferrer попробуйте!

person Wolfgang Fahl    schedule 09.10.2020

У меня есть проект, в котором я сталкиваюсь с такими же проблемами, но для книг, которые также могут быть комиксами , или манга и т. д. Самым простым решением, которое я нашел, было сохранить список «псевдонимов сущностей», то есть сущностей, которые могут рассматриваться как совпадающие при поиске книги. Он не такой динамичный, как запрос SPARQL, и требует периодических обновлений - добавление вновь обнаруженных совпадающих сущностей, удаление проблемных - но это намного быстрее и удовлетворяет большинство моих потребностей.

person maxlath    schedule 02.11.2016
comment
Спасибо, но я предпочитаю использовать защитный код и не рассчитывать на постоянное обновление проекта. Я считаю, что в SPARQL есть какое-то решение, которое могло бы это сделать. Кодирование с константами (как вы здесь описываете) обычно, на мой взгляд, является рецептом катастрофы, если вам нужен код, соответствующий требованиям завтрашнего дня. Спасибо хоть :) - person Andy; 03.11.2016