Джина Советы

Исполнители внутри исполнителей. О боже!

Возьмите существующий Executor и просто заставьте его делать немного больше.

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

Так в чем проблема?

Учитывая PDF, я хочу разбить его на изображения и предложения и сохранить их как куски:

Что я хочу

Но для этого и нужен PDFSegmenter, верно? Неправильный! PDFSegmenter разбивает PDF-файлы на изображения и любые фрагменты текста, которые он может найти. Эти капли могут быть довольно длинными и не обязательно являются предложениями.

Что мне дает PDFSegmenter

Как решить эту проблему?

Мы начнем с потока, который делает одну вещь — использует PDFSegmenter для разбиения нашего PDF на изображения и большие текстовые блоки:

После этого мы добавим новый Executor для обработки каждого фрагмента сегментированного PDF-файла:

Наш новый Исполнитель будет:

  • Посмотрите на каждый фрагмент (назовем их фрагментами уровня 1) и проигнорируйте его, если это изображение.
  • Если это текстовый фрагмент, загрузите Sentencizer Executor из Jina Hub, чтобы разбить его на предложения (назовем их фрагментами уровня 2).
  • Скопируйте фрагменты уровня 2 на уровень 1.

Вот полный код:

Почему бы не сделать это прямо в потоке?

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

Тогда Sentencizer захлебнулся бы изображениями, так как ожидает ввода только текста.

А вы?

Вы строили что-нибудь с Исполнителями внутри Исполнителей (внутри Исполнителей, внутри…)? Дайте нам знать через наше Slack-сообщество!