Spaces:
Sleeping
Sleeping
XML Parser
ВАЖНО!!! README.md сгенерировано автоматически, поэтому может содержать неточности.
Модуль для извлечения структурированной информации из XML-файлов документов.
Общий процесс парсинга
- Рекурсивный поиск всех XML-файлов в указанной директории
- Для каждого файла:
- Извлечение основной информации (статус, владелец, название)
- При необходимости извлечение содержимого (таблицы и текст)
- Фильтрация документов по статусу
- Формирование итоговой коллекции документов
Подробное описание компонентов
XMLParser
Основной класс, координирующий работу всех парсеров. Использует три специализированных парсера:
- XMLInfoParser - для основной информации
- XMLTableParser - для таблиц
- XMLTextParser - для текстового содержимого
XMLInfoParser
Извлекает основную информацию о документе:
- Находит специальные теги (STATUS_TAG, OWNER_TAG, NAME_TAG)
- Извлекает значения между тегами
<w:t>
и</w:t>
- Проверяет статус документа (только USEFUL_STATUSES)
- Формирует объект ParsedXML
XMLTableParser
Обрабатывает таблицы в документе:
- Находит все блоки таблиц (
<w:tbl>
) - Определяет тип таблицы (обычная/сокращения/регламентирующие документы)
- Извлекает строки (
<w:tr>
) и ячейки (<w:tc>
) - Обрабатывает специальные случаи (таблицы с шапкой)
- Формирует текстовое представление таблиц
XMLTextParser
Очищает текст от XML-разметки:
- Удаляет таблицы
- Удаляет бинарные данные
- Удаляет специальные конструкции (KCC, CC patterns)
- Очищает от XML-тегов
- Обрабатывает специальные символы
Структуры данных
- ParsedXML - информация об одном документе
- ParsedXMLs - коллекция документов
- ParsedTable - данные одной таблицы
- ParsedTables - коллекция таблиц
- ParsedRow - данные одной строки таблицы
Особенности реализации
- Кодировка по умолчанию: cp866
- Фильтрация по статусам: 'Актуальный', 'Требует актуализации', 'Упразднён'
- Специальная обработка таблиц сокращений и регламентирующих документов
- Возможность исключения определенных файлов при парсинге
- Опциональное извлечение содержимого (флаг include_content)
Использование
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']
)