Каждый проект RAG на второй день упирается в одну и ту же стену: в документы. Половина из них — это цифровые PDF-файлы, четверть — это сканы, которые кто-то пропечатал на копировальном аппарате в 2011 году, а остальные — это файлы Word. Ваша модель внедрения требует чистого текста, разбитого на разумные фрагменты...
Каждый проект RAG на второй день упирается в одну и ту же стену: в документы. Половина из них — это цифровые PDF-файлы, четверть — это сканы, которые кто-то пропечатал на копировальном аппарате в 2011 году, а остальные — это файлы Word. Ваша модель внедрения требует чистого текста, разбитого на разумные фрагменты, с номерами страниц, чтобы в ответе можно было указать источник.
В этом посте показаны два способа, которыми я это делаю: небольшой скрипт Python, который у вас есть, и размещенный API на случай, если вы не хотите запускать распознавание текста самостоятельно.
Что на самом деле означает «готовность к RAG»
Перед кодом цель. Для каждого документа, который вам нужен:
Текст в порядке чтения, а не столбцы, склеенные в середине предложения.
Структура сохраняется в формате Markdown: заголовки, списки и таблицы сохраняются, потому что они несут смысл для LLM и помогают разбивать на части.
OCR только там, где это необходимо. Запускать распознавание текста на цифровой странице медленнее и хуже, чем читать ее текстовый слой. Если ничего не выполнить на сканируемой странице, вы получите пустую строку, и ваш ретривер молча никогда не найдет эту страницу.
Части с перекрытием (1000–2000 символов с перекрытием ~200 подходят для большинства моделей внедрения) и номера страниц в каждом фрагменте.
Точка 3 — это место, где рвется большинство трубопроводов. «PDF» часто бывает смешанным: 40 печатных страниц и 2 отсканированные страницы с подписями.
Вариант 1: сделать это самостоятельно на Python
Ф