Nougat OCR

Nougat OCR преобразует страницы научных PDF в разметку MMD: извлекает связный текст, сохраняет формулы в LaTeX, восстанавливает таблицы и формирует структуру с заголовками, списками и ссылками на литературу. Пользователь задаёт один файл, набор страниц или целую папку, выбирает модель и размер пакета, а затем проверяет готовый файл .mmd по маркерам пропущенных страниц и сложным фрагментам оригинала.

Основная работа выполняется через команду nougat. В ней указывают путь к PDF и каталог результата; дополнительные ключи ограничивают диапазон страниц, переключают модель, задают пакетную обработку, принудительно пересчитывают уже готовый файл и отключают эвристику, которая отбрасывает подозрительные ответы. Такой порядок особенно удобен для статей, диссертаций и препринтов, где обычное копирование из PDF ломает порядок колонок, дробит формулы и превращает таблицы в набор несвязанных строк.

После распознавания каждый документ получает одноимённый файл MMD. Его нужно оценивать не только как обычный текст: проверяют окружения формул и таблиц, номера уравнений, последовательность разделов, список литературы, а также служебные маркеры MISSING_PAGE. Nougat не редактирует исходный PDF и не создаёт поисковый слой внутри него; задача программы — получить машинно читаемое представление научной страницы для дальнейшей публикации, анализа или загрузки в собственный конвейер.

Скачать Nougat OCR

Оценка 9.7 Рекомендуем
  • Редактирование PDF
  • Русский интерфейс
  • Просто новичкам
Скачать бесплатно на Windows
Лучшая альтернатива
Nougat OCR
Оценка 8.5
  • Русский текст не распознаёт
  • Нет графического интерфейса
  • Результат только в MMD
Скачать Nougat OCR
Загрузка начнётся после нажатия

Как проходит распознавание научного PDF

Рабочий цикл начинается с проверки исходника. Для Nougat важна не внутренняя текстовая структура PDF, а изображение каждой страницы: страница растеризуется, приводится к размеру, ожидаемому визуальным кодировщиком, и целиком передаётся модели. Поэтому наличие выделяемого текста само по себе не гарантирует идеального результата, а отсутствие текстового слоя не мешает обработке. Качество определяют читаемость символов, сходство макета с научной публикацией и отсутствие сильных геометрических искажений.

Команда для одного документа содержит два обязательных смысловых элемента: путь к файлу и каталог, куда будет записан результат. Если каталог отсутствует, программа создаёт его. Имя выходного файла берётся из имени PDF и получает расширение .mmd. При отсутствии параметра каталога результат печатается в консоль, что годится для короткой проверки, но неудобно для длинной статьи: управляющие последовательности терминала, прокрутка и перенаправление вывода затрудняют контроль многостраничного текста.

На первой обработке может потребоваться получение контрольной точки модели. Этот этап нельзя путать с распознаванием: сначала проверяется доступность файлов модели, затем создаётся объект нейросети, выбирается вычислительное устройство и только после этого открываются PDF. Если соединение недоступно или каталог контрольной точки повреждён, до чтения страниц дело не дойдёт. Для повторяемого рабочего места полезно заранее убедиться, что модель полностью получена и читается из указанного каталога.

Команда Nougat OCR для обработки одного PDF и создание файла MMD

Подготовка исходного документа

Перед запуском стоит открыть PDF в обычном просмотрщике и пролистать несколько характерных страниц: титульную, страницу с двумя колонками, страницу с крупной формулой, таблицу и список литературы. Такой осмотр показывает, насколько документ похож на корпус научных статей, на котором обучалась модель. Плотный набор, стандартные поля, чёткий шрифт и предсказуемая иерархия заголовков дают более устойчивый результат, чем рекламный буклет, анкета, газетная полоса или рукописный конспект.

Скан должен быть развёрнут правильно. Поворот на 90 градусов, трапецеидальная перспектива, тёмный корешок книги и волнистая строка около переплёта меняют геометрию сразу всей страницы. Nougat не предлагает отдельные ползунки исправления перспективы, удаления фона или выравнивания. Такие операции выполняют до распознавания, сохраняя новый PDF с одинаковой ориентацией и достаточным контрастом. Автоматическое повышение резкости также требует осторожности: агрессивный фильтр создаёт ложные засечки у символов и портит тонкие индексы.

Большие пустые поля не всегда безобидны. Модель видит страницу как единое изображение и должна одновременно определить область содержимого и сгенерировать последовательность разметки. Если полезный текст занимает маленькую часть листа, символы после масштабирования становятся мельче. Для редких листов нестандартного формата полезнее заранее обрезать поля, чем искусственно повышать разрешение всего изображения. Обрезка не должна задевать номера уравнений, подписи и колонтитулы, иначе восстановить их после распознавания уже нельзя.

Защищённые, повреждённые и частично загруженные PDF необходимо проверить отдельно. Ошибка потока при чтении приводит к пропуску файла ещё до инференса. Практический тест прост: документ должен открываться с первой и последней страницы, а повторное сохранение в новом PDF не должно выдавать предупреждений. Для большой коллекции такую проверку лучше автоматизировать до пакетного запуска, чтобы одна битая публикация не маскировалась среди десятков корректно обработанных файлов.

Командная строка и параметры

Справка nougat --help показывает параметры в одном месте. Позиционный аргумент pdf допускает один или несколько путей. Ключ -o задаёт каталог, -b — размер пакета страниц, -m — тег модели, -c — конкретный каталог контрольной точки. Остальные флаги меняют повторный запуск, точность вычислений, постобработку Markdown, эвристику пропусков и диапазон страниц.

Порядок ключей обычно не влияет на результат, но пути с пробелами нужно заключать в кавычки. На Windows особенно легко перепутать обратную косую черту в пути с управляющими символами внутри сценария Python; в интерактивной оболочке путь в кавычках читается предсказуемее. На системах с чувствительностью к регистру имена Paper.pdf и paper.pdf различаются, поэтому пакетный список должен сохранять точное написание.

Вывод справки важен и для диагностики установки. Если оболочка сообщает, что команда не найдена, модель ещё не запускалась: проблема находится в поиске исполняемого скрипта. Следует проверить активное окружение Python и каталог его скриптов. Запуск через тот же интерпретатор, которым был установлен пакет, исключает ситуацию, когда библиотека оказалась в одном окружении, а команда ищется в другом.

Справка командной строки Nougat OCR со списком параметров

Выбор отдельных страниц

Параметр -p принимает номера в человеческом счёте, начиная с единицы. Запись 1-4,7 означает страницы с первой по четвёртую и отдельно седьмую. Диапазон включителен: обе границы входят в выборку. Внутри программы номера преобразуются к нулевой индексации перед чтением PDF, поэтому пользователю не нужно вычитать единицу вручную.

