Трусов Михаил — SuperProgrammist.Ru

Михаил Юрьевич Трусов

Более 25 лет опыта в программировании

Загрузка большого объема слабоструктурированных данных об организациях России в БД

Введение

Задача возникла в далекие времена становления капитализма в России (а именно в 1996-1998 гг.). Тогда покупатели еще не были так избалованны, как сегодня, и слово спам было мало кому знакомо. Любые рекламные письма воспринимались очень благожелательно. И рекламная рассылка обычных писем действовала очень хорошо (конверсия составляла до 30%).

Но чтобы рассылать письма, нужны адресные списки (вообще-то, нужно много чего, но в рамках описания этой работы ограничимся только ими). Можно было выбирать информацию из рекламы в газетах и журналах, покупать все возможные справочники предприятй и вносить сведения из них. Но это было трудно, медленно и дорого. Поэтому когда удалось в компьютерном центре Главснаба раздобыть базу данных предприятий Юга России, это было большой удачей.

Дело было за малым — влить эти данные в свою базу.

Проблема и опробованные варианты ее решения

Полученная БД представляла собой файл в формате dbf (db4). В нем было более 30 тысяч записей. И этот файл можно было легко импортировать в фирменную БД на основе MS Access 97, если бы не одно но. Большинство записей имели разные структуры, которые не соответствовали ни структуре файла, ни какой-либо очевидной логике.

В начале был выбран самый простой и очевидный вариант решения задачи — была нанята профессиональная оператор ввода данных, которая на основной работе вводила данные в списки избирателей. Она была на очень хорошем счету у своего начальства и была отрекомендованна как самый производительный сотрудник. Мы договорились с ней о цене за одну запись, она получила файл и приступила к вводу данных. Через неделю стало ясно, что получается не очень: было внесено всего 70 организаций. Еще через неделю она отказалась от дальнейшей работы. Всего было внесено около 200 предприятий.

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

Надо было что-то придумать.

Окончательный способ решения

И однажды снизошло озарение и все записи были загружены в фирменную БД с нужной структурой менее чем за 4 часа. Причем без всякого программирования.

Сначала все записи все-таки были импортированны в БД MS Access в таблицу со одним полем типа текст. Потом в этой таблице были созданы нужные поля: индекс, населенный пункт, улица, дом, офис, наименование организации, ОПФ (организационно-правовая форма), телефоны и т.д.

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

Выводы

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