Поиск отзывов с географической привязкой

Как собрать отзывы о работе филиалов в Интернете с географической привязкой и визуализацией.

Возможно, вам покажется, что получить адрес из отзыва несложно, достаточно разобрать текст и получить по ключевым словам: город, улицу и дом. Но сложность заключается в том, что адрес нужно отделить от другого текста. Ключевые слова могут отсутствовать, порядок – меняться, слова в тексте, которые подходят под адрес — имеют иное значение и т.д. Задача решается с помощью методов обработки естественного языка (Natural Language Processing).

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

Эта задача делится на этапы следующим образом:

  1. сбор данных;
  2. поиск адреса в тексте веб-страницы;
  3. геокодирование найденных адресов;
  4. отображение полученной информации на сайте.

Рассмотрим подробнее каждый этап.

В интернете множество сайтов с отзывами, например, otzovik.com, flamp.ru, Банки.ру и т.д. На этих сайтах отзывы уже содержат оценку. Поэтому начнем сбор данных с них. Т.е. нужно скачать веб-страницы, URL-адрес которых начинается с домена нужного сайта. Тексты веб-страниц сохраняются в файлы.

Алгоритм сбора данных

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

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

Токен – это элемент текста, имеющий смысл. Удаляем токены ненужных html-тегов. Токены группируем по предложениям.

Предполагаем, что адрес находится в пределах одного предложения. Для каждого предложения составляем контекст, он содержит все возможные варианты населенных пунктов, улиц и домов, которые встретились в тексте. У каждого токена предложения обрезаем окончание и проверяем токен на наличие в обработанных массивах населенных пунктов и улиц. Каждый токен может иметь несколько вариантов значений в массивах, которые запоминаются в контексте предложения. На листинге программы изображена часть алгоритма, проверяющая токены предложения на наличие в обработанном массиве с названиями населенных пунктов. Также если предыдущий токен обозначал наименование населенного пункта(city_prefix), то тогда токен будет проверяться только на населенный пункт. Аналогично с улицами.

var city_prefix = ['г', 'город','село','пгт','д','деревня','посёлок','днт']; if(cnt>0 && city_prefix.indexOf(sent[cnt-1].word)!=-1){ var cities=isCity(t.word,t.pos_in_sentence, sent); context.cities = context.cities.concat(cities); t.possible_options = t.possible_options.concat(cities); continue; } var cities=isCity(t.word,t.pos_in_sentence, sent); context.cities = context.cities.concat(cities); t.possible_options = t.possible_options.concat(cities); ...

Сравнение городов и улиц

Фишка такого подхода в том, что, если человек напишет адрес в свободной форме, например: «Пишу из Название_города, недавно был в филиале на Название_улицы, мне там не понравилось», то программа также выцепит эти наименования и добавит их в контекст.

Затем анализируем контекст, проверяем, ссылаются ли населенные пункты, улицы и дома друг на друга. Если географические объекты ни на что не ссылаются в контексте, то удаляем эти объекты. Таким образом, мы получаем возможные варианты адреса:

  1. Населенный пункт + улица + дом – желательно;
  2. Населенный пункт + улица – терпимо;
  3. Населенный пункт, улица, дом (что-то одно из этого) – определить адрес невозможно.

Далее необходимо проверить, является ли найденный адрес отделением компании, для которой анализируется работа отделений. Если не указан номер дома, проверяем единственность отделения на этой улице и дополняем адрес автоматически. Сохраняем адрес и рейтинг в БД. Геокодирование адреса происходит с помощью веб-сервиса OpenStreetMap, формируем запрос и в ответе получаем широту и долготу. При отправке запросов нужно не забыть поставить ограничение на время, чтобы вас не забанили и не подумали, что вы совершаете DOS-атаку.

Пример запроса к ресурсу OpenStreetMap

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

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

{ "author_name": "NTA", "author_type": "editor", "tags": [], "comments": 0, "likes": 3, "favorites": 1, "is_advertisement": false, "subsite_label": "dev", "id": 181121, "is_wide": true, "is_ugc": false, "date": "Thu, 26 Nov 2020 13:06:42 +0300", "is_special": false }
0
0 комментариев
Популярные
По порядку

Комментарии

null