Ограничение работает только для одного входного PDF. Это защищает от неоднозначности: один и тот же набор номеров мог бы означать разные логические фрагменты в нескольких статьях. Для коллекции безопаснее создать отдельный запуск на каждый документ либо сначала сформировать короткие PDF с нужными страницами. Параметр полезен при проверке качества модели, когда нет смысла ждать обработку всей диссертации ради одной таблицы или нескольких страниц с формулами.

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

Выбор страниц 1–4 и 7 в команде Nougat OCR

Малая и базовая модель

По умолчанию используется модель с тегом 0.1.0-small. Она требует меньше памяти и обычно быстрее, поэтому подходит для первичной оценки документа, обработки на центральном процессоре и небольших видеокарт. Базовую модель выбирают тегом 0.1.0-base. Смена тега может потребовать отдельного набора файлов контрольной точки; это нужно учитывать при переносе сценария на компьютер без доступа к сети.

Выбор модели нельзя сводить к правилу больше всегда лучше. На чистой статье со стандартным макетом малая модель может дать уже приемлемый MMD, а дополнительное время базовой модели не устранит ошибки, вызванные поворотом, низким разрешением или неподдерживаемым языком. Рациональный тест — обработать одинаковые сложные страницы обеими моделями и сравнить не общий объём текста, а конкретные элементы: знаки в индексах, границы таблицы, нумерацию уравнений и порядок колонок.

Сравнивать нужно на одинаковых настройках. Если один запуск выполнялся с эвристикой пропусков, а другой с --no-skipping, различие в числе страниц нельзя приписывать модели. То же относится к постобработке Markdown и точности чисел. Для лабораторного теста удобно сохранять результаты в разные каталоги с понятными именами и вести небольшой список страниц, где базовая модель действительно исправила ошибку.

Пакетная обработка папки

Вместо отдельного файла позиционным аргументом можно передать каталог. Программа рекурсивно находит в нём PDF и сообщает их количество. Другой вариант — текстовый файл, где каждая непустая строка содержит путь к одному PDF. Список удобнее, когда публикации лежат в разных местах или требуется фиксированный порядок, а каталог проще для однородной коллекции.

Для большой партии выходной каталог лучше отделить от входного. Имена MMD формируются по базовым именам PDF; если в разных подпапках встречаются два файла article.pdf, результат может столкнуться по имени. Перед обработкой следует найти дубликаты и добавить к именам год, журнал или внутренний идентификатор. Это надёжнее, чем выяснять после многочасового запуска, какой из двух результатов был перезаписан.

Пакетный режим не отменяет контроля качества. Полезно автоматически подсчитать количество MMD, найти нулевые и слишком маленькие файлы, собрать строки с MISSING_PAGE и сравнить число страниц PDF с числом разделителей или служебных маркеров. Затем вручную просматривают выборку из коротких, средних и длинных документов. Такой контроль выявляет систематическую проблему модели или окружения раньше, чем данные попадут в поиск, индекс или публикацию.

Пакетная обработка папки с PDF в Nougat OCR

Размер пакета и память

Ключ --batchsize определяет, сколько страниц одновременно поступает в модель. Увеличение значения может повысить загрузку видеокарты и сократить накладные расходы, но память растёт не только из-за входных изображений: место занимают промежуточные тензоры визуального кодировщика и последовательности декодера. Страница с длинным текстом или сложной разметкой способна потребовать больше ресурсов, чем короткая титульная страница.

При нехватке памяти сначала уменьшают пакет до единицы. Это самый предсказуемый способ отделить проблему объёма пакета от несовместимости библиотек. Если ошибка сохраняется на одной странице, проверяют точность вычислений, устройство, версию PyTorch и размер модели. Уменьшение пакета не исправляет повреждённый PDF и не делает неподдерживаемый язык распознаваемым.

На центральном процессоре неположительное значение пакета внутри программы заменяется на единицу. Такой режим существенно медленнее, зато помогает проверить функциональность без видеокарты. Для оценки времени следует измерить несколько обычных страниц после загрузки модели, а не засекать только первую: первоначальная инициализация и чтение контрольной точки искажают результат. Полученную медиану умножают на реальное число страниц и добавляют запас для длинных формул.

Полная точность вычислений

Флаг --full-precision переводит вычисления в float32 вместо bfloat16. В документации отмечено, что на некоторых конфигурациях центрального процессора это может даже ускорить обработку. Практический смысл шире: режим помогает обойти аппаратные или программные ограничения, когда операция с пониженной точностью не поддерживается либо тензоры неожиданно оказываются разных типов.

Цена полного формата — больший расход памяти. На видеокарте это может превратить устойчивый пакет из двух страниц в ошибку выделения памяти, поэтому флаг проверяют вместе с уменьшением batchsize. На процессоре память также возрастает, но ограничение обычно проявляется позже. Сравнение качества стоит проводить на страницах с мелкими индексами и плотными матрицами; изменение формата чисел не гарантирует заметной разницы в каждом документе.

Если один и тот же файл обрабатывается повторно в тот же каталог, существующий MMD будет пропущен. Для честного сравнения точности используют отдельный каталог или добавляют --recompute. Иначе быстрый второй запуск может оказаться простым чтением факта наличия старого результата, а не новым инференсом.

Запуск Nougat OCR с полной точностью и принудительным пересчётом

Повторный расчёт и сохранение результатов

Перед обработкой каждого PDF программа проверяет, существует ли одноимённый MMD. Если файл найден и флаг --recompute не указан, документ пропускается. Это защищает длинную коллекцию от повторной работы после прерванного запуска. Одновременно механизм требует дисциплины: изменение модели, диапазона страниц или параметров без нового каталога не обновит старый файл автоматически.

Принудительный пересчёт удаляет логическое преимущество кэша, поэтому его применяют адресно. Для одной исправленной статьи удобно передать только этот PDF, а не весь каталог. Перед заменой результата полезно сохранить прежний MMD или вести каталоги по профилям настроек. Сравнение двух файлов обычной командой различий быстро показывает, где изменились формулы, заголовки и пропуски.

Выход записывается в кодировке UTF-8. Если редактор показывает нечитаемые символы, проблема чаще находится в неверно выбранной кодировке просмотра, а не в файле. Разметка содержит обратные косые черты, фигурные скобки и окружения LaTeX, поэтому программы, которые автоматически интерпретируют управляющие последовательности, могут отображать их иначе. Для первичной проверки нужен редактор, способный показывать исходный текст без скрытой конвертации.

Что находится внутри файла MMD

Mathpix Markdown, или MMD, расширяет привычный Markdown средствами, необходимыми научным документам. Заголовки обозначаются решётками, абзацы разделяются пустыми строками, а математические выражения используют синтаксис LaTeX. Таблицы могут оставаться в окружениях table и tabular, потому что обычная таблица Markdown не умеет выражать сложные объединения ячеек, многострочные заголовки и математические формулы внутри столбцов.

Полученный файл не является точной копией визуального макета. Колонки превращаются в последовательность чтения, переносы строк объединяются, а координаты блоков обычно не сохраняются. Это достоинство для полнотекстового поиска и обработки языковыми моделями, но ограничение для задач, где нужно восстановить страницу пиксель в пиксель. Фигуры и декоративные элементы также не становятся встроенными изображениями только потому, что были видны в PDF.

