Сканирование Википедии для получения информации о координатах создает обширный готовый набор данных, на создание которого в противном случае ушли бы годы.

В Placemarkt я работаю над тем, чтобы упростить организацию и поиск мест в вашем сообществе. Мы своего рода парный возврат к Gowalla (если у вас хорошая память) или Foursquare, где основное внимание уделяется созданию и организации местоположений, а также маршрутов таким образом, чтобы защитить вашу личную информацию. Ваши данные не продаются и не используются ни для чего. Вместо этого вы платите ежегодную плату.

По мере роста сайта я искал способ предоставить пользователям больше информации об их сообществах. Мы используем OpenCage для прямого и обратного геокодирования и Thunderforest для фрагментов карты. Поскольку оба основаны на данных OpenStreetMap, мы решили, что мир с открытым исходным кодом будет отличным местом для поиска, чтобы построить более богатую и текстурированную карту. Войдите в Википедию.

Когда тема статьи в Википедии относится к географическому местоположению, которое может быть представлено системой координат, в этой статье часто будет отображаться карта или, по крайней мере, координаты широта/долгота. Язык шаблонов Википедии представляет эти координаты следующим образом:

{{Coord|29.44408|-98.48031|display=title}}

Учитывая более 6 миллионов статей в Википедии, это представляет собой кладезь интересной информации, и, к счастью, приверженность Википедии сообществу открытого исходного кода означает, что они делают все свои данные доступными для загрузки.

Конечно, это не так просто, как просто проанализировать CSV-файл, предоставленный Википедией, с идентификатором статьи, названием и координатами. Потому что этого не существует. Вместо этого нам нужно было разобрать дампы вики и самим сгенерировать такой файл. Для этого мы сделали следующее:

  1. Захватите дамп данных XML и индексные файлы Википедии

Файл дампа данных включает в себя всю англоязычную Википедию. Файл индекса содержит смещение в байтах для каждой статьи в дампе данных.

2. Используйте индексный файл для распаковки частей XML-файла с помощью dd.

Это позволило нам последовательно проверять всю Википедию на небольшом сервере, используя dd для разрезания файла дампа данных на более мелкие фрагменты, которые можно было распаковывать и обрабатывать по одному.

3. Проанализируйте вывод на наличие координат, используя комбинацию grep, xmlstarlet и C

Получив идентификатор каждой статьи, мы смогли затем использовать регулярное выражение для извлечения шаблона координат, который мы затем проанализировали с помощью небольшой программы C.

Вот репозиторий Github со сценарием bash, который мы использовали для всего этого. Вклады всегда приветствуются!

В итоге мы смогли получить более 400 000 координат из дампа данных и создать CSV-файл с идентификатором статьи, названием и координатами, который выглядит следующим образом:

63205443|Swift Valley Nature Reserve|52.39405 -1.25831
63205477|Deskie Castle|57.35540 -3.33310
63207626|Llewellyn Glacier|59.08333 -134.08333
63207822|Baghdad (North Gate) War Cemetery|33.35510 44.38620
63207930|Hang Ten Icefield|58.87500 -133.71667
63209775|Vistula Spit canal|54.35556 19.31111
63211601|Fairview Cemetery, Niagara Falls|43.10800 -79.08900
63213750|Man Uk Pin|22.52638 114.18437
63213728|Higashi-Ikebukuro runaway car accident|35.72606 139.71889
63213956|Kinkelenburg Castle|51.88960 5.89617
63214322|Shenzhen Bogang F.C.|22.73208 113.81822
63214383|Scottsdale National Golf Club|33.74878 -111.81502
63214411|Kensington House (academy)|51.50209 -0.18652
63216802|Hercules Powder Plant Disaster|40.87200 -74.63700
63217229|Fiestas patronales de Ponce|18.00000 -66.61667
63218528|Heung Yuen Wai|22.52732 114.19866

Вот файл CSV, который вы можете скачать, содержащий всю информацию о координатах Википедии, если вы не хотите запускать предоставленный мной скрипт. Файл будет обновляться каждый месяц, чтобы не отставать от новых материалов Википедии.

Ну и что дальше? Во-первых, я буду работать над тем, чтобы превратить эти координаты из Википедии в интерактивные локации на сайте Placemarkt. Далее я буду добавлять информацию о тропах и походах. Мы также работаем над приложением для iOS, которое должно скоро выйти.

Чтобы быть в курсе того, что мы делаем, вы можете подписаться на меня в Twitter.