Поиск информации в тексте средствами MS SQL Server
В своей работе нам часто приходится анализировать текст, изложенный в свободной форме (назначения платежей, комментарии, адреса и др.) с целью вычленить определенную информацию. В excel для этого можно использовать текстовые формулы и регулярные выражения VBA. Кроме того, регулярные выражения и текстовые функции можно использовать в python и других языках программирования.
Но как быть, если объем информации измеряется миллионами записей в базе данных, а времени на выгрузку и анализ небольших порций данных нет? Использование Transact-SQL (который хоть и не поддерживает регулярные выражения в полной мере, имеет более расширенный функционал оператора like, чем стандартный SQL) позволит переложить вычисления на плечи СУБД и сэкономить время на копировании данных.
Для примера выгрузили отзывы клиентов со страницы www.banki.ru/services/responses/bank/sberbank/ и импортировали данные в MSSQL Server. Таблица banki_ru_messages содержит 3 поля: дату отзыва, заголовок и текст.
Простой поиск по ключевым словам, думаю, знаком многим:
Для поиска телефонных номеров можно искать последовательность из 11 подряд идущих цифр, предварительно удалив пробелы и символы «-”, «(“, “)», “/»:
Аналогичным способом, изменив количество цифр, можно искать номера счетов, ИНН, почтовые индексы.
Для поиска адресов электронной почты можно воспользоваться следующим кодом:
Описанные алгоритмы конечно же имеют погрешность (количество подряд идущих цифр не всегда однозначно определяет их суть, да и символ «@» встречается не только в адресах электронной почты), но в определенных ситуациях позволяют сэкономить время и дать представление о наличии и объеме искомой информации в текстовых полях.
Непонят зачем так сложно.
Если задача исследовать данные - возьмите Elastic Search, с ним можно быстро исследовать и искать данные.
На малом объёме данных (да и на большом в миллионы строк) можно тупо выгрузить поля в файлы и распаралелить поиск на любимом ЯП без сложностей с SQL и диалектами.
Если данных будет очень много то этот способ с like будет тормозить...
Интересный подход, особенно если применить его для снижения нагрузки на сервер (уменьшить запросы).
Зачет.
Спасибо!
Непонят зачем так сложно.
Если задача исследовать данные - возьмите Elastic Search, с ним можно быстро исследовать и искать данные.
На малом объёме данных (да и на большом в миллионы строк) можно тупо выгрузить поля в файлы и распаралелить поиск на любимом ЯП без сложностей с SQL и диалектами.
Если данных будет очень много то этот способ с like будет тормозить...
Artem, спасибо за ценный совет!