Постобработка по умолчанию делает вывод совместимее с Markdown: корректирует некоторые формы нумерованных уравнений, заменяет отдельные старые команды жирного начертания, нормализует блоки кода и превращает распознанные адреса в разметку ссылок. Флаг --no-markdown отключает этот шаг и оставляет более сырой ответ модели. Такой вариант полезен для исследования ошибок, но обычно требует больше собственной очистки.

Пример результата Nougat OCR в формате MMD с формулой и таблицей

Распознавание обычного текста

Для основного текста Nougat решает две задачи одновременно: распознаёт символы и определяет порядок чтения. На двухколоночной странице правильный результат должен закончить левую колонку прежде, чем перейти к правой, не смешивая соседние строки. Проверка только орфографии недостаточна: текст может состоять из корректных слов, но абзацы окажутся переставлены, что полностью изменит смысл статьи.

Переносы слов на границе строки обычно должны исчезнуть, если это типографический перенос одного слова, и сохраниться, если дефис является частью термина. Ошибки особенно заметны в химических названиях, составных фамилиях и обозначениях диапазонов. Автоматическая замена всех последовательностей дефис плюс перевод строки опасна: она исправляет одни случаи и склеивает другие. Надёжнее проверять такие места по словарю предметной области или по исходной странице.

Полужирное и курсивное начертание передаётся не во всех случаях одинаково, потому что целевой формат ориентирован прежде всего на содержание и структуру. Если начертание кодирует математический объект — например, вектор или матрицу, — его потеря существеннее, чем пропущенный курсив в обычном вводном предложении. Контроль качества следует строить по смысловой цене ошибки, а не по количеству визуальных несовпадений.

Формулы и номера уравнений

Сильная сторона Nougat — преобразование математической записи в LaTeX-подобную последовательность. Встроенная формула остаётся внутри строки, а вынесенная получает отдельный блок. Индексы, степени, дроби, корни, интегралы, суммы и матрицы кодируются командами, которые можно передать математическому рендереру. Номер уравнения может быть добавлен через ag{} во время постобработки.

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

Нумерация требует отдельной сверки. Если номер стоял у правого поля, модель может присоединить его к формуле, вывести как обычный текст или пропустить. В статье с перекрёстными ссылками ошибка номера нарушает связь между фразой из уравнения (3) и самим блоком. При подготовке корпуса для поиска полезно сохранить номера как устойчивые идентификаторы, но не следует автоматически перенумеровывать выражения до сравнения с оригиналом.

Химическая нотация, диаграммы и рукописные исправления не равны обычной печатной математике. Даже когда отдельные символы распознаны, пространственное отношение может не помещаться в линейный LaTeX. Такие фрагменты отмечают для ручной проверки или сохраняют рядом изображение страницы. MMD предназначен для структурированного текста, а не для гарантированного описания любой научной графики.

Таблицы в LaTeX-разметке

Таблица обычно выводится как окружение table с вложенным tabular. Символ & разделяет ячейки, а двойная обратная косая черта завершает строку. Это позволяет сохранить формулы и сложные подписи, но требует проверки количества разделителей: одна потерянная ячейка сдвигает все значения правее и делает таблицу внешне похожей на исходную только в первых столбцах.

Горизонтальные и вертикальные линии, объединённые ячейки, сноски и многоуровневые заголовки повышают сложность. Модель может выбрать приблизительную структуру, которая рендерится, но не отражает логические группы. Для статистической таблицы сначала сверяют заголовки столбцов и единицы измерения, затем крайние значения и строки итогов. Если данные будут загружены в таблицу или базу, необходима проверка типов: десятичная точка, знак минуса и показатель степени важнее декоративной линии.

Длинная таблица, продолжающаяся на следующей странице, распознаётся по страницам и не обязана автоматически собраться в один логический объект. На границе могут повториться заголовки, появиться отдельные окружения или служебный маркер. Объединять части следует после сравнения номеров таблицы, совпадения столбцов и указаний continued. Простое удаление второго заголовка без контроля способно соединить две разные таблицы одинаковой ширины.

Для экспорта в обычный Markdown сложные окружения придётся упростить. Базовый синтаксис Markdown не поддерживает объединение строк и столбцов, поэтому часть информации теряется. Если цель — анализ данных, лучше разобрать tabular в структурированный массив и явно обработать multicolumn; если цель — публикация, разумнее сохранить LaTeX или преобразовать MMD специализированным конвертером.

Заголовки, списки и библиография

Иерархия разделов выражается количеством решёток. Ошибка уровня не меняет распознанные слова, но влияет на оглавление, разбиение текста на фрагменты и навигацию. Слишком длинная строка, ошибочно принятая за заголовок, может быть исправлена постобработкой, однако окончательное решение требует контекста. В научной статье заголовок обычно короток, отделён интервалом и согласуется с нумерацией соседних разделов.

Маркированные и нумерованные списки сложны из-за вложенности. Сдвиг уровня меняет отношение подпункта к основному пункту, а распознанная звёздочка может быть как маркером списка, так и математическим символом. В методических разделах и алгоритмах нужно проверить отступы, последовательность номеров и наличие всех условий. Блок кода или псевдокод иногда лучше сохранить отдельно, чем принудительно превращать в обычный список.

Список литературы часто содержит строки, начинающиеся с маркера и номера в квадратных скобках. Постобработка пытается удалять очевидные повторяющиеся или галлюцинированные фрагменты, но не сверяет каждую запись с библиографической базой. Для практической проверки достаточно сопоставить число ссылок, первые и последние записи, DOI или названия журналов в выборке. Если библиография используется для построения графа цитирования, необходим отдельный парсер и нормализация авторов.

Ссылки внутри основного текста могут быть распознаны как числа, диапазоны или обычные скобки. Их связь с конкретной записью не оформляется отдельным структурным объектом MMD. Поэтому задача извлечь текст и задача разрешить все цитирования различаются. Nougat обеспечивает материал для следующего этапа, но не заменяет библиографическую верификацию.

Рисунки, подписи и визуальные элементы

Модель ориентирована на перевод страницы в текстовую разметку, поэтому рисунок не превращается автоматически в отдельный графический файл с координатами. Подпись может быть распознана как текст, но связь с изображением и положение рисунка требуют дополнительной обработки. Если для публикации нужны иллюстрации, их извлекают из PDF отдельным инструментом и затем связывают с распознанными подписями по номеру.

Графики создают особый риск: подписи осей и легенда похожи на обычный текст, но их порядок определяется пространством, а не строками. Линейный вывод может смешать значения делений, названия серий и подпись рисунка. Для поиска по статье этого иногда достаточно, но для восстановления данных графика — нет. Такой фрагмент следует сохранять как изображение и обрабатывать методом, рассчитанным на диаграммы.

