# Экстрактор сокращений (Abbreviation Extractor) > ВАЖНО!!! README.md сгенерировано автоматически, поэтому может содержать неточности. Модуль для извлечения сокращений и их полных форм из текстовых документов. ## Принцип работы Экстрактор ищет в тексте конструкции вида: - "полная форма (далее - сокращение)" - "полная форма (далее – сокращение)" и подобные варианты. ### Основные этапы обработки: 1. **Разбиение на предложения** - Текст разбивается на предложения с учетом специальных случаев - Учитываются особые сокращения, после которых точка не является концом предложения 2. **Поиск сокращений** - В каждом предложении ищутся конструкции с маркером "далее" - Извлекается короткая форма (сокращение) после маркера - Определяется полная форма до маркера 3. **Обработка сокращений** - Поддерживается два типа сокращений: - Однословные (например, "*БЖВРК*") - Многословные (например, "Мы великая нация великих обезьян (далее - *нация обезьян*)") - Для каждого сокращения определяется его полная форма 4. **Лемматизация** - Используется библиотека Natasha для лемматизации текста - Помогает находить соответствия между полной и короткой формами ## Использование ```python from components.parser.abbreviations.abbreviation_extractor import AbbreviationExtractor from components.parser.xml.structures import ParsedXMLs # Создание экстрактора extractor = AbbreviationExtractor() # Обработка XML-файлов result = extractor.process_parsed_xmls(parsed_xmls) # Обработка одного файла file_abbreviations = extractor.process_file(text, filename) # Извлечение сокращений из текста abbreviations = extractor.extract_abbreviations_from_text(text) ``` ## Структура результатов Результаты представляются в виде структур данных: - `AllFilesAbbreviations` - коллекция сокращений из всех файлов - `OneFileAbbreviations` - сокращения из одного файла - `Abbreviation` - отдельное сокращение с полной и короткой формами ## Особенности - Учитываются различные варианты разделителей между полной и короткой формами - Поддерживается обработка специальных сокращений, не являющихся концом предложения - Используется лемматизация для улучшения поиска соответствий - Возможна обработка как одиночных файлов, так и наборов файлов # Обработка сокращений и аббревиатур Модуль `abbreviation.py` отвечает за обработку и нормализацию сокращений и аббревиатур в тексте. ## Основные типы сокращений - `ABBREVIATION` - аббревиатуры (например, "ОКС НН") - `SHORTENING` - сокращения (например, "Компания") - `UNKNOWN` - неопределенный тип ## Процесс обработки Класс `Abbreviation` выполняет следующие этапы обработки: 1. **Определение типа сокращения** (`_define_abbreviation_type`): - Проверяет, является ли строка аббревиатурой (содержит более одной заглавной буквы в каждом слове) - Проверяет, является ли строка сокращением (одно слово, начинающееся с заглавной буквы) 2. **Очистка префиксов** (`_remove_prefix`): - Удаляет такие префиксы как "далее", различные виды тире - Убирает лишние пробелы 3. **Очистка от мусора** (`_remove_trash`): - Удаляет такие подстроки как "ПАО", "ОАО", "№", "(" - Обрезает строку с начала до первого вхождения "мусорной" подстроки 4. **Специальная обработка для аббревиатур** (`_process_abbreviation`): - Извлекает заглавные буквы из короткой формы - Проверяет соответствие заглавных букв началам слов в полной форме - Обрезает полную форму до релевантной части 5. **Специальная обработка для сокращений** (`_process_shortening`): - Применяет стемминг (с помощью алгоритма Портера) к короткой форме - Обрезает полную форму до релевантной части ## Валидация - Проверяет длину полной формы (должна быть меньше MAX_LENGTH) - Проверяет, что полная форма длиннее короткой - Проверяет отсутствие полной формы в черном списке (BLACKLIST) - Для аббревиатур проверяет соответствие заглавных букв началам слов - Для сокращений проверяет корректность регистра букв и отсутствие специальных случаев Если какая-либо проверка не проходит, тип сокращения устанавливается как `UNKNOWN`. # Применение сокращений и аббревиатур Класс `Abbreviation` имеет метод `apply`, который принимает текст и возвращает текст с примененными сокращениями и аббревиатурами. Класс