Exam-reader – программа для извлечения и обработки данных из файлов, формирования разных отчётов и анализа данных.
Файлы протоколов проверки результатов ЕГЭ/ОГЭ/ВПР
с расширением pdf
представляют собой сводную таблицу по образовательной организации.
Протоколы результатов ЕГЭ/ОГЭ/ВПР
приходят ежегодно в больших объёмах.
Школа должна предоставлять Министерству образования различную статистику:
- в целом по школе,
- по параллелям,
- по классам,
- по учащимся,
- по учителям,
- по предметам и т.п.
Это трудозатратно, так как это требует много сил и времени, потому что делается вручную.
Пример: картинка, полученая с помощью ghostscriptЗависимости (библиотеки).
- camelot извлечение таблиц PDF. Единственная библиотека, которая распознаёт данный вид таблиц правильно. Сравнение с другими библиотеками и инструментами для извлечения таблиц PDF.
- PyMupdf привязки Python для библиотеки рендеринга MuPDF. Основная функция (которой нет у подобных библиотек) - извлечение блоков текста.
- peewee очень удобная ORM (поддерживает postgres).
- flask микро-фреймворк для создания веб-приложений.
- click очень удобная библиотека для создание интерфейсов командной строки.
- tqdm отличный прогрессбар.
job - задачи, которые хранятся в бд, и worker выполняет эти задачи.
Поочередно добавляя только минимальное количество задач, которые он cможет решить, чтобы не терять задачи при выключении.
Структура job в бд:
- id
- path (CharField)
- status (SmallIntegerField)
- 0 - не выполнилась
- 1 - выполняется
- 2 - закончила выполнение
python3 -m exam_reader [OPTIONS] COMMAND [ARGS]...
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) и основная документация к нему, также некоторые примеры)