Схемы, молекулярные структуры и геометрические чертежи содержат смысл в линиях и взаимном расположении объектов. Даже идеальное распознавание букв не воспроизводит связи. При подготовке набора для языковой модели полезно вставлять явный маркер рисунка и подпись, не выдавая линейный набор меток за полноценное описание. Это предотвращает ложное впечатление, что вся визуальная информация уже переведена в текст.

Двухколоночные и сложные макеты

Научные журналы часто используют две колонки, плавающие рисунки и таблицы на всю ширину. Nougat обрабатывает страницу целиком, поэтому может учитывать глобальный макет, но результат всё равно нужно проверять на границах блоков. Типичная ошибка — переход из левой колонки в подпись центрального рисунка, затем в правую колонку и обратно. Она заметна по внезапно оборванному предложению или несогласованному местоимению.

Таблица на всю ширину между двумя частями колонок задаёт три зоны чтения: верхние колонки, таблица, нижние колонки. Если порядок нарушен, последующая разбивка текста по заголовкам не исправит смысл. Для контроля удобно найти последнюю фразу перед таблицей и первую после неё в оригинале, затем проследить их порядок в MMD. Аналогично проверяют сноски, которые должны идти после соответствующего текста, а не посреди абзаца.

Поля с редакционными пометками, водяные знаки и номера строк создают дополнительные последовательности. Модель может проигнорировать их, включить в основной текст или принять за элементы формулы. Если документ предназначен для машинного анализа, лучше удалить повторяющийся водяной знак до распознавания. Номер строки в рукописи иногда важен для рецензирования, но MMD не обещает сохранять точные координаты, поэтому его нельзя использовать как единственный ориентир для построчных замечаний.

Сканированные статьи и качество изображения

Поскольку входом служит изображение страницы, сканированный PDF допустим. Однако качество старой печати напрямую влияет на каждый символ. Размытые точки превращают i и l друг в друга, потерянная горизонталь меняет знак равенства, а фон бумаги скрывает тонкие индексы. Простое увеличение DPI после сканирования не добавляет деталей: оно лишь создаёт больше пикселей вокруг уже размытого знака.

Полезная предварительная обработка включает выравнивание, умеренное удаление фона и контроль контраста. Бинаризация должна сохранять тонкие штрихи формул. Если порог слишком высокий, исчезнут минусы и дробные черты; если слишком низкий, шум превратится в пунктуацию. Для неоднородной книги лучше проверять несколько страниц из начала, середины и конца, потому что освещение и изгиб корешка меняются.

Сильно сжатые изображения с квадратными артефактами особенно вредны для мелкого шрифта. Повторное сохранение PDF в более высоком качестве не восстановит исходные контуры. Если доступен оригинальный скан или издательский PDF, следует использовать его. При отсутствии лучшего оригинала полезно ограничить ожидания: распознать основной текст, а формулы и таблицы пометить для ручного ввода.

Языковые ограничения

Модель лучше всего работает с английскими научными статьями. Другие языки на латинице иногда дают приемлемый результат, но качество зависит от алфавита, диакритики и сходства типографики с обучающим корпусом. Русский, китайский и японский тексты официальная справка относит к неподдерживаемым. Это ограничение нельзя устранить выбором базовой модели, увеличением пакета или полной точностью.

В смешанном документе английские формулы и обозначения не гарантируют правильный русский основной текст. Модель может генерировать похожие латинские символы, пропускать строки или выдавать правдоподобные, но неверные последовательности. Такой результат опаснее явной ошибки, потому что проходит поверхностную проверку длины. Для русскоязычной статьи нужен OCR с соответствующей языковой моделью, а математические блоки при необходимости обрабатывают отдельно.

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

Маркеры пропущенных страниц

Nougat применяет эвристику обнаружения неудачного ответа. Если генерация содержит подозрительные повторения или страница слишком отличается от обучающего домена, вместо обычного текста в MMD появляется маркер вида MISSING_PAGE_FAIL или MISSING_PAGE_EMPTY с номером. Это не всегда означает пустую страницу: эвристика может дать ложное срабатывание на центральном процессоре, старой видеокарте, обложке или необычном макете.

Флаг --no-skipping отключает раннее отбрасывание. Его применяют к проблемному документу или выбранным страницам, а затем сравнивают полученный текст с оригиналом. Отключение проверки не гарантирует исправления: модель может вывести повторяющийся или обрезанный фрагмент, который раньше был заменён понятным маркером. Поэтому такой результат нельзя автоматически считать более полным.

В большой партии маркеры собирают отдельным поиском. Таблица контроля должна содержать имя PDF, номер страницы, вид маркера и результат повторного запуска. Если много пропусков возникает во всех документах, ищут системную причину — вычислительное устройство, точность, контрольную точку или зависимости. Если проблема ограничена несколькими обложками и страницами рекламы, их можно исключить осознанно.

Маркеры MISSING_PAGE и повторный запуск Nougat OCR без пропуска

Повторы, обрезанный вывод и галлюцинации

Авторегрессионный декодер создаёт разметку последовательно и иногда попадает в цикл, повторяя строку или фрагмент. Код проверяет повторения и может пометить страницу как неудачную. Постобработка дополнительно пытается обрезать непрерывный повторяющийся хвост. Однако короткий смысловой повтор в самой статье и длинный технический цикл выглядят по-разному, поэтому автоматическое удаление не заменяет просмотр.

Обрезанный вывод особенно вероятен на странице с очень большим количеством текста или сложной таблицей. У модели есть максимальная длина последовательности; когда разметка не помещается, конец страницы пропадает или возникает повтор. В таком случае увеличение разрешения не помогает, потому что ограничение находится в выходной последовательности. Практические варианты — проверить другую модель, разделить исходную страницу до распознавания или вручную восстановить хвост.

Галлюцинация означает текст, которого нет на странице, но который выглядит правдоподобно. В библиографии это может быть повтор похожей записи, в заголовках — выдуманная короткая строка, в формулах — синтаксически корректный, но неверный член. Автоматический контроль по длине и отсутствию маркеров такую ошибку не найдёт. Для критических документов требуется визуальная выборка, а для числовых данных — сверка контрольных значений.

Работа на центральном процессоре и видеокарте

Программа выбирает вычислительное устройство через PyTorch. Видеокарта ускоряет матричные операции, но требует совместимой сборки PyTorch и драйвера. На Windows установка пакета без предварительного выбора подходящей CUDA-сборки может оставить только процессорный вариант, даже если видеокарта присутствует. Проверять нужно не наличие слова CUDA в системе, а то, видит ли её именно активное окружение Python.

Процессорный режим полезен для проверки и небольших задач, но обработка многостраничных публикаций может занять значительно больше времени. Полная точность иногда оказывается выгоднее для конкретного процессора, поэтому следует измерять оба режима на одинаковых страницах. Оценка должна включать пиковую память и стабильность, а не только секунды на страницу.

Старая видеокарта может формально поддерживаться, но неэффективно работать с bfloat16. Ошибки типов, отсутствие операции или неожиданный переход на процессор указывают на несовместимость стека. Последовательная диагностика начинается с одного PDF и пакета из одной страницы, затем проверяется полная точность и только после этого увеличивается нагрузка. Одновременная смена нескольких параметров скрывает причину.

