muryshev's picture
init
57cf043
|
raw
history blame
3.95 kB

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)

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

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']
)