File size: 3,954 Bytes
57cf043
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
# XML Parser

> ВАЖНО!!! README.md сгенерировано автоматически, поэтому может содержать неточности.

Модуль для извлечения структурированной информации из XML-файлов документов.

## Общий процесс парсинга

1. Рекурсивный поиск всех XML-файлов в указанной директории
2. Для каждого файла:
   - Извлечение основной информации (статус, владелец, название)
   - При необходимости извлечение содержимого (таблицы и текст)
3. Фильтрация документов по статусу
4. Формирование итоговой коллекции документов

## Подробное описание компонентов

### XMLParser

Основной класс, координирующий работу всех парсеров. Использует три специализированных парсера:
- XMLInfoParser - для основной информации
- XMLTableParser - для таблиц
- XMLTextParser - для текстового содержимого

### XMLInfoParser

Извлекает основную информацию о документе:
1. Находит специальные теги (STATUS_TAG, OWNER_TAG, NAME_TAG)
2. Извлекает значения между тегами `<w:t>` и `</w:t>`
3. Проверяет статус документа (только USEFUL_STATUSES)
4. Формирует объект ParsedXML

### XMLTableParser

Обрабатывает таблицы в документе:
1. Находит все блоки таблиц (`<w:tbl>`)
2. Определяет тип таблицы (обычная/сокращения/регламентирующие документы)
3. Извлекает строки (`<w:tr>`) и ячейки (`<w:tc>`)
4. Обрабатывает специальные случаи (таблицы с шапкой)
5. Формирует текстовое представление таблиц

### XMLTextParser

Очищает текст от XML-разметки:
1. Удаляет таблицы
2. Удаляет бинарные данные
3. Удаляет специальные конструкции (KCC, CC patterns)
4. Очищает от XML-тегов
5. Обрабатывает специальные символы

## Структуры данных

- ParsedXML - информация об одном документе
- ParsedXMLs - коллекция документов
- ParsedTable - данные одной таблицы
- ParsedTables - коллекция таблиц
- ParsedRow - данные одной строки таблицы

## Особенности реализации

1. Кодировка по умолчанию: cp866
2. Фильтрация по статусам: 'Актуальный', 'Требует актуализации', 'Упразднён'
3. Специальная обработка таблиц сокращений и регламентирующих документов
4. Возможность исключения определенных файлов при парсинге
5. Опциональное извлечение содержимого (флаг include_content)

## Использование

```python
from components.parser.xml.xml_parser import XMLParser

# Создание парсера
parser = XMLParser()

# Парсинг одного файла
result = parser.parse("path/to/file.xml", include_content=True)

# Парсинг всех файлов в директории
results = parser.parse_all(
    "path/to/dir",
    encoding='cp866',
    include_content=True,
    ignore_files_contains=['temp', 'draft']
)
```