Как я могу отфильтровать вымышленные местоположения (например, "под скалой", "скрывать" ) из результатов геокодирования API Карт Google?

API Карт Google отлично справляется с поиском соответствия почти для каждого запроса. Но если меня интересуют только реальные местоположения, как я могу отфильтровать догадки Google?

Например, в соответствии с Google, "under a rock" находится в "The Rock, Shifnal, Shropshire TF11, UK". Но человек, который отвечает на вопрос: "Где ты?" с "Под скалой" не означает, что они находятся в Шропшире, Великобритания. Вместо этого они просто не хотят вам рассказывать - ну, либо это, либо они в реальной беде, к счастью, с доступом в Интернет, застряли под какой-то скалой.

У меня есть несколько миллионов пользовательских строк местоположения, к которым я пытаюсь найти координаты. Если кто-то пишет "под скалой", я предпочел бы просто оставить координаты null вместо того, чтобы помещать явно неправильную точку в Шропшире, Великобритания.

Вот несколько других примеров:

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

Мне нужно создать функцию, которая возвращает следующее:

Что вы рекомендуете?

Здесь представлен массив с разделителями-запятыми, чтобы вы могли играть дома:

'twin cities','right behind you','under a rock','nowhere','canada','mission district san francisco','chicago','a galaxy far far away','london, england','1600 pennsylvania ave, washington, d.c.','california','41.87194,12.56738','global','worldwide','on the internet','mars'

И вот формат URL:

'http://maps.googleapis.com/maps/api/geocode/json?address=' + query + '&sensor=false'
ex: http://maps.googleapis.com/maps/api/geocode/json?address=twin+cities&sensor=false

Ответ 1

Кажется, что большинство ваших неправильных результатов имеют атрибут "partial_match", установленный в "true".

например.

Города-побратимы, без частичного совпадения: http://maps.googleapis.com/maps/api/geocode/json?address=Twin%20Cities&sensor=false

под скалой, результаты 10+, все с частичным совпадением: http://maps.googleapis.com/maps/api/geocode/json?address=under%20a%20rock&sensor=false

Хотя первоначальная цель этого атрибута не означает, что местность правильная или нет, она все еще довольно точна в предоставленном вами наборе данных.

Из документации API Карт Google:

partial_match указывает, что геокодер не вернул точное соответствие для исходного запроса, хотя он смог сопоставить часть запрошенного адреса. Вы можете изучить первоначальный запрос на орфографические ошибки и/или неполный адрес.
Частичные совпадения чаще всего встречаются для адресов улиц, которые не существуют в пределах местности, которую вы передаете в запросе. Частичные совпадения также могут быть возвращены, когда запрос совпадает с двумя или более местоположениями в той же местности. Например, "21 Henr St, Bristol, UK" вернет частичное совпадение как на Генри-стрит, так и на улицу Генриетта. Обратите внимание: если запрос включает в себя компонент с орфографической ошибкой, служба геокодирования может предложить альтернативный адрес. Предложения, инициированные таким образом, не будут отмечены как частичное совпадение.

Ответ 2

Это может быть не прямой ответ на ваш вопрос.

Если вы в настоящее время проходите через 1000 пользователей ввода, сохраненных в db, и отфильтровываете недействительные, я думаю, что это слишком поздно и невозможно. Выход может быть только хорошим, как вход.

Лучший способ - сделать ввод максимально допустимым, а конечные пользователи не всегда знают, чего хотят.

Я предлагаю вам, чтобы этот пользователь вводил свой адрес через autocomplete, так что вы всегда будете иметь действительный адрес

  • Пользователь вводит текст и выбирает предложения
  • Отобразится маркер и информационное окно
  • Когда пользователь подтверждает ввод, вы сохраняете текст информационного окна как пользовательский ввод, а не ввод текста.

Таким образом, вам не нужно проверять или фильтровать ввод пользователя.

Ответ 3

Я знаю, что в JavaScript есть реализация байесовского классификатора. Никогда не пробовал их, но в настоящее время я использую Ruby-реализацию, которая работает правильно.

У вас могут быть две классификации (Реальные и Unreal), каждая из которых обучается каждому из них (30, 50 образцов каждый?). "Если ваш классификатор хорошо подготовлен, он будет более точным".

Затем вам нужно будет проверить местоположение, прежде чем вызывать API GoogleMaps для фильтрации местоположений Unreal.

Ответ 4

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

Я огляделся и нашел сайт, который содержит каждый город в мире. К сожалению, он не дает его в виде единого списка, поэтому вам придется потратить немного времени на сбор данных. сайт http://www.fallingrain.com/world/index.html.

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

Если вам удастся получить все эти местоположения в базу данных, то у вас будет начало системы позитивного поиска для ваших запросов. Кроме того, вам нужно будет создать отдельные списки областей bi, tri и quad-city, а также популярных мест назначения и наземных знаков.

Вы также должны сохранить отрицательную таблицу поиска для всех известных несоответствий. Люди склонны генерировать подобные ложные данные и тип-o для больших групп населения. Таким образом, самые популярные ответы "нигде" и "планета Земля" будут повторяться снова и снова и на каждом языке, о котором вы можете думать.

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

Во всяком случае, я надеюсь, что это поможет. Это немного усилий, но если это важно, это того стоит. Кто знает, вы можете получить базу данных, которая действительно стоит того. Возможно, даже служба Google maps gateway для компаний/разработчиков, которым нужна такая же функциональность. (

Позаботьтесь.