ИНФОРМАЦИОННЫЕ ТЕХНОЛОГИИ
Научная статья УДК 004.912
Разработка алгоритмов и средств извлечения структуры и ключевых слов из текстовых документов
Даниил Андреевич Абанин1 Павел Сергеевич Курмыза Вячеслав Владимирович Шеркунов
1,2,3Ульяновский государственный технический университет, Ульяновск, Россия 1dabanin499@gmail. com 2 tmrrwnxtsn@gmail.com 3v.sherkunov@gmail. com
Аннотация. Описывается разработка системы автоматизации извлечения структуры и ключевых слов из текстовых документов. Статья включает описание системы, её функциональность, архитектуру, а также технологии и инструменты, использованные при разработке.
Ключевые слова: автоматизация, обработка естественного языка, TF-IDF, структура, ключевые слова, текстовые документы, веб-приложение.
INFORMATION TECHNOLOGY Scientific article
Development of algorithms and tools for extracting structure and keywords from text documents Daniil A. Abanin1 Pavel S. Kurmyza2 Vyacheslav V. Sherkunov3
1 2 3Ulyanovsk State Technical University, Ulyanovsk, Russia
Abstract. The development of a module for automating the extraction of structure and keywords from text documents is described. The article includes a description of the system, its functionality, architecture, as well as technologies and tools used in the development.
Keywords: automation, natural language processing, TF-IDF, structure, keywords, text documents, web application.
Введение
Актуальность данной разработки подтверждается тем, что за последние тридцать лет накопилось большое количество корпоративных документов, которые содержат огромный объём полезной информации и многолетний опыт работы организаций различных сфер деятельности. Но большая часть такой информации не используется из-за того, что текстовые документы написаны на естественном языке и представляют собой слабоструктурированные данные. Следовательно, анализ и оптимизация деятельности не проводятся,
© Абанин Д. А., Курмыза П. С., Шеркунов В. В., 2022
и владение информацией не имеет коммерческого смысла.
Чтобы использовать информацию, представленную в корпоративных документах, необходимо разработать систему, которая позволила бы перевести её из слабоструктурированной формы в структурированную. Также пользователи нуждаются в сохранении результатов обработки текстовых документов для их дальнейшего анализа, например, выделения ключевых слов. Система должна быть универсальной, то есть иметь возможность структурировать любые слабоструктурированные документы без привязки к конкретной предметной области.
Целью создания системы является упрощение анализа информации, представленной в слабо-
структурированных корпоративных документах, а также централизация всех результатов структуризации в одной базе данных для их дальнейшего использования.
1 Описание системы
Система представляет собой веб-приложение для извлечения структуры и ключевых слов из текстовых документов, позволяющее упростить анализ корпоративной документации. Для организации обработки текстовой информации, представленной в документации, она разделяется на смысловые блоки, разделы, на основе структуры, задаваемой пользователем (далее - шаблон). Также из содержания разделов документов извлекаются ключевые слова для лучшего понимания смысла документации, которой они соответствуют.
Упрощение анализа достигается за счёт деления содержания текстовых документов на разделы, централизованного хранения результатов структурирования и шаблонов для выделения разделов, а также извлечения ключевых слов из содержания разделов. Помимо этого, система предоставляет пользователю возможность использовать как новое хранилище данных, так и существующее или внешнее.
Данная система позволяет повысить эффективность работы с корпоративной документацией за счёт сокращения времени на анализ и поиск информации, представленной в ней [1].
1.1 Функции системы
Система имеет следующие функции:
• загрузка и удаление шаблонов, на основе которых содержание текстовых документов разбивается на разделы;
• выделение разделов из содержания документов в формате .doc на основе выбранных шаблонов с возможностью редактирования результатов перед сохранением в системе;
• наполнение выбранного шаблона информацией и сохранение результата в системе как результирующей структуры разделов;
• редактирование содержания выбранной структуры разделов;
• удаление выбранной структуры разделов из системы;
• преобразование выбранной структуры разделов в документ в формате .docx с возможностью скачать его;
• выделение ключевых слов (словосочетаний) из содержания выбранной структуры разделов с выбором режима выделения и (или) конкретного раздела;
• привязка ключевых слов к соответствующей им структуре разделов.
1.2 Архитектура системы
Система обладает архитектурой, состоящей из нескольких взаимосвязанных компонентов, которая представлена диаграммой развертывания (рис. 1).
Рис. 1. Диаграмма развёртывания
Взаимодействие веб-клиента и веб-сервера осуществляется посредством REST-запросов. Также веб-сервер взаимодействует с Python-библиотекой srsparser для структурирования текстовых документов и выделения ключевых слов и с документоориентированной СУБД MongoDB для хранения данных. Все компоненты, за исключением библиотеки srsparser, контейнеризуются с помощью программного обеспечения Docker для удобного развертывания и управления по принципу микросервисной архитектуры [6].
2 Описание реализации
Система способна работать с любыми слабоструктурированными документами в формате .doc. В качестве эксперимента для демонстрации работы системы были выбраны технические задания на создание автоматизированных систем (далее - ТЗ на АС) как объекты анализа, потому что их структура закреплена в ГОСТ [3], и, в основном, в крупных государственных, военных и других предприятиях используют именно эту структуру.
2.1 Алгоритмическая часть
Задача, которую решает разработанный инструмент, относится к классу задач автоматического извлечения структурированных данных из слабоструктурированных машиночитаемых документов. Извлечение информации является разновидностью информационного поиска, связанного с обработкой текста на естественном языке [1].
Как было упомянуто ранее, алгоритмическая часть системы была вынесена в библиотеку srsparser, написанную на языке программирования Python, которая содержит основные классы:
• Классы Section и SectionsTree отвечают за реализацию вложенной иерархичной структуры данных, представляющей структуру разделов. Данные классы используют библиотеку для работы с древовидными данными - anytree;
• В классе Parser реализованы алгоритмы работы с содержанием документов в формате .doc с использованием библиотеки python-docx; алгоритмы структурируют прочитанное содержание путём занесения его в древовидную структуру данных, полученную с использованием Section и SectionsTree;
• Класс LanguageProcessor содержит методы для обработки текста: определение похожести строк, предобработка текста, построение модели TF-IDF, извлечение ключевых слов (словосочетаний) и генерация коэффициентов важности слов в тексте. В данном классе используются библиотеки работы с текстом: gensim, pullenti, pymorphy2, nltk [2].
Рассмотрим алгоритм структуризации текстовых документов. Как правило, корпоративная документация состоит из заголовков разных уровней и абзацев, благодаря которым можно структурировать представленную в ней информацию. Будем считать, что раздел - это пара вида «заголовок раздела, содержимое раздела», где содержимое раздела может быть двух типов: 1) текст, заполняющий раздел (далее -листовой раздел); 2) список вложенных разделов, каждый из которых в конечном счёте содержит либо листовой раздел, либо является им (далее -раздел-родитель).
На основе разделов, которые интересуют пользователя, составляется шаблон структуры разделов в формате JSON: каждый листовой раздел содержит поля «name» и «text» (пустое), а раздел-родитель «name» и «children» (рис. 2). ТЗ на АС составляются преимущественно по структуре, описанной в ГОСТ [3], поэтому, просмотрев, какие разделы в ней представлены, выделяются необходимые разделы и составляется шаблон структуры.
Основная идея структуризации состоит в том, чтобы в соответствии с составленным шаблоном найти в данном текстовом документе разделы, максимально похожие на листовые разделы шаблона, и заполнить пустые поля «text» листовых разделов шаблона той информацией, которая представлена в найденных разделах.
Рис. 2. Пример структуры разделов в формате JSON с описанием
Сначала составленный шаблон считывается и преобразуется в дерево разделов с помощью класса SectionsTree. Далее с использованием класса Parser считывается содержание текстового документа, и осуществляется перебор его абзацев с целью найти среди них максимально похожие на заголовки листовых элементов дерева разделов. На каждой итерации для текущего абзаца среди заголовков всех листовых элементов дерева разделов ищется элемент, с которым у содержимого текущего абзаца коэффициент похожести является максимальным и больше минимального допустимого значения, превысив которое можно утверждать о похожести строк. Если такой элемент находится, то в поле «text» листового элемента дерева заносится содержимое абзацев, следующих после абзаца, представляющего заголовок раздела, до следующего абзаца-заголовка. В итоге заполненное дерево разделов может быть отредактировано и сохранено в системе (рис. 3, 4).
Коэффициент похожести двух строк вычисляется с помощью методов класса LanguageProcessor: сначала происходит предобработка строк. После предобработки каждой строке соответствует множество токенов в нижнем регистре, приведённых к нормальным формам. Из токенов составляется словарь, который является результатом объединения двух множеств токенов, соответствующих строкам, и далее с помощью подхода «мешок слов» происходит векторизация множеств токенов. В результате получаем два вектора, представляющих изначальные строки. Тогда коэффициент похожести строк можно определить, найдя косинусное сходство между полученными векторами:
АВ _ g=14jXBj
similarity = cos(y4, В) =
W|B|
SUVxJlIUß;2 (1)
где similarity - коэффициент похожести двух векторов; А, В - бинарные векторы размерности словаря, соответствующие первой и второй строкам.
После того как содержимое из текстового документа извлечено, можно перейти к анализу его смысловой составляющей. Для достижения этой цели применяется статистическая мера TF-IDF, используемая для оценки важности слов в контексте документа, являющегося частью коллекции документов. Данный подход заключается в том, что большой вес в TF-IDF получают слова с высокой частотой в пределах конкретного документа и с низкой частотой употреблений в других документах. TF-IDF вычисляется путём умножения локального компонента, такого как частота термина (TF), на глобальный компонент, то есть обратную частоту документа (IDF), с проведением нормализации результата [1].
В данной системе работа с TF-IDF осуществляется с помощью преобразования исходного текста в корпус типа «мешок слов», который передаётся классу TfidfModel из библиотеки gensim. Существуют различные варианты формул для подсчёта весов слов по TF-IDF. В данной системе используется формула, взятая из нотации SMART:
weighty = frequencytJ * ),
1 (2)
где weightij - ненормализованный вес слова i в документе j, взятом из корпуса, состоящего из D документов; frequencyij - частота вхождений слова i в документ j; а document_freqi - количество документов, которые содержат слово i. Полученные веса подвергаются косинусной нормализации. В результате построения модели TF-IDF и анализа содержания получаем список слов и соответствующих им весов TF-IDF [2].
В качестве альтернативного подхода для определения ключевых слов используется анализатор ключевых комбинаций из библиотеки pullenti, работающей на правилах, - класс KeywordAnalyzer. Результатом обработки содержания становится список ключевых комбинаций.
Третьим подходом извлечения ключевых слов является совместное использование двух вышеописанных методов. С помощью класса KeywordAnalyzer из исходного текста извлекаются ключевые комбинации. Далее исходный текст с использованием подхода TF-IDF преобразуется в список слов и соответствующих им весов TF-IDF. Осуществляется проход по ключевым комбинациям: на каждой итерации комбинация разбивается на слова, и для каждого слова
ищется точно такое же в списке, полученном с использованием подхода TF-IDF. Если совпадение обнаруживается, то к весу TF-IDF ключевой комбинации (изначально равен 0) прибавляется вес TF-IDF найденного слова. В результате получаем список комбинаций и соответствующих им весов TF-IDF, благодаря чему появляется возможность определить выраженность не только ключевых слов, но и ключевых комбинаций (рис. 5).
2.2 Клиент-серверная часть
Система состоит из нескольких компонентов, которые собираются и запускаются с помощью Docker - данное программное обеспечение необходимо для автоматизации развертывания и управления приложениями в средах с поддержкой контейнеризации, а также предоставляет возможность работы разработанной системы под управлением любой операционной системы, работающей с технологией Docker [6]. Удобство такого подхода заключается в том, что пользователь, запуская одну команду в терминале, получает полноценный доступ к сервису на своём компьютере. Docker даёт возможность развернуть клиентскую, серверную части вместе с NoSQL базой данных MongoDB.
Для хранения данных была выбрана именно данная СУБД, поскольку структура текстовых документов не может быть определена заранее, соответственно, база данных, в которой хранятся такие документы, должна допускать неопределённости в схеме описания. База данных содержит две коллекции: первая - для хранения структур разделов, вторая - шаблонов, на основе которых эти структуры появляются. Объекты внутри коллекции хранятся в виде JSON-подобных документов.
Для реализации клиентской части выбран высокоуровневый язык программирования TypeScript. Он расширяет стандартные возможности JavaScript и, в отличие от него, обладает возможностью явного статического назначения типов. В качестве основной библиотеки для разработки используется ReactJS [5]. Для управления состояниями компонентов используется Redux. Данная библиотека даёт возможность «вынести» информацию о данных для удобного взаимодействия с ними. Отправка HTTP-запросов происходит с помощью HTTP-клиента Axios. Для работы со стилями используется препроцессор SASS, предназначенный для упрощения файлов каскадных таблиц стилей.
Рассмотрим интерфейс системы. На главной странице слева находится панель страниц,
представляющих основные функции сервиса. Страница «Редактирование документа» позволяет работать со структурами разделов: изменять содержимое существующих структур, удалять и преобразовывать их в документы в формате .doc и скачивать (рис. 3).
му содержимому структуры. Имеется возможность выбора ключевых слов из списка и закрепления их за структурой, к которой они относятся. Это даёт возможность выделить основную мысль из структуры.
Рис. 3. Страница «Редактирование документа»
На странице «Создание документа» на основе выбранного шаблона происходит его наполнение информацией и сохранение результатов в системе. Страница «Распознавание документа» предоставляет возможность структуризации текстовых документов (рис. 4). Пользователю необходимо выбрать текстовый документ в формате .doc и шаблон, на основе которого будет происходить структуризация содержимого с помощью алгоритмов Python-библиотеки srsparser. Перед сохранением результата в базе данных имеется возможность редактирования содержимого каждого из абзацев, названия структуры.
Рис. 4. Страница «Редактирование документа»
Страница «Ключевые слова» позволяет выделять ключевые слова из сохранённых в системе структур разделов для большего понимания смысла их содержания (рис. 5). Для корректной работы необходимо выбрать структуру разделов, режим выделения: «TF-ГОF», «РиПепй» или «TF-IDF + РиПепй». В качестве дополнительного параметра можно указать раздел, по которому нужно сформировать список ключевых слов. Если раздел не выбран, анализ происходит по все-
Рис. 5. Страница «Ключевые слова»
На странице «Настройки сервиса» пользователь может загрузить шаблон структуры разделов в формате JSON в систему или удалить выбранный шаблон из системы. При загрузке пользовательского шаблона его структура проверяется на правильность.
Также был разработан REST API на языке Python: реализованы методы для работы со структурами разделов и их шаблонами, структурирования загруженных документов в формате .doc, извлечения ключевых слов, получения абзацев документа. В качестве основной библиотеки используется FastAPI - фреймворк для разработки RESTful-сервисов [4]. Взаимодействие с базой данных на сервере происходит с помощью Py-thon-библиотеки pymongo.
Заключение
По результатам работы была создана система автоматизации извлечения структуры и ключевых слов из слабоструктурированных текстовых документов. Она была протестирована на наборе из двадцати текстовых документов с ТЗ на АС и показала точность распознавания структуры 86%. Данная система может быть использована для автоматизации структурирования информации. Она обладает большим потенциалом, так как способна работать не только с ТЗ на АС, выбранными для демонстрации работы системы, но и любыми слабоструктурированными текстовыми документами.
СПИСОК ИСТОЧНИКОВ
1. Маннинг К.Д., Рагхаван П., Шютце Х. Введение в информационный поиск. М., 2014. 528 с.
2. Бенгфорт Б., Билбро Р., Охеда Т. Прикладной анализ текстовых данных на Python. Машинное обучение и создание приложений обработки естественного языка. Питер, 2020. 368 с.
3. ГОСТ 34.602-89. Информационная технология. Техническое задание на создание автоматизированной системы. М.: Изд-во стандартов, 1989.
4. Документация фреймворка FastAPI [Электронный ресурс]. FastAPI: [сайт]. URL: https://fastapi.tiangolo.com/ (дата обращения: 03.05.2022).
5. Документация библиотеки ReactJS [Электронный ресурс]. JavaScript-библиотека для создания пользовательских интерфейсов: [сайт]. URL: https://ru.react.js.org/ (дата обращения: 02.05.2022).
6. Документация ПО Docker [Электронный ресурс]. Docker Documentation: [сайт]. URL: https://docs.docker.com/ (дата обращения: 02.05.2022).
REFERENCES
1. Manning K. D., Raghavan P., Schutze H. Vvedenie v informacionnyj poisk [Introduction to information search]. Moscow, 2014. 528 p.
2. Bengfort B., Bilbro R., Ojeda T. Prikladnoj analiz tekstovyh dannyh na Python. Mashinnoe obuchenie i sozdanie prilozhenij obrabotki estestvennogo yazyka [Applied analysis of text data in Python. Machine learning and the creation of natural language processing applications]. St. Petersburg, 2020. 368 p.
3. GOST 34.602-89. Informacionnaya tekhnologiya. Tekhnicheskoe zadanie na sozdanie avtomatizirovannoj sistemy [Information technology. Technical specification for the creation of an automated system]. Moscow. [Izd-vo standartov Publishing House of Standards], 1989.
4. Dokumentaciya frejmvorka FastAPI [Documentation of the FastAPI framework] [Electronic resource]. FastAPI: [website]. URL: https://fastapi.tiangolo.com / (accessed: 03.05.2022).
5. Dokumentaciya biblioteki ReactJS [ReactJS Library documentation] [Electronic resource]. JavaScript library for creating user interfaces: [website]. URL: https://ru.react.js.org / (accessed: 02.05.2022).
6. Dokumentaciya PO Docker [Docker documentation] [Electronic resource]. Docker Documentation: [website]. URL: https://docs.docker.com / (accessed: 02.05.2022).
Статья поступила в редакцию 27.11.2022; одобрена после рецензирования 28.11.2022; принят к публикации 17.12.2022.
The article was submitted 27.11.2022; approved after reviewing 28.11.2022; accepted for publication 17.12.2022.