Контрольные точки и первый запуск

Если каталог контрольной точки не указан или не существует, программа запрашивает модель по тегу. При первом запуске это может занять заметное время и место. Остановка в середине загрузки способна оставить неполные файлы, которые выглядят как существующий каталог, но не читаются моделью. После сбоя следует проверить размер и состав каталога, а не бесконечно повторять распознавание PDF.

Ключ --checkpoint позволяет явно указать подготовленный каталог. Это полезно в закрытой сети, на сервере с общим кэшем и в воспроизводимом проекте. Путь должен вести к структуре, ожидаемой методом загрузки модели, а не к отдельному случайному файлу. При переносе между системами проверяют права чтения и отсутствие повреждения больших файлов.

Тег модели и фактическая контрольная точка должны соответствовать эксперименту. Если указан конкретный каталог, подпись выходной папки стоит формировать по нему, иначе позже невозможно понять, какая модель создала MMD. В публичном наборе данных полезно хранить параметры запуска отдельно от текста, не добавляя их внутрь распознанной статьи.

Ошибки зависимостей Python

Nougat использует PyTorch, Transformers, библиотеки работы с изображениями и PDF, а также постобработку текста. Эти компоненты развиваются независимо, поэтому свежая комбинация может нарушить интерфейс, на который рассчитывает код. В отчётах пользователей встречаются ошибки в Albumentations и Pydantic, конфликт OpenCV с отсутствующим объектом cv2.dnn.DictValue, а также изменения в библиотеке растеризации PDF.

Диагностику начинают с полного текста исключения. Последняя строка называет непосредственную ошибку, но несколько строк выше обычно видно, какой модуль и версия участвовали. Не следует наугад переустанавливать все пакеты: это меняет сразу несколько переменных. Надёжнее создать чистое окружение, зафиксировать версии, повторить минимальную команду на одном PDF и затем сравнить с рабочей конфигурацией.

При известном конфликте временная фиксация совместимой версии может восстановить работу. Такое решение нужно записать в файл зависимостей, иначе следующий автоматический апдейт вернёт ошибку. После замены компонента повторно проверяют не только запуск, но и реальный вывод формулы и таблицы: библиотека может загружаться без исключения, однако изменить растеризацию или форму входного тензора.

Команда не найдена в Windows

Сообщение о неизвестной команде означает, что оболочка не видит созданный при установке исполняемый скрипт. Сначала проверяют, активировано ли нужное виртуальное окружение. Затем выясняют, какой интерпретатор отвечает на команду python и куда он устанавливает скрипты. Простое повторение установки с правами администратора не устраняет ситуацию, когда открыта другая среда.

Надёжный тест — запустить модуль тем же интерпретатором или вызвать исполняемый файл из каталога Scripts по полному пути. Если это работает, проблема ограничена переменной PATH. После добавления каталога нужно открыть новое окно терминала, потому что уже запущенная оболочка может хранить старое окружение. В сценариях автоматизации лучше активировать среду явно, а не полагаться на глобальный PATH.

Путь к PDF с пробелами и символами национального алфавита заключают в кавычки. Если команда запускается, но файл не находится, полезно временно переместить тестовый PDF в короткий каталог и дать ему простое имя. Это отделяет ошибку пути от ошибок модели. После успешного теста возвращают исходную структуру и проверяют один сложный путь.

Ошибки чтения PDF и каталогов

Файл может существовать, но не читаться из-за повреждённого потока, шифрования или неполной загрузки. В коде отдельная ошибка потока перехватывается, после чего документ пропускается. Если пакет завершился подозрительно быстро, следует сравнить список входных PDF со списком MMD и просмотреть журнал, а не считать отсутствие исключения признаком успеха.

Выходной путь обязан быть каталогом. Если по этому имени уже существует обычный файл, программа завершит работу с ошибкой. Недостаток прав проявляется при создании каталога или записи MMD. На сервере общий каталог может разрешать чтение, но запрещать запись; на Windows файл иногда остаётся заблокированным редактором или антивирусной проверкой.

При пакетном поиске каталог обходится рекурсивно по расширению .pdf. Файлы с необычным регистром расширения или без расширения могут не попасть в список в зависимости от системы и метода поиска. Перед запуском полезно нормализовать имена и отдельно посчитать документы. Текстовый список путей не должен содержать лишних кавычек как часть строки или невидимых символов в начале.

API для автоматической отправки PDF

Дополнительные зависимости добавляют команду nougat_api, которая поднимает FastAPI с названием Nougat API. Основная операция — POST на путь /predict/. В запросе передаётся PDF как файл, а ответом служит строка с разметкой документа. Параметры start и stop ограничивают диапазон страниц; обе границы включаются в выбор.

API хранит промежуточные результаты по хэшу содержимого PDF. Для уже обработанных страниц читаются сохранённые MMD, а недостающие вычисляются. Это ускоряет повторный запрос диапазона, но требует контролировать каталог кэша и свободное место. Один и тот же файл с изменённым байтом получает другой хэш, поэтому считается новым документом.

Интерфейс удобно проверять через схему OpenAPI. В ней видны обязательное поле файла, необязательные целые параметры и строковый ответ. Перед интеграцией следует отправить маленький PDF и убедиться, что клиент правильно кодирует multipart/form-data. Передача пути на стороне клиента вместо содержимого файла не загрузит документ на сервер.

Проверка состояния Nougat API в командной строке

Диапазоны страниц в API

Параметры start и stop задаются как номера страниц, понятные пользователю. Сервер преобразует их в внутренний диапазон, начиная с start - 1 и заканчивая включённой границей stop. Передача только одной границы в исходной реализации не включает частичный режим: диапазон применяется, когда указаны обе.

Клиент должен валидировать значения до запроса. Начальная страница не может быть меньше единицы, конечная должна быть не меньше начальной, а выход за реальное число страниц следует обрабатывать явно. Иначе ошибка может проявиться далеко внутри растеризации или дать пустой набор. Для длинной книги диапазоны удобно выдавать очередями и сохранять связь между номером запроса и исходными страницами.

Ответ объединяет страницы в одну строку. Границы не обязательно представлены отдельным структурным объектом, поэтому клиенту, которому важна постраничная адресация, лучше вызывать контролируемые диапазоны или использовать сохранённые сервером файлы страниц. Простое деление ответа по двойным переводам строк не восстанавливает страницы надёжно: такие разделители естественно встречаются между абзацами.

Запрос к Nougat API с диапазоном страниц

Схема OpenAPI и проверка интеграции

Схема OpenAPI служит машинно читаемым описанием маршрутов. Она позволяет сгенерировать клиент, проверить имена полей и увидеть тип ответа без чтения серверного кода. Для Nougat особенно важно, что PDF отправляется как бинарное поле формы, а start и stop относятся к строке запроса. Ошибка размещения параметров приводит к тому, что сервер использует весь документ.

