Рубрики
Без рубрики

PaperStream: Сбор данных из документов с несколькими ответами

PaperStream, приложение Python для создания и затем извлечения ответов на вопросы с несколькими ответами. Tagged с Python, Survey, Web, OMR.

Ранее опубликовано в Блог Института устойчивости программного обеспечения

В рамках моей докторской степени, где мы исследуем, можем ли мы использовать данные смартфона для мониторинга прогрессирования болезни Паркинсона, мы обнаружили, что нам нужно было пойти “Вернуться к аналогу” В качестве бумажного дневника был лучшим инструментом для пациентов, чтобы самооценка своих симптомов. Это было превосходно для исследования, но оно дало нам еще одну вещь, о которой нужно беспокоиться, мне пришлось бы вручную расшифровать ответы участников из бумаги в электронные файлы. Мы стремились к десяти участникам, которым нужно было пройти дневник с 365 страницами в течение года; Если бы потребовалось 45 секунд (очень оптимистично), чтобы транскрибировать каждую страницу, кодирование всех десяти дневников заняло бы ~ 114 часов или ~ 19 дней работы!

Будучи ученым-компьютером и желая сэкономить 114 часа, когда мне пришлось написать свою диссертацию, я искал Интернет для инструмента, который позволил бы мне автоматически создавать и кодировать бумажные дневники (возможно, какое-то программное обеспечение, чтобы отметить множественные Ответьте на экзамены?). К моему ужасу, несколько доступных вариантов были программные проекты, которые больше не поддерживаются, не хорошо документированы, не бесплатны или не очень удобны для пользователя. Затем я решил воспринимать это как возможность внести свой вклад в сообщество, потому что многие из инструментов, которые мы используем для анализа данных в нашей лаборатории, свободно доступны благодаря работе других. Вот как Paperstream родился.

PaperStream-это программное обеспечение, которое исследователи и ученые могут использовать для создания бумажных дневников, опросов, тестов или любого другого документа с вопросами с несколькими ответами, на которые люди могут ответить, используя ручку и бумагу, а затем можно автоматически кодировать в файл CSV. PaperStream бесплатный, с открытым исходным кодом, доступен для Windows, Mac OS и Linux, и полностью задокументирован, так как он был разработан для использования любым без технического фона.

Ради этого поста я напишу о PaperStream, используя дневники и опросы в качестве двух примеров, чтобы продемонстрировать свои функции. Если вы работаете с викторинами или другими типами документов, то, что я здесь описываю, не должно сильно отличаться от того, что вам нужно сделать. Таким образом, в нашем случае дневник – это вопросник, на который один или несколько человек должны отвечать каждый день в течение нескольких дней, недель или месяцев. Точно так же опрос – это вопросник, на который один или несколько человек должны ответить только один раз.

Как для дневника, так и для опроса вам нужен только одностраничный документ PDF, который будет работать в качестве шаблона для каждой страницы. Для дневников PaperStream будет помечать каждую страницу уникальной датой, например, следующая цифра, а для опросов Paperstream перечисляет их с уникальным идентификатором. После того, как PaperStream обработает ваши шаблоны, вы получите zip -файл с вашими дневниками или опросами в размере A4 и A5, готовых к печати и привязке.

После того, как ваши участники ответили на эти распечатки, используя ручку, вам необходимо сканировать их как многостраничное изображение TIF или в виде однократных изображений PNG, сжатых на zip-файле. Как только это будет готово, вам нужно сказать PaperStream, где и какие ответы искать через рубрику маркировки. Маркирующая рубрика – это не что иное, как группа кругов, которые указывают, какие области участников страницы могут отметить ручкой, и что эти знаки/ответы означают, например, час дня или точка в шкале Лайкерта. Поскольку вы использовали один шаблон для создания своих дневников или опросов, вам нужно только разрабатывать рубрику маркировки, и все! Когда рубрика будет готова, PaperStream предоставит вам zip -файл с файлом CSV, содержащим все ответы каждого дневника или опроса, который вы хотели обработать. Что также полезно, так это то, что PaperStream может обнаруживать дубликаты, отсутствующие данные и очень прощается, так как он обнаружит ответ, когда заполняется не менее 15% зоны ответа, и у него нет проблем, когда ручка выходит за пределы ее. Это означает, что вашим участникам не нужно беспокоиться о том, как отвечать на вопросы, это так же просто, как использовать ручку и бумагу.

С технической точки зрения, Python был лучшим языком для разработки PaperStream. Он имеет многоплатформенную поддержку, он может обрабатывать файлы PDF благодаря pypdf2 Библиотека и изображения через OpenCV Анкет Первым прототипом PaperStream был сценарий, который преобразовал шаблон PDF в буклет PDF, базирующийся в Буклет-производитель Проект Люк растение Анкет Второй прототип, который должен был кодировать ответы из бумаги в электронный файл, был немного более сложным. Я хотел сохранить многоплатформенные возможности Python, в то же время предоставляя пользователям графический интерфейс, который не займет слишком много времени для разработки. Есть много вариантов создания графического интерфейса в Python. Сначала я попробовал Tkinter Но поддержка холста и манипуляции с геометрическими формами (например, перетаскивание) не были простыми. По этой причине я решил думать о PaperStream как о настольном веб -приложении, а это означает, что GUI будет на основе HTML/CSS/JavaScript, используя преимущества HTML, SVG и богатой экосистемы JavaScript, в то же время полагаясь на локальном веб -сервере, чтобы по маршруту маршрутизации. Все вызовы из веб -графического интерфейса в сценарии обработки. Сокол Был ли мой выбор для веб -сервера из -за его легкого веса, обширной документации и простой реализации, Fabric.js Для геометрических манипуляций, плюс Асинхро JS для асинхронных звонков и Notty.js для уведомлений. Затем для фактической логики кодирования я адаптировал работа выполнена по Рафаэль Барон Это использовало OpenCV для извлечения части страницы, обрамленной маркерами, дополняя его функцией извлечения ответов, которая работает, сравнивая черные пиксели между двумя бумажными листами. Все это программное обеспечение с открытым исходным кодом сделало разработку PaperStream быстрее и проще.

Наконец, последним спринтом для первой версии PaperStream был тестирование, распространение и документация. Я реализовал несколько модульных тестов, используя библиотеку модульной тестирования Python для основной функциональности сценариев, которые создают и кодируют документы. Тогда я рассмотрел Docker и другие аналогичные варианты, чтобы сделать PaperStream доступным Но в конце концов я пошел с Pyinstaller что позволяет разработчикам распространять проект Python (включая запуск сервера Falcon) в качестве единого исполняемого файла или как один zip -файл, который работает на всей основной ОС. Я также развернул PaperStream в хранилище PIP, чтобы его можно было установить с одной линией разработчиками и другими техническими пользователями. Наконец, для документации я решил дать Хьюго Попробуйте впервые; Написание его на уборке было простым и автоматически публиковать статический веб -сайт в NetLify с каждым GitHub Комитет был очень удобным.

Я многому научился во время разработки этого проекта, и мне бы понравилось, если сообщество найдет PaperStream полезным и продвигает его развитие. Будущая прохладная функциональность может включать в себя обнаружение различных цветов пера, отметок формы и даже рукописного текста. В то же время вы можете бесплатно получить PaperStream и его исходный код в GitHub и как это направлять для создания и кодирования документов над NetLify . О, и если вам интересно, с PaperStream я закодировал все ~ 3650 страниц примерно за 5 минут; колоссальные на 1300% быстрее.

Оригинал: “https://dev.to/julio_ui/paperstream-collecting-data-from-multiple-answer-question-documents-50c5”