# Универсальный парсер документов Библиотека `ntr_fileparser` предоставляет универсальный интерфейс для извлечения структурированных данных из документов различных форматов. ## Возможности - Извлечение текстовых блоков, таблиц, изображений и формул из документов - Поддержка различных форматов файлов: - XML (реализовано) - DOCX (реализовано) - PDF (в разработке) - HTML (в разработке) - Markdown (в разработке) - Email (в разработке) - DOC (в разработке) - Единый интерфейс для работы со всеми форматами - Расширяемая архитектура для добавления новых парсеров ## Установка ```bash pip install git+ssh://git@gitlab.ntrlab.ru:textai/parsers/parser.git ``` ## Использование ### Базовый пример ```python from ntr_fileparser import UniversalParser # Создание экземпляра парсера parser = UniversalParser() # Парсинг документа по пути к файлу document = parser.parse_by_path("path/to/document.xml") # Доступ к данным print(f"Название документа: {document.name}") print(f"Количество параграфов: {len(document.paragraphs)}") print(f"Количество таблиц: {len(document.tables)}") ``` ### Работа с содержимым файла ```python from ntr_fileparser import UniversalParser, FileType # Создание экземпляра парсера parser = UniversalParser() # Открытие файла with open("path/to/document.xml", "rb") as f: # Парсинг содержимого файла с указанием типа файла # Тип файла можно указать как объект FileType или как строку расширения document = parser.parse(f, FileType.XML) # Или document = parser.parse(f, ".xml") if document: # Работа с документом for paragraph in document.paragraphs: print(paragraph.text) ``` ### Применение функций к документу ```python from ntr_fileparser import UniversalParser # Создание экземпляра парсера parser = UniversalParser() # Парсинг документа document = parser.parse_by_path("path/to/document.xml") # Применение функции ко всем текстовым элементам документа document.apply(lambda text: text.upper()) ``` ## Архитектура Система построена на основе следующих компонентов: 1. **UniversalParser** - основной класс, предоставляющий единый интерфейс для работы со всеми форматами документов. 2. **AbstractParser** - абстрактный класс парсера, определяющий интерфейс для всех конкретных парсеров. 3. **ParserFactory** - фабрика парсеров, отвечающая за выбор подходящего парсера для конкретного документа. 4. **FileType** - перечисление поддерживаемых типов файлов. 5. **Специализированные парсеры** - классы для работы с конкретными форматами документов (XMLParser, PDFParser и т.д.). 6. **Структуры данных** - классы для представления структуры документа (ParsedDocument, ParsedTextBlock, ParsedTable и т.д.). ### Диаграмма архитектуры ![Диаграмма архитектуры ntr_fileparser](docs/NTR_FileParser.svg) ## Требования - Python 3.11+ - Зависимости автоматически устанавливаются при установке библиотеки ## Разработка Для разработки и тестирования: ```bash git clone git@gitlab.ntrlab.ru:textai/parsers/parser.git cd parser pip install -e . ```