Автоматический клиент должен учитывать длительность инференса. Большой PDF не похож на мгновенный справочный запрос: соединение может оставаться открытым минуты, а промежуточный прогресс в строковом ответе не передаётся. Тайм-аут выбирают по реальной производительности и размеру документа. На стороне очереди следует ограничивать число параллельных запросов, иначе несколько моделей одновременно исчерпают память видеокарты.

Проверка интеграции включает три уровня: доступен корневой маршрут, схема содержит /predict/, тестовый файл возвращает непустую строку. Затем проверяют диапазон и повторный запрос того же документа. Только после этого подключают очередь публикаций. Такой порядок быстро локализует ошибку между сетью, сериализацией и моделью.

Схема OpenAPI для маршрута predict в Nougat API

Постобработка и собственный конвейер

Готовый MMD редко является последним шагом. Для публикации его рендерят, для полнотекстового поиска очищают служебные маркеры, для RAG разбивают по заголовкам, а для базы формул извлекают математические окружения. Эти операции должны сохранять исходный файл неизменным. Лучше создавать производные версии, чтобы при обнаружении ошибки можно было вернуться к ответу модели.

Очистка начинается с структурных проверок: парность математических ограничителей, закрытие окружений table, tabular, matrix, отсутствие чрезмерно длинных повторов. Затем нормализуют пробелы и заголовки. Орфографическое исправление применяют последним и только к обычному тексту; запуск корректора по LaTeX способен изменить команды, переменные и фамилии.

Для конвертации в HTML нужен рендерер, понимающий используемое расширение Markdown и LaTeX-таблицы. Обычный движок Markdown покажет часть команд как сырой текст. Перед массовой публикацией следует сделать контрольную страницу с встроенной формулой, нумерованным уравнением, матрицей и сложной таблицей. Если все элементы отображаются, можно переходить к коллекции.

При загрузке в поисковый индекс формулы лучше хранить и в исходной разметке, и в нормализованном текстовом представлении. Поиск по точной команде LaTeX полезен специалистам, а словесное описание или токенизация символов помогает семантическому поиску. Не следует удалять обратные косые черты как мусор: они несут структуру выражения.

Проверка качества результата

Минимальная проверка включает наличие файла, ненулевой размер и отсутствие маркеров пропуска. Этого недостаточно для научного текста. Полноценная выборка должна охватывать начало, середину и конец документа, а также каждую категорию сложного содержимого. Для статьи на двадцать страниц разумно сверить несколько обычных абзацев, все крупные таблицы и хотя бы по одной формуле каждого типа.

Удобно вести протокол ошибок с категориями: порядок чтения, символ, формула, таблица, заголовок, библиография, пропуск, повтор. Он показывает, какой этап исправлять. Например, многочисленные ошибки символов указывают на качество изображения или язык, а правильные символы в неверном порядке — на макет. Одна общая оценка плохо не помогает выбрать параметр или другой инструмент.

Числовые таблицы проверяют контрольными суммами и диапазонами. Если в столбце должны быть вероятности от нуля до единицы, значение 8.75 сигнализирует о потерянной десятичной точке. Для формул можно компилировать LaTeX и искать синтаксические ошибки, но математическую корректность всё равно сверяют визуально. Для библиографии сравнивают число записей и несколько идентификаторов.

После ручной выборки правила автоматизируют. Например, сбор всех MISSING_PAGE, поиск строк с сотнями повторяющихся символов, проверка незакрытых окружений и слишком длинных заголовков. Автоматические флаги не удаляют данные, а формируют очередь на просмотр. Такой подход безопаснее агрессивной очистки, которая скрывает дефекты.

Использование для поиска и RAG

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

Служебные маркеры нельзя молча удалять перед индексацией. Если страница пропущена, соседние фрагменты создают ложное впечатление непрерывности. Маркер следует преобразовать в метаданные о неполноте и исключить сомнительный участок из ответов либо отправить на повторное распознавание. Имя PDF и номер диапазона сохраняют рядом с каждым фрагментом для проверки.

Таблицы требуют особого представления. Сырой tabular сохраняет структуру для рендера, но семантический поиск может плохо понимать разделители. Полезно дополнительно создавать строки вида название столбца — значение для каждой записи, не уничтожая исходную таблицу. Для формул аналогично сохраняют LaTeX и ближайший текстовый контекст.

Nougat не подтверждает истинность статьи и не исправляет научные ошибки. RAG-система должна ссылаться на исходный документ, а не на MMD как на новый авторитетный текст. При критическом ответе пользователь должен иметь возможность открыть страницу PDF и сравнить формулу или число.

Сравнение Nougat OCR с аналогами

ПрограммаЛучше подходит дляГлавное ограничение
Nougat OCRНаучных PDF с формулами и таблицами, которые нужно получить в MMDСлабая работа с неподдерживаемыми языками и нет визуального редактора
PDF CommanderРучного редактирования, сборки и распознавания обычных PDF через понятный интерфейсНе создаёт специализированную научную разметку MMD с LaTeX-таблицами
GROBIDИзвлечения метаданных, библиографии и структуры научной статьи в TEI XMLЦелевой формат ориентирован на XML и библиографический конвейер, а не на визуально близкий Markdown
MarkerКонвертации разных документов в Markdown, JSON и HTML с таблицами и формуламиБольшой набор моделей и параметров усложняет воспроизводимую настройку
DoclingЕдиного конвейера для PDF, офисных файлов, изображений и структурированного JSONУниверсальность требует выбора подходящего конвейера и контроля качества отдельных элементов
MathpixОблачного распознавания формул и экспорта PDF в несколько научных форматовДля автоматизации требуется учётная запись и сетевой сервис

Nougat выбирают, когда основная цель — получить из англоязычной научной публикации MMD с LaTeX-формулами и сохранить обработку в собственном Python-конвейере. PDF Commander практичнее для пользователя, которому нужно визуально исправить, объединить или распознать обычный PDF, а не строить набор данных. GROBID сильнее в метаданных, авторах, ссылках и TEI XML. Marker и Docling удобнее при смешанных форматах и необходимости Markdown, JSON или HTML. Mathpix подходит, когда важны готовый сервис, несколько форматов экспорта и не требуется держать весь вычислительный стек у себя.

Типовые сценарии

Оцифровка коллекции статей

Для репозитория сначала формируют неизменяемый список PDF и проверяют дубликаты имён. На небольшой выборке сравнивают малую и базовую модель, фиксируют размер пакета и точность. Затем запускают каталог, собирают маркеры пропусков и сохраняют параметры рядом с результатами. Повторный запуск выполняют только для проблемных файлов, чтобы не тратить время на уже проверенные статьи.

Извлечение формул из диссертации

Сначала обрабатывают страницы с наиболее сложной математикой через диапазон -p. MMD рендерят и сверяют индексы, номера уравнений и матрицы. Если качество достаточное, запускают весь документ. Формулы извлекают вместе с ближайшими абзацами и номерами разделов; отдельный список голых выражений быстро теряет смысл обозначений.

