Студентка защитила выпускную квалификационную работу по автоматической проверке источников в научных публикациях - и получила высшую оценку. Проект признали лучшим в день защиты. Но сама задача, как выяснилось, с дипломом не закончилась.
От прототипа к инженерному инструменту
Ещё весной система существовала в виде живого прототипа с линейным пайплайном: документ - извлечение текста - список литературы - DOI - внешняя проверка - статус. Простая цепочка, которая неплохо работала в идеальных условиях и разваливалась при столкновении с реальными PDF.
За несколько месяцев доработок система обросла OCR для страниц без нормального текстового слоя, постоянным SQLite-кэшем, offline-режимом, корпусной оценкой и отдельными ML-модулями под разные подзадачи. Пайплайн вырос в двенадцать шагов - от приёма файла до формирования HTML-отчёта и JSON с результатами.
Почему DOI не решает всё
Главный вывод, к которому пришли в ходе работы: вывод «DOI не найден - источник фейковый» попросту некорректен. У вполне реального источника может не быть цифрового идентификатора. DOI мог быть разорван переносом строки при вёрстке. OCR превращает нормальный текст в набор визуально похожих символов - и валидный идентификатор становится мусором.
Поэтому система оценивает не один признак, а совокупность сигналов. Она проверяет:
- наличие и резолвинг DOI
- доступность URL
- совпадение названия, авторов и года с каноническими метаданными
- присутствие источника в Crossref, OpenAlex, PubMed, Wikidata и других каталогах
- риски OCR-искажений и некорректного парсинга
Если DOI отсутствует, но источник уверенно находится по названию и авторам - это не провал, а статус likely_verified. Если URL открывается, но метаданные нигде не подтверждаются - неопределённый случай. Такой подход честнее, чем бинарное «найдено / не найдено».
Где задача оказалась неожиданно трудной
Русскоязычные источники хуже всего вписываются в привычную схему «нашли DOI и успокоились». Многие из них просто не имеют машиночитаемых метаданных в западных каталогах. Плохое оформление библиографии, неполные данные, смешение кириллицы и латиницы в одной записи - всё это превращает рутинную проверку в нетривиальную инженерную задачу.
Отдельный вопрос, который система пока не умеет закрыть окончательно: источник не найден - это ошибка инструмента или источника правда не существует? Граница между «сервис не ответил» и «записи нет нигде» в автоматическом режиме размыта. Именно поэтому система не выдаёт вердикт, а формирует классификацию рисков - и честно сообщает, когда уверенности недостаточно.
Что дальше
Формально диплом закрыт. Фактически проект продолжается. Чем точнее становился инструмент, тем отчётливее проявлялись края задачи - и тем интереснее становилось их исследовать. Проверка библиографии оказалась куда менее скучной областью, чем принято думать.