Как подготовить документы PDF и HTML для RAG?
- Как извлечь текст из PDF для RAG?
- Какие метаданные хранить у фрагментов?
Извлечь текст со структурой: заголовки, списки, таблицы — для HTML это разметка, для PDF — библиотеки разбора (pypdf, pdfplumber, unstructured, docling) или OCR для сканов. Убрать мусор: меню, колонтитулы, номера страниц, повторяющиеся блоки. Разбить на фрагменты с перекрытием, сохраняя метаданные: источник, адрес, заголовок раздела, страница, дата, права доступа.
- Таблицы при наивном извлечении превращаются в кашу — их обрабатывают отдельно
- Сканы без текстового слоя требуют OCR
- Метаданные нужны для ссылок в ответе, фильтров и обновления индекса
А ещё Качество разбора проверяют глазами на выборке документов — до индексации
Подробно
HTML: взять основной контент (без меню и подвала), сохранить иерархию заголовков, преобразовать таблицы в текст или markdown.
PDF:
- текстовый слой есть — разбор с учётом колонок и порядка чтения;
- скан — OCR;
- таблицы — специальные инструменты или мультимодальная модель.
Фрагмент:
{"text": "…", "source": "policy.pdf", "page": 4,
"section": "Возврат товара", "updated": "2026-09-01",
"acl": ["support"]}
Проверка. Открыть десяток разобранных документов и сравнить с оригиналом: порядок текста, таблицы, потерянные куски.
Что хотят услышать
- Извлечение со структурой и очистка.
- Особые случаи: таблицы, сканы.
- Фрагменты с перекрытием и метаданными.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Склеить весь текст PDF в одну строку и резать по 1000 символов без метаданных
- ✗Сканы можно индексировать как есть — эмбеддинги работают с изображениями PDF
- ✗Склеить весь текст PDF в одну строку вместе с колонтитулами и резать по 1000 символов — больше текста, лучше поиск
- ✓Текст со структурой, без мусора, фрагменты с метаданными
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.