Подготовка текста для базы знаний

Результат разбивают по структуре, таблицы получают дополнительное линейное представление, а маркеры пропусков становятся флагами качества. Каждый фрагмент хранит имя PDF и страницы. Перед публикацией выполняют выборочную сверку чисел и формул, потому что гладкий текст не гарантирует точность научного содержания.

Проверка одного сложного фрагмента

Для таблицы или формулы не требуется обрабатывать весь PDF. Выбирают страницу, сохраняют результат в отдельный каталог и сравнивают модели. При ложном MISSING_PAGE повторяют с отключённой эвристикой. Если обе модели искажают структуру, переходят к ручному вводу или специализированному средству вместо бесконечной смены параметров.

Лицензия и допустимое применение

Код проекта распространяется по лицензии MIT, а веса модели — по CC-BY-NC. Для практического использования это различие существенно: разрешения на программный код не отменяют ограничений лицензии контрольной точки. Перед коммерческим внедрением нужно оценить условия именно тех весов, которые выполняют распознавание, и сохранить требуемую атрибуцию.

Обрабатываемые PDF могут быть защищены авторским правом, содержать персональные или конфиденциальные данные. Техническая возможность получить MMD не даёт права публиковать полный текст. В закрытом исследовательском процессе следует ограничить доступ к исходникам, кэшу API и выходным файлам, а после завершения определить срок хранения.

Для воспроизводимости сохраняют сведения о модели, параметрах и контрольной сумме исходного PDF. Это помогает отличить изменение распознавания от изменения документа. В открытом наборе данных полезно публиковать не только MMD, но и описание проверки качества и известных пропусков, не создавая впечатление безошибочной транскрипции.

Практический чек-лист перед большим запуском

  1. Открыть несколько PDF и проверить ориентацию, читаемость формул, таблиц и последней страницы.
  2. Убедиться, что команда справки запускается в нужном окружении Python.
  3. Обработать репрезентативный диапазон страниц малой моделью.
  4. Сравнить базовую модель только на тех же страницах и настройках.
  5. Выбрать размер пакета с запасом памяти, начиная с единицы.
  6. Проверить MMD в исходном виде и после математического рендеринга.
  7. Найти маркеры пропусков, повторы и незакрытые окружения.
  8. Разнести входные PDF и результаты, исключить столкновения имён.
  9. Зафиксировать параметры, модель и контрольные суммы документов.
  10. После пакетной обработки вручную проверить выборку и все таблицы с критическими числами.

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

Растеризация страницы и геометрия входа

Перед распознаванием PDF переводится в изображения страниц. Архитектура модели ожидает нормализованный прямоугольный кадр; в описании метода используется вход около 896 на 672 пикселя, а обучающие страницы готовились из научных PDF с контролируемым разрешением. Это объясняет, почему размер исходного листа влияет не напрямую: огромная страница всё равно приводится к рабочему размеру, и слишком мелкий текст теряет детали.

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

Растеризация должна корректно воспроизводить встроенные шрифты, прозрачность и обтравочные рамки. Если другой просмотрщик показывает пустые символы или неверные слои, полезно создать нормализованную копию PDF и сравнить изображения страниц. Нельзя диагностировать модель по документу, который уже на этапе рендера потерял формулу. Контрольный снимок проблемной страницы помогает определить, возникла ошибка до нейросети или в её ответе.

Изменение разрешения имеет предел полезности. Низкое разрешение разрушает мелкие детали, но чрезмерное увеличивает время подготовки и не меняет размер тензора после нормализации. Поэтому сначала устраняют поворот, поля и плохой контраст, а затем подбирают разумное разрешение. Для одинаковой коллекции этот параметр фиксируют, чтобы результаты можно было сравнивать.

Диагностический режим без Markdown-постобработки

Флаг --no-markdown сохраняет ответ до этапа совместимости с Markdown. Он полезен, когда готовый MMD содержит странно изменённый номер уравнения, ссылку или жирное начертание и нужно понять, где появилась ошибка. Если сырой ответ уже неверен, причина находится в распознавании; если различие возникает только после постобработки, можно скорректировать преобразование отдельно.

Постобработка выполняет конкретные замены, а не повторное распознавание страницы. Она переносит номер уравнения в ag, нормализует некоторые команды жирного шрифта, оформляет найденные адреса как ссылки, исправляет блоки кода и удаляет очевидные повторения. Поэтому отключение шага не повышает визуальную точность само по себе. Оно даёт материал для отладки и может оставить синтаксис, который хуже открывается обычным Markdown-рендерером.

Сравнение делают на одном PDF, одной модели и одинаковом диапазоне. Два файла различий показывают все автоматические замены. Особое внимание уделяют формулам и библиографии, где регулярное выражение может затронуть последовательность, похожую на шаблон. После анализа выбирают либо стандартный MMD, либо собственную осторожную постобработку для конкретного корпуса.

Сырой вывод не следует смешивать с уже очищенными файлами в одном каталоге. Расширение одинаковое, а семантика обработки различается. В названии каталога или метаданных фиксируют состояние постобработки, иначе позднее сравнение качества будет недостоверным.

Возобновление длинной обработки

Механизм пропуска существующих MMD позволяет продолжить коллекцию после перезагрузки или ошибки. Повторяют ту же команду на входном каталоге, и документы с готовыми файлами не рассчитываются заново. Перед возобновлением нужно проверить, что последний MMD записан полностью. Если процесс был остановлен во время записи, файл может существовать, но содержать неполный текст и всё равно считаться готовым.

Надёжная схема использует временное имя: результат сначала создаётся во временном каталоге, проходит минимальные проверки и только затем перемещается в основной набор. Сама команда не предоставляет транзакционную очередь, поэтому эту логику добавляет внешний сценарий. Для каждого документа сохраняют код завершения, размер MMD и число маркеров пропуска. Тогда возобновление опирается не только на факт существования файла.

Очень длинную книгу разумно делить на диапазоны, если требуется устойчивость к сбоям. После обработки части результаты объединяют в порядке страниц, сохраняя границы и проверяя, что диапазоны не пересекаются и не оставляют разрывов. Простое сложение MMD может создать два соседних заголовка или незакрытое окружение таблицы на границе; такие места проверяют отдельно.

При смене модели или параметров продолжать старый каталог нельзя. Он содержит смесь результатов разных профилей, а механизм пропуска скрывает различие. Новый эксперимент получает новый каталог и журнал. Старые файлы удаляют только после сравнения, потому что новая конфигурация может исправить одну таблицу и ухудшить другую.

Имена файлов и воспроизводимость

Выходное имя строится из базового имени PDF, поэтому оно должно быть уникальным в пределах каталога результата. В научных хранилищах часто встречаются main.pdf, paper.pdf и manuscript.pdf. Перед пакетным запуском им добавляют DOI, внутренний идентификатор или безопасный хэш. Это предотвращает перезапись и связывает MMD с точным исходным файлом.

