Parsing human-made Excel (.xls/.xlsx) sheets into machine-readable form.
Main application of the configurable project is to deal with VSTU's timetable files (in Russian).
Only an idea, first experiments. / Формируется идея, первые пробы инструментов.
С учётом ручного составления исходных таблиц, каждая структурная единица может быть представлена во множестве форматов / разновидностей / способов записи, каждый из которых должен быть описан в строгом или обобщенном виде.
Поиск любого вида записи/структуризации данных в любом месте таблицы математически возможен, но является вычислительно неэффективным, так как средняя таблица включает многие десятки столбцов и сотни строк.
- Поэтому необходимо предварительно структурировать таблицу по более универсальным критериям, прежде чем выполнять полный перебор вариантов.
- Далее, для целей примера и отработки технологии, будем рассматривать самые "популярные" таблицы с расписанием для очного бакалавриата.
- Наибольшая вариативность заключается в основной части таблицы (где указаны занятия), в то время как заголовок (строка групп) и левая часть таблицы с днями выглядит довольно стабильной.
- В то же время, занятия локализованы в днях и группах, поэтому можно сразу ограничить область поиска занятий с перебором вариантов этими довольно небольшими областями (возможность объединения занятий между группами на общих лекциях пока опустим: этот частный случай не изменит подхода).
- После некоторых раздумий возникла идея разделить сопоставление границ с сопоставлением видов форматирования данных про занятия -- то есть сначала определяем границы, в которых что-то есть, а потом начинаем внутри них искать подходящие для этого места данные.
Порядок получения структурных элементов (от обобщённых крупных к мелким и конкретным):
- поиск областей (Slot'ы дней у группы), которые могут содержать контент: получение прямоугольников, ограниченных границами и состоящих из нескольких ячеек (объединённых и нет);
- получение областей с данными (Area с границами внутри Slot'а) и вероятностная классификация их по типу контента (можно рассмотреть неупорядоченный перечень типов ячеек внутри Area для определения допустимых видов форматирования);
- сопоставление обнаруженных данных внутри Area с шаблонами с поиском максимально подходящей раскладки (задача оптимизации)
- openpyxl и/или xlrd для извлечения информации о содержимом и форматировании ячеек, а также о стиле границ между ними
- xls2xlsx и/или COM (pywin32) + MS Excel для для конвертации старого формата (Excel 2003) в новый (Excel 2007+)
- re (регулярные выражения) для классификации и разбора содержимого ячеек
- (?) sly для разбора DSL, описывающего структурные шаблоны/паттерны расположения простых ячеек в составе комплексных