Обработка pdf файлов в ChatGPT
В данной статье я хочу рассказать как обработать папку с текстовыми PDF документами при помощи ChatGPT.
Время от времени у меня появляется задача обработать большое количество pdf-файлов содержащих нужную мне информацию. Для того чтобы обработать все документы, необходимо каждый PDF файл открыть прочитать и понять есть ли в файле нужная мне информация. Было бы здорово если бы я мог провести предварительную автоматическую обработку файлов и сохранить результат в текстовом файле, чтобы затем обработать только те файлы которые мне интересны.
К счастью современные технологии предоставляют такую возможность. Рассмотрим это задачу на примере папки на диске с резюме различных искателей я хочу вычленить из каждого документами фамилию имя отчество, должность и сколько лет опыта у каждого.
Сначала попробуем проверить возможно ли это на примере следующего запроса к chatgpt:
я хочу чтобы ты прочитал резюме кандидата и
вычленил профессиональные качества этого человека.
Меня интересует следующая информация: имя, профессия, сколько лет опыта, индустрия
Постарайся выбирать только факты представленные в документе с минимумом допущений.
Результат должен быть в json формате следующего вида
{"ФИО":"Иванов Иван Иванович", "профессия": "software injeneer", "годаОпыта": "10 лет", "индустрия": "геймдев"}
Если информации недостаточно просто оставь поле пустым.

Как мы видим робот смог вычленить нужную мне информацию и вывести ее в нужном мне виде. Значит этот процесс можно автоматизировать.
Для начала на этой странице нужно создать ключи доступа к API chatgpt, чтобы обращаться к языковой модели программно:
После этого на этой странице следует оплатить стоимость API закинув любую сумму от 5 евро на счёт. Даже если у вас уже есть платная подписка к ChatGPT пользование API в нее не входит и оплачивается отдельно. Следует обратить внимание, что не все страны доступные для пользования API. России в частности в списке разрешённых стран нет.
Убедимся что у нас установлен nodejs и npm
# should be something like v20.11.1
node --version
# should be something like 10.8.2
npm --version
Для извлечения текста из pdf установим утилиту pdf2text
# ubuntu users
sudo apt-get install poppler-utils
# mac users
brew install poppler
pdftotext -h
# Copyright 2005-2024 The Poppler Developers - http://poppler.freedesktop.org
# Copyright 1996-2011, 2022 Glyph & Cog, LLC
Клонируем git репозиторий и устанавливаем зависимости.
git clone https://github.com/maxistar/pdf-analiser.git
cd pdf-analiser
# you can also use npm but pnpm is faster but you should install it first
pnpm install
В терминале экспортируем переменную окружения с нашим openai ключом.
export OPENAI_API_KEY="sk-xxxxx...
Запускаем командой npm start чтобы обработать тестовые pdf в папке data/cvs. После запуска результат обработки будет сохранен в файле data/output/files_yyyMMMddddhhmm.csv. Файл должен выглядить примерно вот так:
File Name,Size (bytes),name,title,experience,industry
Forrest Gump.pdf,155415,"Forrest Gump","house-husband/father","43 года","IT"
Forrest_Gump-1.pdf,155415,"Forrest Gump","House-husband/father","43 года",""
Forrest_Gump.pdf,155415,"Forrest Gump","","","Разработка ПО"
После того как мы убедились что все работает копируем наши файлы которые нужно обработать в папку data/cvs и запускаем обработку еще раз.
Мы обработали папку с PDF файлами содержащими CV соискателей и сохранили интересующие нас данные в csv файл. Следует понимать что языковые модели могут выдавать при одних и тех-же запросах разные результаты, поэтому для более предсказуемого результата можно обработать набор несколько раз и усреднить результат.
Подобным образом можно обработать любое количество документов любого типа. Указанный метод не бесплатный. Обработка сотни документов обходится примерно 2 евро. Однако обработка вручную такого количества документов может оказаться еще дороже.
Антресолька
Сделал антресоль в коридоре. Антресоль спроектировал в OpenSCAD. Все-таки удобная эта штука — можно программировать в 3D любые объекты, будь то для 3D-принтера, будь то для проектирования мебели. Плиты ДСП купил в Hellweg рядом с домом, там есть сервис для резки купленных досок и я сразу нарезал нужную мне длинну. Лицевая панель демпфируется воздушными доводчиками с пружинами на сто ньютонов. Боялся, что ста ньютонов будет маловато, но оказалось, что в самый раз. Внутри полку закрепил металлическими уголками — не очень красиво, но внутри никто и не видит...


Теперь у меня есть больше места для хранения всякой всячины.
Исходники антресольки выложил сюда.
В GPT4All теперь можно загружать заметки
GPT4All это UI клиент компании Nomic который позволяет загружать большие языковые модели от разных производителей и работать с ними полностью offline.
Загрузил новую версию GPT4All и обнаружил что в ней теперь можно загружать свои файлы которые можно использовать для запросов к большой языковой модели.

Это значит что теперь можно, например делать запросы к своим заметкам, текстам книг, технической документации и т.п. Если это действительно будет хорошо работать, то это прям здорово!
Зеркальный тест
Зеркальный тест — это эксперимент, разработанный в 1970 году психологом Гордоном Гэллапом-младшим, чтобы определить, обладают ли животные способностью распознавать себя в зеркале. Зеркальный тест — основной индикатор самосознания у животных и признак перехода в зеркальную фазу у детей в психологии развития. Дети начинают узнавать себя в зеркале начиная с возраста 18 месяцев.
В настоящее время известно, что зеркальный тест проходят все гоминиды: люди, карликовые шимпанзе, шимпанзе, орангутаны, гориллы. Кроме приматов в этом списке находятся также: афалины, косатки, слоны, сороки, гигантские морские дьяволы, муравьи, свиньи.

Интересно видеть в этом списке муравьев. В книге Бернарда Вербера "Муравьи" описывается как муравей, увидев свое отражение в зеркале понимает что видит себя. Я думал, что это художественный вымысел, но оказалось Вербер опирался на вполне научные факты.
Как можно было провести зеркальный эксперимент с муравьями? Оказывается, очень просто: муравьев помечали краской и показывали им их отражение. "При воздействии зеркала муравьи, отмеченные синей точкой, пытались очистить себя, касаясь метки. Подобных результатов не наблюдалось, когда муравьи были отмечены коричневой точкой, которая была того же цвета, что и их тело."


