Skip to content

Parsing human-made structured Excel (.xls, .xlsx) sheets into machine-readable form

License

Notifications You must be signed in to change notification settings

den1s0v/vstu_xls

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

94 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

vstu_xls

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).

Status / Статус

Only an idea, first experiments. / Формируется идея, первые пробы инструментов.

Частичная структура проекта (наброски)

Структура проекта

Мысли об эвристиках для структурного разбора.

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

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

Порядок получения структурных элементов (от обобщённых крупных к мелким и конкретным):

  1. поиск областей (Slot'ы дней у группы), которые могут содержать контент: получение прямоугольников, ограниченных границами и состоящих из нескольких ячеек (объединённых и нет);
  2. получение областей с данными (Area с границами внутри Slot'а) и вероятностная классификация их по типу контента (можно рассмотреть неупорядоченный перечень типов ячеек внутри Area для определения допустимых видов форматирования);
  3. сопоставление обнаруженных данных внутри Area с шаблонами с поиском максимально подходящей раскладки (задача оптимизации)

Средства

  • openpyxl и/или xlrd для извлечения информации о содержимом и форматировании ячеек, а также о стиле границ между ними
  • xls2xlsx и/или COM (pywin32) + MS Excel для для конвертации старого формата (Excel 2003) в новый (Excel 2007+)
  • re (регулярные выражения) для классификации и разбора содержимого ячеек
  • (?) sly для разбора DSL, описывающего структурные шаблоны/паттерны расположения простых ячеек в составе комплексных

About

Parsing human-made structured Excel (.xls, .xlsx) sheets into machine-readable form

Resources

License

Stars

Watchers

Forks

Releases

No releases published