exam-reader

https://img.shields.io/badge/style-wemake-000000.svg?style=flat-square https://img.shields.io/badge/code%20style-black-000000.svg?style=flat-square https://readthedocs.org/projects/exam-reader/badge/?version=latest&style=flat-square https://img.shields.io/badge/license-MIT-blue.svg

Documentation


Exam-reader – программа для извлечения и обработки данных из файлов, формирования разных отчётов и анализа данных.

Файлы протоколов проверки результатов ЕГЭ/ОГЭ/ВПР с расширением pdf представляют собой сводную таблицу по образовательной организации.

Проблема

Протоколы результатов ЕГЭ/ОГЭ/ВПР приходят ежегодно в больших объёмах.

Школа должна предоставлять Министерству образования различную статистику:

  • в целом по школе,

  • по параллелям,

  • по классам,

  • по учащимся,

  • по учителям,

  • по предметам и т.п.

Это трудозатратно, так как это требует много сил и времени, потому что делается вручную.

https://i.imgur.com/qePOzLL.png

Пример: картинка, полученая с помощью ghostscript

Принцип работы

https://i.imgur.com/wSmq5Ko.png

Зависимости (библиотеки).

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
_images/debug_worker_speed.svg

⚙️ Installation

Если есть ошибка Failed building wheel for PyMuPDF попробуйте обновить pip.

pip3 install --upgrade pip

Процесс разработки

  • Добавлена обработка pdf файлов с помощью multiprocessing JoinableQueue camelot и PyMupdf.

  • 05.11.20 Добавлен воркер (db) и основная документация к нему, также некоторые примеры)