mirror of
https://github.com/trustgraph-ai/trustgraph.git
synced 2026-04-25 08:26:21 +02:00
201 lines
13 KiB
Markdown
201 lines
13 KiB
Markdown
|
|
---
|
|||
|
|
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` для оптимизации извлечения текста.
|
|||
|
|
* Необходимо провести анализ требований к производительности и выбрать оптимальную конфигурацию.
|
|||
|
|
* Необходимо обеспечить безопасность при обработке конфиденциальных данных.
|
|||
|
|
|
|||
|
|
## Заключение
|
|||
|
|
|
|||
|
|
Предлагаемая архитектура универсального декодера представляет собой мощное решение для обработки широкого спектра форматов документов. Она обеспечивает гибкость, масштабируемость и возможность интеграции с существующими системами. При правильной реализации и тестировании, эта архитектура позволит эффективно извлекать данные из различных источников и использовать их в аналитических целях.
|