--- layout: default title: "Универсальный Декодер Документов" parent: "Russian (Beta)" --- # Универсальный Декодер Документов > **Beta Translation:** This document was translated via Machine Learning and as such may not be 100% accurate. All non-English languages are currently classified as Beta. ## Заголовок Универсальный декодер документов, работающий на базе `unstructured` — извлекает любые распространенные форматы документов через единый сервис, обеспечивая полную отслеживаемость и интеграцию с библиотекой, регистрируя позиции источника в качестве метаданных графа знаний для обеспечения полной отслеживаемости. ## Проблема В настоящее время TrustGraph имеет декодер, специфичный для PDF. Поддержка дополнительных форматов (DOCX, XLSX, PPTX и т.д.) требует значительных изменений. ## Решение Мы предлагаем универсальный декодер, который будет поддерживать широкий спектр форматов документов. Этот декодер будет использовать библиотеку `unstructured` для извлечения текста и метаданных из документов. ## Архитектура Универсальный декодер будет состоять из следующих компонентов: * **Входной компонент:** Принимает документ в качестве входных данных. * **Компонент извлечения:** Использует библиотеку `unstructured` для извлечения текста и метаданных из документа. * **Компонент формирования provenance:** Генерирует provenance-данные, которые содержат информацию о том, откуда взялся каждый фрагмент текста. * **Компонент выходных данных:** Выдает извлеченные данные и provenance-данные. ## Процесс 1. Декодер получает документ в качестве входных данных. 2. Декодер использует библиотеку `unstructured` для извлечения текста и метаданных из документа. 3. Декодер генерирует provenance-данные, которые содержат информацию о том, откуда взялся каждый фрагмент текста. 4. Декодер выдает извлеченные данные и provenance-данные. ## Форматы Документов | Формат | MIME-тип | Поддержка страниц | Примечания | |---|---|---|---| | PDF | application/pdf | Да | Группировка по страницам | | DOCX | application/vnd.openxmlformats... | Нет | Использование стратегии секций | | PPTX | application/vnd.openxmlformats... | Да | Группировка по слайдам | | XLSX/XLS | application/vnd.openxmlformats... | Да | Группировка по листам | | HTML | text/html | Нет | Использование стратегии секций | | Markdown | text/markdown | Нет | Использование стратегии секций | | Plain | text/plain | Нет | Использование стратегии секций | | CSV | text/csv | Нет | Использование стратегии секций | | RST | text/x-rst | Нет | Использование стратегии секций | | RTF | application/rtf | Нет | Использование стратегии секций | | ODT | application/vnd.oasis... | Нет | Использование стратегии секций | | TSV | text/tab-separated-values | Нет | Использование стратегии секций | ## Метаданные Provenance Каждая сущность страницы/секции регистрирует метаданные о позиции в виде triple в `GRAPH_SOURCE`, обеспечивая полную отслеживаемость от triple в графе знаний обратно к исходным позициям в документе. #### Существующие поля (уже в `derived_entity_triples`) * `page_number` — номер страницы/листа/слайда (1-indexed, только для страниц) * `char_offset` — смещение символов для этой страницы/секции в полном тексте * `char_length` — длина текста для этой страницы/секции в документе #### Новые поля (расширяем `derived_entity_triples`) * `mime_type` — исходный формат документа (например, `application/pdf`) * `element_types` — список категорий элементов `unstructured`, найденных на этой странице/секции (например, "Title,NarrativeText,Table") * `table_count` — количество таблиц на этой странице/секции * `image_count` — количество изображений на этой странице/секции Эти требуют новых префиксов пространства имен TG: ``` TG_SECTION_TYPE = "https://trustgraph.ai/ns/Section" TG_IMAGE_TYPE = "https://trustgraph.ai/ns/Image" TG_ELEMENT_TYPES = "https://trustgraph.ai/ns/elementTypes" TG_TABLE_COUNT = "https://trustgraph.ai/ns/tableCount" TG_IMAGE_COUNT = "https://trustgraph.ai/ns/imageCount" ``` Схема URN для изображений: `urn:image:{uuid}` (`TG_MIME_TYPE` уже существует.) #### Новый тип сущности Для не-страничных форматов (DOCX, HTML, Markdown и т.д.), где декодер выдает весь документ в виде одной сущности, тип сущности становится: ``` TG_SECTION_TYPE = "https://trustgraph.ai/ns/Section" ``` Это отличает секции от страниц при запросе provenance: | Entity | Type | Когда используется | |---|---|---| | Document | `tg:Document` | Оригинальный загруженный файл | | Page | `tg:Page` | Для page-based форматов (PDF, PPTX, XLSX) | | Section | `tg:Section` | Для не-page форматов (DOCX, HTML, MD и т.д.) | | Image | `tg:Image` | Встроенные изображения (сохранены, не обрабатываются) | | Chunk | `tg:Chunk` | Выход из chunker | | Subgraph | `tg:Subgraph` | Выход из extraции KG | Тип устанавливается декодером в зависимости от группировки по страницам или выдачи всей документа в виде одной сущности. `derived_entity_triples` добавляет необязательный параметр `section` — если он установлен, сущность имеет тип `tg:Section` вместо `tg:Page`. #### Полная цепочка provenance ``` Triple KG → subgraph (provenance) → chunk (char_offset, char_length within page) → page/section (page_number, char_offset, char_length within doc, mime_type, element_types) → document (оригинальный файл в librarian) ``` Каждый линк — это набор triple в графе `GRAPH_SOURCE`. ## Конфигурация Сервиса Аргументы командной строки: ``` --strategy Стратегия партиционирования: auto, hi_res, fast (по умолчанию: auto) --languages Разделенные кодами OCR (по умолчанию: eng) --section-strategy Группировка секций: whole-document, heading, element-type, count, size (по умолчанию: whole-document) --section-element-count Элементы на секцию для 'count' strategy (по умолчанию: 20) --section-max-size Макс. символов на секцию для 'size' strategy (по умолчанию: 4000) --section-within-pages Применение стратегии секций также для страниц (по умолчанию: false) ``` Кроме стандартных аргументов для `FlowProcessor` и очереди librarian. ## Интеграция с Flow Универсальный декодер занимает ту же позицию в потоке обработки, что и существующий декодер PDF: ``` Document → [universal-decoder] → TextDocument → [chunker] → Chunk → ... ``` Он регистрирует: * Консумент `input` (схема Document) * Производитель `output` (схема TextDocument) * Производитель `triples` (схема) * Запросы/отзывы к librarian (для fetch и хранения child document) ## Развертывание * Новый контейнер: `trustgraph-flow-universal-decoder` * Зависимость: `unstructured[all-docs]` (включает PDF, DOCX, PPTX и т.д.) * Можно запускать параллельно или заменять существующий декодер PDF, в зависимости от конфигурации потока * Существующий декодер PDF остается доступным, если зависимости `unstructured` слишком велики ## Изменения | Компонент | Изменение | |---|---| | `provenance/namespaces.py` | Добавить `TG_SECTION_TYPE`, `TG_IMAGE_TYPE`, `TG_ELEMENT_TYPES`, `TG_TABLE_COUNT`, `TG_IMAGE_COUNT` | | `provenance/triples.py` | Добавить параметры `mime_type`, `element_types`, `table_count`, `image_count` | | `provenance/__init__.py` | Экспортировать новые константы | | Новый: `decoding/universal/` | Новый модуль сервиса | | `setup.cfg` / `pyproject` | Добавить зависимость `unstructured[all-docs]` | | Docker | Новый образ контейнера | | Flow definitions | | ## Что не меняется * Chunker (принимает TextDocument, работает как раньше) * Downstream extractors (принимают Chunk, без изменений) * Librarian (хранит child document, без изменений) * Схема (Document, TextDocument, Chunk без изменений) * Запрос provenance (без изменений) ## Риски * `unstructured[all-docs]` имеет тяжелые зависимости (poppler, tesseract, libreoffice для некоторых форматов) * Необходимы значительные изменения. ## Преимущества * Поддержка широкого спектра форматов документов * Использование библиотеки `unstructured` для извлечения текста и метаданных * Генерация provenance-данных * Возможность интеграции с существующей системой обработки документов ## Дополнительные Замечания * Эта архитектура требует тщательного тестирования и оптимизации. * Необходимо учитывать производительность при обработке больших документов. * Важно обеспечить совместимость с существующими системами обработки документов. * Следует использовать возможности библиотеки `unstructured` для оптимизации извлечения текста. * Необходимо провести анализ требований к производительности и выбрать оптимальную конфигурацию. * Необходимо обеспечить безопасность при обработке конфиденциальных данных. ## Заключение Предлагаемая архитектура универсального декодера представляет собой мощное решение для обработки широкого спектра форматов документов. Она обеспечивает гибкость, масштабируемость и возможность интеграции с существующими системами. При правильной реализации и тестировании, эта архитектура позволит эффективно извлекать данные из различных источников и использовать их в аналитических целях.