Каков наилучший подход для интерпретации ввода текста в целях геокодирования? - PullRequest
3 голосов
/ 20 мая 2009

Рассмотрим следующий сайт:

http://maps.google.com

Он имеет основной текстовый ввод, где пользователь может вводить бизнес, страны, провинции, города, адреса и почтовые индексы. Интересно, какой лучший способ реализовать поиск подобным образом? Я понимаю, что, вероятно, Google Maps использует полнотекстовый поиск со всеми видами данных в одной таблице, и у него есть шанс иметь синтаксический анализатор, который классифицирует ввод (т. Е. Между числовыми, такими как почтовые индексы и координаты, и текстовыми, как бизнес). и адреса).

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

Какой подход вы бы порекомендовали?

Ответы [ 3 ]

3 голосов
/ 24 мая 2009

Лучше всего объединить данные из всех ваших таблиц в поисковый индекс. Lucene - это бесплатная поисковая система, похожая на то, как работает поисковая система Google (инвертированный индекс), и она должна позволять вам выполнять поиск по любому из этих значений или по любой их комбинации с относительной легкостью.

http://lucene.apache.org/java/docs/

Lucene поставляется со своим собственным языком запросов (опять же, очень похожим на синтаксис Google или любых других поисковых сайтов в Интернете). Единственный недостаток использования чего-то вроде Lucene - вам нужно создать его индекс. Вы не будете запрашивать вашу базу данных напрямую (что может быть очень сложно ... инвертированный индекс в значительной степени разработан для того, что вы пытаетесь сделать), поэтому вам нужно периодически собирать новую информацию из вашей базы данных и добавлять ее в свой индекс , Также может потребоваться перестройка индекса для удаления ненужных данных.

С Lucene вы получаете довольно гибкий синтаксис запросов, с которым знакомо большинство людей (потому что почти каждый ищет в Интернете), он работает очень хорошо и не очень сложен. Используя Lucene, вы избегаете использования регулярных выражений (которые не являются наиболее эффективным механизмом поиска текста), и вам не нужно писать собственный синтаксический анализатор. Должен быть беспроигрышным, если не считать небольшой кривой обучения для создания генератора индекса Lucene и выяснить, как запросить этот индекс.

1 голос
/ 20 мая 2009

Я бы имел данные в одной базе данных. Если данные становятся большими или я знаю, что они будут огромными, я назначил бы идентификатор каждой компании, адресу и т. Д., А затем имел бы другие таблицы, которые ссылаются на эти данные.

Регулярные выражения будут необходимы, только если пользователь сможет определить, что он хочет искать:

бизнес: Аргос

Но что тогда произойдет, если они захотят Argos в Манчестере (извините, я англичанин), может быть, тогда определите местоположение пользователя на основе его IP , но что произойдет, если они скажут:

бизнес: Аргос Шотландия

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

P.s Извините, если это не имело смысла.

0 голосов
/ 25 мая 2009

Вам необходимо предварительно обработать запрос, прежде чем выполнять полнотекстовый поиск по нему. Если вы используете базу данных ГИС, у вас уже будут столбцы, такие как город, район, страна и т. Д. Преобразуйте запрос в токены, разделенные пробелом, запятыми или обоими. Затем нажмите отдельные столбцы, чтобы увидеть совпадение. Таким образом, вы будете знать, какая часть запроса является городом, ареакодом и т. Д.

Вы также можете попробовать несколько подходов наивного приближения, например - 6 последовательных чисел, вероятно, будут кодом города. Ищите общие слова, такие как «дорога», «ресторан», «улица» и т. Д., Которые будут частью многих запросов, а затем используйте некоторое приближение, чтобы выяснить, что они ищут. Надеюсь это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...