File size: 4,491 Bytes
86c402d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# Универсальный парсер документов

Библиотека `ntr_fileparser` предоставляет универсальный интерфейс для извлечения структурированных данных из документов различных форматов.

## Возможности

- Извлечение текстовых блоков, таблиц, изображений и формул из документов
- Поддержка различных форматов файлов:
  - XML (реализовано)
  - DOCX (реализовано)
  - PDF (в разработке)
  - HTML (в разработке)
  - Markdown (в разработке)
  - Email (в разработке)
  - DOC (в разработке)
- Единый интерфейс для работы со всеми форматами
- Расширяемая архитектура для добавления новых парсеров

## Установка

```bash
pip install git+ssh://[email protected]: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 [email protected]:textai/parsers/parser.git
cd parser
pip install -e .
```