exam-reader¶
Exam-reader – программа для извлечения и обработки данных из файлов, формирования разных отчётов и анализа данных.
Файлы протоколов проверки результатов ЕГЭ/ОГЭ/ВПР
с расширением pdf
представляют собой сводную таблицу по образовательной организации.
Проблема¶
Протоколы результатов ЕГЭ/ОГЭ/ВПР
приходят ежегодно в больших объёмах.
Школа должна предоставлять Министерству образования различную статистику:
в целом по школе,
по параллелям,
по классам,
по учащимся,
по учителям,
по предметам и т.п.
Это трудозатратно, так как это требует много сил и времени, потому что делается вручную.
Принцип работы¶
Зависимости (библиотеки).
camelot извлечение таблиц PDF. Единственная библиотека, которая распознаёт данный вид таблиц правильно. Сравнение с другими библиотеками и инструментами для извлечения таблиц PDF.
PyMupdf привязки Python для библиотеки рендеринга MuPDF. Основная функция (которой нет у подобных библиотек) - извлечение блоков текста.
peewee очень удобная ORM (поддерживает postgres).
flask микро-фреймворк для создания веб-приложений.
click очень удобная библиотека для создание интерфейсов командной строки.
tqdm отличный прогрессбар.
Task (job)¶
job - задачи, которые хранятся в бд, и worker выполняет эти задачи.
Поочередно добавляя только минимальное количество задач, которые он cможет решить, чтобы не терять задачи при выключении.
Структура job в бд:
id
path (CharField)
- status (SmallIntegerField)
0 - не выполнилась
1 - выполняется
2 - закончила выполнение
Cli¶
python3 -m exam_reader [OPTIONS] COMMAND [ARGS]...
Добавление файлов в очередь (db).¶
python3 -m exam_reader add files/ege2016.pdf files/ege2016.pdf
Запуск воркера.¶
-c, –count [int] количество процессов в воркере (default 3)
-d, –debug показывает строку состояния (без -f, –files), иначе показывает обычные сообщения о задачах (dafult false)
-f, –files [int] добавляет в очередь тестовые фалы количеством, которое вы указали. (запускается для тестов производительности, незавершённые задачи ставит в очередь снова (1) строчка)
Запуск воркера с добавлением файлов.
Для примера надо открыть два терминала (1 - для запуска воркера, 2 - добавления задачь).
TODO !! condition (sigkill) gif как в dramatiq
python3 -m exam_reader worker -c 2 -d -f 2
Запуск теста производительности:
python3 -m exam_reader worker -c 2 -d -f 2
⚙️ Installation
Если есть ошибка Failed building wheel for PyMuPDF
попробуйте обновить pip.
pip3 install --upgrade pip
Процесс разработки¶
Добавлена обработка pdf файлов с помощью multiprocessing JoinableQueue camelot и PyMupdf.
05.11.20 Добавлен воркер (db) и основная документация к нему, также некоторые примеры)