УДК 004.9
Коновалова Е.А.
Санкт-Петербургский государственный архитектурно-строительный университет (г. Санкт-Петербург, Россия)
РЕШЕНИЕ ЗАДАЧ КЛАССИФИКАЦИИ ПРОЕКТНЫХ ДОКУМЕНТОВ В СТРОИТЕЛЬСТВЕ С ПОМОЩЬЮ ИНТЕЛЛЕКТУАЛЬНОГО АНАЛИЗА
Аннотация: в статье рассматривается задача классификации текстовых документов в строительной отрасли. Рассмотрен алгоритм построения классификационной модели методом Байеса. Исследование проведено с использованием языка программирования Ру1коп, в качестве исходных данных был использована проектная документация различных зданий и сооружений. Выполнена предварительная обработка документов и классификация с отнесением их к одному из двух классов: пояснительные записки и другие документы проекта стадии П.
Ключевые слова: классификация текстов, предобработка текстов, машинное обучение, строительство, проектная документация.
Развитие информационных технологий способствовало решению многочисленных приложений задачи обработки текстовой информации, таких, как задача машинного перевода с одного естественного языка на другой, задача информационного поиска, задача извлечения знаний из текста и др. В настоящее время строительство является относительно новой сферой для применения алгоритмов машинного обучения.
В качестве исходных данных для автоматической классификации документов использован набор из 400 документов проектной документации различных зданий и сооружений. Все рассматриваемые документы принадлежат к проектной документации (состав и расшифровка определяется [1]). Документы
подвергнуты предварительной обработке, использованы инструменты, позволяющие классифицировать проектные документы по содержащейся в них информации, процесс поэтапно показан на рис. 1.
Рис. 1. Блок-схема алгоритма создания классификатора.
Все вычисления выполняются на языке Python с использованием интегрированной среды PyCharm, c помощью которой можно писать, запускать и отлаживать код, устанавливать новые расширения и дополнительные модули, такие как: библиотеки машинного обучения и анализа данных, а также графические процессоры для визуализации полученных результатов [2].
Предварительная обработка текста.
Первым шагом для выполнения анализа текста в рамках программного проекта является перевод текста из формата PDF в Python. Существует несколько подходов и инструментов, которые позволяют осуществить данную операцию. Выбрано использование библиотеки PyPDF2, позволяющую работать напрямую с PDF-файлами. С помощью этой библиотеки можно осуществить чтение текста из PDF и сохранить его в переменную Python.
with open(pdf„document, "rb") as filehandle:
Рис. 2. Код для перевода текста из PDF с использованием библиотеки PyPDF2.
Проектная документация имеет множество символов, которые не нужны при анализе текста, поэтому необходимо оставить только следующие символы: а-я, А-Я, все символы текстов документов переведены в нижний регистр с помощью команды textlower(),
Рис. 3. Код для удаления слов и приведения текста в нижний регистр.
С помощью функции combine_words объединяем слова, которые перенесены на следующую строчку с помощью дефиса или разъединились при переводе из файлов с pdf расширением.
def combine_words(words): combined_wcrds = [] current_word = 11 for word in words:
if word[-1] == '-':
current_word += word[:-l] elif current_word:
current_word += word combined_words.append(current_word) current_word = '1 else:
combined_words.append(word) if current_word:
ccmbined_words.append(current_word) return combined_words
Рис. 4. Код для объединения слов.
В тексте содержатся шумовые слова (слова, которые чрезвычайно распространены в определенном языке, но не обладающие семантической нагрузкой), их необходимо убирать из текста. Этот процесс помогает уменьшить размер набора данных и, в свою очередь, ускорить работу систем обработки естественного языка. Из библиотеки «nltk» подгружены стоп-слова русского языка, такие как «там», «зачем», «она» и другие, и добавим личный словарь, проанализировав документы на наличие стоп-слов. В тексте содержится много слов с количеством букв менее 3, которые не несут смысловой нагрузки, удаляем их из текста.
Лемматизация - это процесс приведения слова к его нормальной (словарной) форме. В программировании лемматизация является важным инструментом для обработки текстовых данных на естественном языке. В Python существует несколько библиотек, которые позволяют осуществлять лемматизацию, выбрана библиотека «pymorphy2» класс MorphAnalyzer, используемый для морфологического анализа русских слов. Основная цель лемматизации заключается в унификации слова, чтобы различные формы одного слова считались одним и тем же термином, что позволяет упростить анализ текстов и снизить размерность данных [3].
Следующим шагом является токенизация, которая является методом разделения текста на фрагменты (предложения или слова). Применяется словарь WordNet, разработанный для обеспечения программного доступа системами обработки естественного языка и позволяет решать следующие задачи: нахождение определений слов, нахождение синонимов и антонимов, исследование отношений между словами схожести слов, анализ многозначности слов.
import nltk
from nltk.tokenize import wordjtokenize, sentjtokenize
from nltk.corpus import stopwords
import pymorphy2
nltk.download('punkt')
nltk.download(1stopword s']
morph = pymorphy2.MorpiiAnalyzer()
my_stop_words - ["ooo", "аиц", "проект", "заказчик", "ooo", "ости", "специализированный", "застройщик", "шифр", "аиц"] stop.words = set(stopwords.words("russian"))
sentences = [' 1 ,]oin([word for word in word_tokenize(sentence)]) for sentence in sent_tokenize(text)] newjvords - [word for word in word_tokenize(' 1.join(sentences)) if len(word) <■ 3] my_stop_words.extend(new.words)
alA_stop_words = stop_words,onion(set[ray_stop_words))
texts = [[morpii.parse[ivord)[0],normal_foriri for word in word_tokenize(sentence.lower()) if word.isalnumO and word not in aYl_stop.words] for sentence in sentences]
Рис. 5. Код для удаления шумовых слов, лемматизации и токенизации.
Описание процесса классификации документов.
Наивный байесовский классификатор (NB) является одним из самых популярных методов машинного обучения. В его основе лежит предположение о статистической независимости признаков, что ограничивает его применимость, однако NB зарекомендовал себя во многих прикладных областях, особенно, в классификации текстов. Для обучения модели необходимо вычислить средние значения каждого признака в каждом классе, отсюда следует, что вычислительная сложность алгоритма оптимизации параметров линейна по объему обучающей выборки и по числу признаков. Для качественной классификации необходимо грамотно создать обучающую выборку.
В процессе решения задачи классификации проектных документов использован наивный байесовский классификатор. Для решения задачи используется классификатор «NaiveBayesClassifier» из библиотеки «nltk».
Классификатор работает с перекодированными данными (обучающая выборка (train) составляет 75%, тестовая (test) - 25%), распределяет по двум категориям: пояснительные записки и основные документы (результат показан на рис. 6.)
Рис. 6. Результат классификации проектной документации.
Точность работы алгоритма варьируется от 69% до 75% (для определения используется функция accuracy из библиотеки nltk). Такой показатель можно считать средним и предсказуемым, так в разных разделах проектной документации часто встречаются одинаковые признаки. Основываясь на полученных результатах, можно сделать вывод, что данный классификатор следует использовать в практической деятельности, так как высокий уровень эффективности обуславливается относительной простотой применения алгоритма и приемлемыми показателями точности.
СПИСОК ЛИТЕРАТУРЫ:
1. Постановление Правительства Российской Федерации от 16.02.2008 №87. О составе разделов проектной документации и требованиях к их содержанию;
2. Ткаченко, А. Л. Решение задачи классификации документов вуза на основе методов интеллектуального анализа / А. Л. Ткаченко // Вестник кибернетики. -2021. - № 1(41). - С. 12-19;
3. Морфологический анализатор pymorphy [Электронный ресурс]. URL: https://pymorphy2.readthedocs.io/en/0.2/index.html (дата обращения: 18.05.24).
Konovalova E.A.
Saint Petersburg State University of Architecture and Civil Engineering
(Saint Petersburg, Russia)
CLASSIFICATION OF PROJECT DOCUMENTS IN CONSTRUCTION
USING INTELLIGENT ANALYSIS
Abstract: article addresses the task of text document classification in the construction industry. An algorithm for building a classification model using the Bayesian method is considered. The research was conducted using the Python programming language, with project documentation from various buildings and structures used as source data. Pre-processing of documents was carried out, classifying them into one of two classes: explanatory notes and other documents from the design stage P.
Keywords: text classification, text preprocessing, machine learning, construction, project documentation.