Парсер таблиц

Ключевые принципы

  1. Любые типы табличных данных (как файловых (xls,csv,xlsx,xml,ods), так и иных) приводятся к массиву название листа=>массив строк

  2. В каждом листе выделяется шапка (описание столбцов) по автоматическим или ручным критериям. Автоматические критерии - наличие первой пустой строки, строки с нумерацией, пропуска. Ручные - прямой указатель на содержание ячейки, отделяющей заголовки листа от содержимого.

  3. Шапка автоматически разбирается на заголовки (по критерию одной ячейки с текстом на массив столбцов) и описание колонок (если они есть).

  4. Описания колонок рекурсивно разбираются, т.е. глубина вложений ячеек и их объединения не важны.

  5. К полученному описанию колонок прикладывается автоматический (номер к номеру) или ручной шаблоны разбора. Шаблонов может быть несколько. См. в качестве примера парсер Mvd. В качестве шаблонов могут быть использованы строки (по которым идет идентификация колонок) или регулярные выражения. Ключи шаблона - ключи массива на выходе парсера.

Подобный подход нужен для того, чтобы парсеры были независимы от изменений структуры листов и от наличия скрытых полей. Например, если говорить про ту же статистику МВД, то не только в официальных публикациях, но и в самих выгрузках в 17-18 годах были скрытые поля, которые бы при выборке по номерам столбцов дали бы некорректные данные. См комментарии в файле парсера и raw выгрузку результатов парсера http://91.228.152.7/parse/Mvd/raw/show.

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

См. пример обработанных по маске данных - http://91.228.152.7/parse/Mvd/validate/show.

Формат ответа по каждому листу (напомню, что может быть получен в json если заменить метод show на json, см. описание общей архитектуры):

Массив по дате с ключом в виде названия листа, возвращающий объект

  • titles - массив заголовков листа
  • head - результаты разбора заголовков, приведенные к строкам для каждого столбца
  • body - данные по строкам (без заголовка)
  • data - обработанные данные в виде массива с ключами из шаблона data (аналогично с другими шаблонами)
  • canon - шаблон разбора с указанием найденных номеров столбцов

Описание методов есть в самой библиотеке.