place-index отвечает на вопрос «что интересного рядом с этой точкой и насколько это известно». Своих мест он не придумывает: сводит открытые источники — Википедию, Wikidata и Викигид, а также сайты-подборки «что посмотреть в городе» — в один индекс и выбирает из тысяч объектов вокруг те, о которых читают и которые советуют посмотреть.
Что умеет
- Места вокруг точки. Выберите город или место по названию либо кликните по карте — слева появятся известные места в радиусе, самые известные первыми, на карте — они же.
- Что советуют путеводители. У места показано, сколько независимых сайтов-подборок «что посмотреть» его советуют. Место, которое советуют хотя бы два сайта, попадает в выдачу, даже если статью о нём почти не читают: музей уездной медицины в Елабуге, маяк в Дербенте.
- Поиск по названию по всей стране. Слова в любом порядке, без окончаний: «башня шухова» найдёт все шесть Шуховских башен с городом рядом и расстоянием; Enter — все совпадения списком и на карте.
- Отличает места от всего остального. Министерства, заводы, стадионы и войны в Википедии читают больше, чем водопады; фильтр «только места» убирает их по классу объекта из Wikidata.
- Советы Викигида. Для города, у которого есть статья Викигида, — вкладка с тем, что советуют посмотреть люди, с описаниями.
- Опознание по названию. Через API: название («Печёрский монастырь») и примерная точка — на выходе статья, координаты и известность. Для сервисов, которые находят места в текстах.
- Признак значимости для других сервисов. Сервис со своей базой мест присылает точки пачками, получает для каждой статью, просмотры в месяц и класс — и сортирует свои точки по известности. Так подключается travel_assist.
Источники
| Источник | Что даёт | В индексе | Данные на | Лицензия |
|---|---|---|---|---|
Русская Википедия, дампы geo_tags и page |
статьи с координатами, тип объекта (город, река, достопримечательность) и размер | … | … | CC BY-SA 4.0 |
| Просмотры Википедии за месяц | сколько раз статью прочитали люди (без ботов), с компьютера и телефона — мера известности | … | … | CC0 |
| Wikidata, классы объектов (P31) | чем объект является: музей, крепость, компания, вокзал — отсюда метка «место / не место» | … | … | CC0 |
| Русский Викигид | что советуют посмотреть и сделать в городе, с описанием и координатами | … | … | CC BY-SA 4.0 |
| Сайты-подборки «что посмотреть в городе»: поиск через свой SearXNG, до 8 сайтов на город | сколько независимых сайтов советуют место — голос; перепечатки одного текста считаются один раз. Названия мест со страниц выделяет языковая модель, со статьями их сопоставляет сервис | … | … | тексты сайтов не хранятся в индексе — только голоса |
| OpenStreetMap | подложка карты в веб-поиске; в индекс не входит | — | всегда свежая | ODbL |
Места, которые советуют сайты, но статьи о них в Википедии нет, пока не показываются: у них нет координат.
Как читать выдачу
Известность
Число просмотров статьи Википедии за месяц. Грубо, но честно: Кремль читают больше, чем бюст на соседней улице. Порог «от N просмотров» отсекает малоизвестное.
Советуют сайты
«Советуют 5 сайтов» — место есть в подборках «что посмотреть» на пяти разных сайтах. Порядок в выдаче — по большему из двух: просмотров или голосов, где голос весит как 400 просмотров в месяц. Поэтому местный музей, который советуют все путеводители, стоит рядом с известными местами, а не теряется за порогом просмотров.
Метка у места
- место и не место — решено по классу объекта в Wikidata; сами классы показаны серым рядом с местом. Если хотя бы один класс из «не мест» (компания, город, вокзал, стадион…) — не место; иначе, если есть класс из «мест» (музей, храм, крепость, парк, памятник…) — место.
- без класса — у статьи меньше 200 просмотров в месяц (классы спрашиваются только у них) или в Wikidata класса нет. Такие отбираются по типу объекта и словам в названии: «битва», «(компания)», «(завод)».
- Викигид — у выбранного города есть статья с советами.
Обновление
Индекс пересобирается сам раз в квартал — 5 января, апреля, июля и октября: свежие дампы, просмотры за прошлый месяц, классы для новых статей. Если что-то пошло не так, прежний индекс остаётся на месте, а итог приходит уведомлением.
API
Всё, что показывает веб-поиск, доступно по HTTP в JSON. Полное описание с формой для запросов — Swagger.
| Запрос | Что возвращает | Пример |
|---|---|---|
GET /wiki/near | известные места вокруг точки: lat, lon, radius_km, min_views, min_web_votes, sort, sights_only, limit; у места — web_votes |
Нижний, 10 км |
GET /voyage/city | советы Викигида по городу: city, kinds |
Дербент |
GET /resolve | опознать место по названию рядом с точкой: name, lat, lon |
Печёрский монастырь |
GET /suggest | подсказка точки по названию, с городом рядом: q, lat, lon |
псков |
GET /search | все совпадения по названию во всём индексе: q, limit |
башня шухова |
POST /match | сопоставить до 500 своих точек со статьями: по тегам OSM wikipedia/wikidata или по названию рядом; неоднозначные не выбираются |
в Swagger |
GET /stats | объёмы по источникам и даты данных | stats |
GET /health | индекс на месте и согласован; 503 — нет |
health |
Чего пока не умеет
- Склеивать разные написания одного места: «Михайло-» и «Михаило-Архангельский собор» для опознания — разные объекты.
- Объединять Википедию и Викигид в одну выдачу — это две вкладки.
- Правила «место / не место» ещё не выверены на размеченной выборке: бывают промахи вроде театральной труппы с меткой «место».
- Время на осмотр, сезон, часы работы, доступность — только известность и класс.
- Работает в локальной сети; снаружи не опубликован.
Код — GitLab tigranav/place-index, задача — INF-384.