Как нейросети помогают автоматизировать издательский процесс на примере составления авторского указателя

13.05.2023

Одной из основных задач издательской деятельности является подготовка материалов для их публикации в виде готового издания (книга, альбом, брошюра и т.п.). При этом подготовка научного издания имеет ряд особенностей, проистекающих от "типа" издания - подготавливаем ли мы монографию, сборник трудов, учебное пособие и т.д. Так, авторский указатель является важным элементом любого сборника материалов конференции. Он представляет собой список всех авторов и номеров страниц соответствующих статей, подобно оглавлению, что позволяет читателю быстро находить нужную информацию в готовом издании. Учитывая разнородность подаваемых статей (например, разное количество авторов), в ручном режиме составление такого указателя может быть довольно трудоемким и времязатратным процессом - или выделение каждого отдельного автора на этапе размечания при верстке, или та же работа с полным списком всех авторов. Можно ли автоматизировать этот процесс, не прибегая к помощи сторонних программистов или к поиску готовых коммерческих решений? В данном посте будет рассмотрено, как использование нейросетей может значительно упростить и ускорить этот процесс.

С 2020 года мы являемся партнерами ежегодной Международной медико-биологической конференции молодых исследователей «Фундаментальная наука и клиническая медицина. Человек и его здоровье», организуемой Санкт-Петербургским государственным университетом. Конференция привлекает множество молодых исследователей из разных уголков нашей страны, а также ближнего и дальнего зарубежья. Количество тезисов докладов, которые поступают и затем публикуются в сборнике материалов этой конференции, подходит к полутысяче. Это огромная работа организационного комитета и рецензентов, которая начинается практически за полгода до самого события. Наша же задача состоит в подготовке и издании сборника этой конференции.

В этом году по решению оргкомитета к публикации было принято 402 тезиса доклада и 2 лекции приглашенных ведущих ученых. Это без малого 840 страниц в итоговом сборнике и более 600 авторов. В издательство тезисы поступают в виде нескольких вордовских файлов. Составление авторского указателя в ручном режиме потребовало бы значительного времени. Но нам на помощь приходят нейронные сети.

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

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

На первом шаге нам потребуется список всех авторов. Для этого, еще на этапе верстки, всем абзацам были определены стили: "Заголовок", "Авторы", "Научные руководители", "Аффилиации", "Основной текст" и т.д. - это базовый функционал, реализуемый средствами InDesign.

ai_fig1.png
Рисунок 1. Стили оформления текста, используемые в проекте

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

ai_fig3.png
Рисунок 2. Неотформатированный список всех авторов

Результаты полученного "оглавления" по авторам мы поместили в текстовый файл authors.txt, это будет наш исходный файл данных. Mожно заметить - это довольно разнородный список, в котором в строках кроме фамилий и инициалов самих авторов также присутствует ненужная нам теперь информация. Чистить все это вручную трудоемкая задача, и для облегчения и автоматизации этого процесса был использован ChatGPT, котрый по одному (на самом деле нет) запросу написал небольшую программу на Python, которая обрабатывает этот список по заданному шаблону. По сути, программа должна распознавать в наборе текста отдельных авторов. В принципе, работоспособная программа была сгенерирована ChatGPT с первого раза. Однако несмотря на то, что ChatGPT является, по сути, языковой моделью, способной "понимать" задачу, сформулированную обычным разговорным языком, самым сложным было именно составить запрос для создания такой программы, которая учитывала бы все вариации написания авторов.

В общем виде, в нашей задаче автор - это фамилия и инициалы. По правилам верстки инициалы от фамилии и друг от друга отделяются тонкой шпацией - это могло стать основой для составления шаблона поиска для программы. Однако при копировании "оглавления" в текстовый файл тонкая шпация превратилась в неразрывный пробел. Мы учли это при составлении запроса, и на всякий случай дополнили поиск обычными пробелами, чтобы не пропустить инициалы, если вдруг где-то есть огрехи верстки. Обидно было бы кого-то потерять из-за одной забытой шпации на 800 страницах текста 😅 Также были учтены некоторые вариации инициалов у авторов (только имя или, напротив, тройные инициалы) и варианты двойных фамилий.

Здесь стоит упомянуть, что на самом деле было 5 разных запросов с уточнениями к чату, когда мы получали неработающий или работающий, но не так как нужно код. При каждом запуске мы анализировали, почему произошла такая-то ошибка, и на основе собранных данных уточняли запрос. Можно сказать, мы так же учились составлять запрос, как нейросеть училась давать ответы. На это потребовалось примерно 2 часа. В итоге мы сформировали вот такой подробный запрос для ChatGPT:

ai_fig4.png
Рисунок 3. Текст запроса к ChatGPT

Мы получили такой код:

ai_fig5.png
Рисунок 4. Код программы на языке программирования Python

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

Далее, нам требуется где-то запустить сгенерированную программу. Для этого не обязательно устанавливать какие-либо дополнительные программы на свой рабочий компьютер, а можно воспользоваться любым виртуальным онлайн-компилятором и интерпретатором Python, мы использовали этот: https://replit.com

По мере тестирования программы были выявлены и некоторые ограничения, связанные с логикой поиска и идентификации авторов. Исходя из нашей поисковой строки в программе, в качестве "автора" признается связка из фамилии и от одного до трёх инициалов. В машинном виде это конструкция из набора символов в виде "(Слово)(пробел)(Буква)(точка)". Чтобы определялись и двойные фамилии, среди символов может находиться дефис. Таким образом, поиск имеет следующие ограничения: фамилия должна состоять минимум из двух символов и начинаться с Прописной буквы; у автора должен быть хотя бы один инициал, следующий за фамилией через пробел; инициалы (от 1 до 3) указываются в формате "И." и разделены обычными пробелами; двойные фамилии разделены обычным дефисом. В свою очередь, наша программа предъявляет некоторые требования к исходному файлу: различные варианты пробелов и черт (дефисов) должны быть заменены на обычные; в исходном файле не должно быть пустых строк и строк без цифр; за номер страницы принимается последнее из всех чисел в каждой строке (в исходный файл попали цифры-сноски, которые надо игнорировать); однофамильцы с одинаковыми инициалами определяются как один автор (например, Иванов Сергей Михайлович и Иванов Степан Максимович, сокращенные до "Иванов С. М."); в результатах отбрасываются имена, содержащие "оглы", "аль" и т.п.; определяются и "Тр-ой-ные" (и более), и ФаМиЛии. Имея в виду такие особенности в нашем варианте программы, мы можем правильно подготовить исходный файл и при необходимости исправить файл с результатами. Отрадно то, что при свободном доступе к ChatGPT можно менять саму программу по мере изменения решаемой задачи или особенностей входных данных.

В результате запуска программы был получен файл author_index.txt, содержащий авторский указатель, уже отсортированный по алфавиту (на скриншоте он справа, а слева - наш первоначальный список). Стоит также обратить внимание, что некоторые авторы имеют отношение к нескольким тезисам в сборнике, и результаты учитывают этот момент, верно указывая несколько номеров страниц для таких авторов. И при этом однофамильцы не перепутываются, поскольку учитываются различия в инициалах.

ai_fig6.png
Рисунок 5. Результат работы программы

Осталось только вставить полученный список в верстку с уже подготовленными стилями, и ...

ai_fig7.png
Рисунок 6. Готовая верстка

... происходит магия!

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