Одного имени недостаточно, если исходный PDF мог измениться. Контрольная сумма фиксирует содержимое независимо от пути. Вместе с ней сохраняют выбранную модель, флаги, размер пакета, режим точности и дату обработки. Такой небольшой манифест позволяет повторить результат и объяснить, почему два файла с одинаковым названием отличаются.

Пути в текстовом списке лучше делать абсолютными для запуска на одном сервере или относительными к известному корню для переносимого проекта. Смешанный подход создаёт трудноуловимые пропуски. Перед стартом сценарий должен проверить существование каждого пути и вывести число ошибок. Nougat молча продолжает после отсутствующего файла, поэтому внешний контроль защищает от неполной партии.

После получения MMD полезно вычислить его собственную контрольную сумму. Она обнаружит случайное редактирование, ошибку синхронизации или замену после повторного запуска. Если текст исправляется вручную, исходный автоматический результат сохраняют отдельно, а исправленную версию помечают как редакторскую.

Ограничение длины последовательности

Декодер генерирует конечную последовательность токенов, поэтому у страницы есть практический предел объёма разметки. Плотная страница со множеством формул и большой таблицей расходует токены быстрее обычного текста: каждая команда LaTeX, скобка и разделитель становится частью последовательности. Когда предел достигнут, конец может быть обрезан или генерация переходит в повтор.

Признаки проблемы — внезапно оборванное предложение у конца страницы, незакрытое окружение, повторяющийся хвост и маркер неудачи. Сравнение числа строк с соседними страницами помогает найти аномалию, но не заменяет визуальную сверку. Автоматическая функция закрытия окружений делает синтаксис формально завершённым, однако не восстанавливает потерянные строки таблицы.

Разделение одной страницы на части возможно только как подготовительная операция с изображением или новым PDF. При этом нужно сохранить порядок и не разрезать формулу, таблицу или строку пополам. Для двух колонок естественная граница проходит между колонками; для длинной таблицы безопасной границы может не быть. После распознавания частей удаляют дублирующийся текст около перекрытия и проверяют переход.

Увеличение batchsize не расширяет предел одной последовательности. Пакет регулирует число одновременно обрабатываемых страниц, а не максимальную длину ответа каждой страницы. Это различие важно при диагностике: нехватка памяти лечится уменьшением пакета, а обрезанная сверхплотная страница требует другой стратегии.

Безопасность API и управление очередью

Серверный маршрут принимает произвольный PDF и выполняет ресурсоёмкую обработку. Если его открыть для недоверенных клиентов без ограничений, один большой документ или множество параллельных запросов могут занять всю память и процессор. Перед публикацией маршрута добавляют проверку размера, типа файла, числа страниц, аутентификацию и очередь с ограниченной конкуренцией.

Имя загруженного файла не должно определять путь сохранения. Исходная реализация вычисляет хэш содержимого и использует его как каталог, что снижает риск столкновений и опасных имён. При собственной обвязке необходимо сохранить этот принцип: очищать пользовательское имя и никогда не соединять его напрямую с системным путём.

Кэш содержит исходный PDF, миниатюру и распознанные страницы. Для конфиденциальных публикаций это самостоятельное хранилище, которое нужно защищать и очищать по политике проекта. Удаление только итогового ответа не удаляет копию из кэша. Журнал запросов также не должен включать полный распознанный текст, если в нём могут быть персональные данные.

Очередь должна сообщать клиенту состояние задачи отдельно от самого MMD. Базовый маршрут возвращает строку после завершения, поэтому при длинных документах промежуточного статуса нет. В производственной обвязке обычно создают идентификатор задания, ограничивают время и позволяют безопасно повторить запрос без запуска второй копии модели.

Преобразование MMD в другие форматы

Nougat завершает работу на MMD, поэтому DOCX, обычный Markdown, HTML или PDF получают отдельным конвертером. Сначала проверяют, поддерживает ли он LaTeX-окружения таблиц и номера уравнений. Конвертер, рассчитанный только на базовый Markdown, сохранит абзацы и заголовки, но покажет сложную таблицу как сырой код или отбросит часть команд.

Для HTML математические выражения передают рендереру, а таблицы преобразуют в семантические элементы только после проверки структуры. Для DOCX формулы могут перейти в изображения или внутренний формат редактора в зависимости от инструмента. Если документ будет редактироваться, следует проверить возможность менять формулу, а не только её внешний вид.

Обычный Markdown получают ценой упрощения. Встроенные формулы можно оставить как текст, но сложные таблицы и химическая нотация не имеют полного эквивалента. Правильная стратегия зависит от цели: для чтения сохраняют визуальный рендер, для анализа — структурированные данные, для долговременного хранения — исходный MMD вместе с PDF.

Преобразование выполняют после контроля пропусков. Иначе красивый HTML скроет маркер или незакрытая команда нарушит весь последующий документ. В конвейере полезно отделить этапы распознано, проверено, преобразовано и не переходить дальше при критической ошибке.

Что программа не заменяет

Nougat не является редактором PDF: он не двигает страницы, не меняет текст внутри исходника, не ставит подпись и не добавляет водяной знак. Полученный MMD существует отдельно. Если задача состоит в исправлении опечатки в PDF или объединении документов, нужен редактор, а не повторное распознавание всей статьи.

Программа не создаёт поисковый текстовый слой внутри скана. Для хранилища, где пользователь должен искать прямо в просмотрщике PDF и видеть исходный макет, требуется OCR с выводом в searchable PDF. MMD полезен для внешнего поиска и анализа, но не меняет поведение исходного файла.

Nougat не извлекает координаты каждого слова как готовую разметку страницы. Порядок чтения превращается в линейный текст, а связь с прямоугольником на изображении не является основным результатом. Поэтому точное подсвечивание ответа на странице и аннотация по координатам требуют другого инструмента или дополнительного выравнивания.

Наконец, модель не выполняет научную экспертизу. Она может синтаксически аккуратно записать ошибочную формулу из оригинала или сама исказить правильную. Любое критическое число, доказательство или условие эксперимента сверяют по PDF. Автоматизация уменьшает объём ручного набора, но не передаёт ей ответственность за смысл.

Итоговый порядок работы

Наиболее надёжный процесс состоит из короткой пробы, осмысленного выбора модели и обязательной проверки результата. Nougat особенно полезен там, где обычный OCR теряет математическую структуру: в англоязычных статьях, препринтах и диссертациях с формулами и LaTeX-подобными таблицами. Командная строка позволяет точно выбирать страницы, пакет, контрольную точку и режим обработки, а API встраивает тот же механизм в очередь документов.

Ограничения следует учитывать до запуска коллекции. Неподдерживаемый язык не исправляется настройкой, рисунки не превращаются в полноценные описания, сложная таблица требует сверки, а маркер пропуска сообщает о необходимости повторной проверки. При таком подходе MMD становится полезным промежуточным форматом: его можно рендерить, индексировать, преобразовывать и связывать с исходным PDF, не выдавая автоматическое распознавание за безошибочную редакторскую копию.