Анализ качества учебных материалов, или как у нас ничего не вышло +1
Из песочницы, Семантика
Рекомендация: подборка платных и бесплатных курсов системной аналитики - https://katalog-kursov.ru/
Доброго времени суток.
Сегодня расскажу вам о попытках осилить анализ учебных материалов, борьбе за качество этих документов и разочаровании, которое мы познали. «Мы» это пара студентов из МГТУ им. Н. Э. Баумана. Если вам интересно, добро пожаловать под кат!
Задача
Мы собирались оценивать качество учебных материалов (методических указаний, учебников и пр.) по статистическим показателям. Показателей таких было немало, вот некоторые из них: отклонение числа глав от «идеального» (равного пяти), среднее число символов на страницу, среднее число схем на страницу и так далее по списку. Не так уж и сложно, да? Но это было только начало, ведь дальше, в случае успеха, нас ждало построение онтологии и семантический анализ.
Инструменты и исходные данные
Проблема заключалась в исходных материалах, а ими были всевозможные методички/учебники в PDF. Вернее, проблема была даже не в самих материалах, а в PDF и качестве конвертации.
Для работы с PDF было решено использовать Python и какую-нибудь модную молодежную библиотеку на роль которой была выбрана
pdfminer.six.
История
Вообще, сначала мы пробовали разные библиотеки для питона, но все они не очень дружили с кириллицей, а литература у нас написана на русском языке. К тому же, самые простые библиотеки умели только вытаскивать текст, чего нам было недостаточно. Остановившись на pdfminer.six, мы начали прототипировать, экспериментировать и развлекаться. К счастью, для начала примеров из документации нам хватило.
Мы создавали свои PDF-документы с текстом, изображениями, таблицами и прочим. Всё у нас шло хорошо, мы могли спокойно вытащить любой элемент из нашего документа.
Вот как выглядит страница документа в нашем представлении
Приведу небольшой пример взаимодействия с документом: получение текста документа.
file = open(path, 'rb')
parser = PDFParser(file)
document = PDFDocument(parser)
output = StringIO()
manager = PDFResourceManager()
converter = TextConverter(manager, output, laparams=LAParams())
interpreter = PDFPageInterpreter(manager, converter)
for page in PDFPage.get_pages(file):
interpreter.process_page(page)
converter.close()
text = output.getvalue()
output.close()
Как можно увидеть, получить текст из документа довольно просто. Всякое взаимодействие осуществляется согласно схеме ниже
Почему ничего не вышло?
Все эксперименты были удачными и на тестовых PDF-файлах всё было прекрасно. Как оказалось, сломать всё – задача тривиальная и идея разбилась о суровую действительность.
После экспериментов мы взяли несколько настоящих учебников и обнаружили, что всё что угодно может пойти не так.
Первое, что мы заметили: количество изображений, подсчитанных программой, не соответствует действительности, а части текста просто теряются.
Выяснилось, что некоторые (иногда даже многие) части текста в документе были представлены не в виде текста и неизвестно как так получилось. Этот факт сразу же отмел анализ частотного распределения символов/слов/словосочетаний, семантики, да и вообще любой другой вид анализа текста.
Возможно, что при конвертации или создании этих документов произошло что-то непредвиденное, а возможно, что никому и не было нужно, чтобы они были сформированы «правильно». К сожалению, таких материалов было большинство, что и привело к разочарованию в идее подобного анализа.
Литература
Раздел документации из репозитория pdfminer.six был использован для написания статьи и в качестве справочника.
К сожалению, не доступен сервер mySQL