Spaces:
Sleeping
Экстрактор сокращений (Abbreviation Extractor)
ВАЖНО!!! README.md сгенерировано автоматически, поэтому может содержать неточности.
Модуль для извлечения сокращений и их полных форм из текстовых документов.
Принцип работы
Экстрактор ищет в тексте конструкции вида:
- "полная форма (далее - сокращение)"
- "полная форма (далее – сокращение)" и подобные варианты.
Основные этапы обработки:
Разбиение на предложения
- Текст разбивается на предложения с учетом специальных случаев
- Учитываются особые сокращения, после которых точка не является концом предложения
Поиск сокращений
- В каждом предложении ищутся конструкции с маркером "далее"
- Извлекается короткая форма (сокращение) после маркера
- Определяется полная форма до маркера
Обработка сокращений
- Поддерживается два типа сокращений:
- Однословные (например, "БЖВРК")
- Многословные (например, "Мы великая нация великих обезьян (далее - нация обезьян)")
- Для каждого сокращения определяется его полная форма
- Поддерживается два типа сокращений:
Лемматизация
- Используется библиотека Natasha для лемматизации текста
- Помогает находить соответствия между полной и короткой формами
Использование
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
выполняет следующие этапы обработки:
Определение типа сокращения (
_define_abbreviation_type
):- Проверяет, является ли строка аббревиатурой (содержит более одной заглавной буквы в каждом слове)
- Проверяет, является ли строка сокращением (одно слово, начинающееся с заглавной буквы)
Очистка префиксов (
_remove_prefix
):- Удаляет такие префиксы как "далее", различные виды тире
- Убирает лишние пробелы
Очистка от мусора (
_remove_trash
):- Удаляет такие подстроки как "ПАО", "ОАО", "№", "("
- Обрезает строку с начала до первого вхождения "мусорной" подстроки
Специальная обработка для аббревиатур (
_process_abbreviation
):- Извлекает заглавные буквы из короткой формы
- Проверяет соответствие заглавных букв началам слов в полной форме
- Обрезает полную форму до релевантной части
Специальная обработка для сокращений (
_process_shortening
):- Применяет стемминг (с помощью алгоритма Портера) к короткой форме
- Обрезает полную форму до релевантной части
Валидация
- Проверяет длину полной формы (должна быть меньше MAX_LENGTH)
- Проверяет, что полная форма длиннее короткой
- Проверяет отсутствие полной формы в черном списке (BLACKLIST)
- Для аббревиатур проверяет соответствие заглавных букв началам слов
- Для сокращений проверяет корректность регистра букв и отсутствие специальных случаев
Если какая-либо проверка не проходит, тип сокращения устанавливается как UNKNOWN
.
Применение сокращений и аббревиатур
Класс Abbreviation
имеет метод apply
, который принимает текст и возвращает текст с примененными сокращениями и аббревиатурами.
Класс