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