API для извлечения текста из файлов различных форматов, предназначенный для создания векторных представлений (embeddings) в системах RAG (Retrieval-Augmented Generation).
- 🔧 Широкая поддержка форматов: PDF, DOCX, PPT, изображения, таблицы, исходный код и многое другое
- 💻 Поддержка исходного кода: Более 50 языков программирования и форматов конфигурации
- 🖼️ OCR: Распознавание текста на изображениях (русский и английский языки)
- 📦 Обработка архивов: Извлечение текста из файлов внутри архивов с таймаутом 300 секунд (ZIP, RAR, 7Z, TAR и др.)
- 🌐 Веб-экстракция с JavaScript: Извлечение текста с современных веб-страниц с поддержкой SPA и lazy loading (Playwright + Chromium)
- 🎭 Base64 изображения: Автоматическое извлечение и OCR встроенных base64-изображений из веб-страниц
- 🔄 Умная lazy loading: Безопасный скролл для активации ленивой загрузки с защитой от бесконечных лент
- 🚀 Асинхронная обработка: Неблокирующее выполнение с поддержкой множественных worker-процессов
- 📊 Структурированный вывод: Объединение текста из разных источников
- 🔒 Безопасность: Защита от path traversal, подделки типов файлов, DoS-атак и SSRF
- 🐳 Docker: Готовый к развертыванию контейнер
- 📝 Автодокументация: Swagger UI интерфейс
- 🧪 Комплексное тестирование: Unit, integration и функциональные тесты
- 💾 Полное извлечение: Полное извлечение из DOCX (с колонтитулами, сносками, комментариями) и PPTX (с заметками спикера)
- 📋 Base64 поддержка: Обработка файлов в формате base64 через JSON API для интеграции с системами
- PDF (с OCR для изображений)
- DOCX, DOC (полное извлечение включая колонтитулы, сноски, комментарии)
- ODT, RTF
- PPTX, PPT (полное извлечение включая заметки спикера)
- XLSX, XLS, ODS
- CSV
- JPG, JPEG, PNG
- TIFF, TIF, BMP, GIF
- WebP
- ZIP, RAR, 7Z
- TAR, GZ, BZ2, XZ
- TGZ, TBZ2, TXZ
- TAR.GZ, TAR.BZ2, TAR.XZ
- Python:
.py
,.pyx
,.pyi
,.pyw
- JavaScript/TypeScript:
.js
,.jsx
,.ts
,.tsx
,.mjs
,.cjs
- Java:
.java
,.jav
- C/C++:
.c
,.cpp
,.cxx
,.cc
,.c++
,.h
,.hpp
,.hxx
,.h++
- C#:
.cs
,.csx
- PHP:
.php
,.php3
,.php4
,.php5
,.phtml
- Ruby:
.rb
,.rbw
,.rake
,.gemspec
- Go:
.go
,.mod
,.sum
- Rust:
.rs
,.rlib
- Swift:
.swift
- Kotlin:
.kt
,.kts
- Scala:
.scala
,.sc
- R:
.r
,.rmd
- SQL:
.sql
,.ddl
,.dml
- Shell:
.sh
,.bash
,.zsh
,.fish
,.ksh
,.csh
,.tcsh
- PowerShell:
.ps1
,.psm1
,.psd1
- Perl:
.pl
,.pm
,.pod
,.t
- Lua:
.lua
- 1C:Enterprise:
.bsl
- OneScript:
.os
- Общие:
.ini
,.cfg
,.conf
,.config
,.properties
- TOML:
.toml
- YAML:
.yaml
,.yml
- JSON:
.json
,.jsonc
,.jsonl
,.ndjson
- XML:
.xml
- CSS:
.css
,.scss
,.sass
,.less
,.styl
- HTML:
.html
,.htm
- Markdown:
.md
,.markdown
- LaTeX:
.tex
,.latex
- reStructuredText:
.rst
- AsciiDoc:
.adoc
,.asciidoc
- Docker:
.dockerfile
,.containerfile
- Makefile:
.makefile
,.mk
,.mak
- Git:
.gitignore
,.gitattributes
,.gitmodules
- Email:
.eml
,.msg
- Электронные книги:
.epub
- HTTP/HTTPS URL: Извлечение текста непосредственно с веб-страниц
- HTML-контент: Автоматическое удаление разметки, скриптов и стилей
- Изображения на странице: OCR крупных изображений (>150x150 пикселей)
- Base64 изображения: Поддержка встроенных base64 изображений (data:image/...)
- JavaScript рендеринг: Полная поддержка SPA и динамического контента через Playwright
- Lazy loading: Автоматическая активация ленивой загрузки изображений с защитой от бесконечного скролла
- Безопасность: Защита от SSRF-атак, блокировка внутренних IP
- TXT
git clone <repository-url>
cd text-extraction-api
# Сборка и запуск в режиме разработки
make dev
# Или для продакшена
make prod
# Проверка статуса
curl http://localhost:7555/health
# Получение поддерживаемых форматов
curl http://localhost:7555/v1/supported-formats
curl http://localhost:7555/
curl http://localhost:7555/health
curl http://localhost:7555/v1/supported-formats
curl -X POST \
-F "[email protected]" \
http://localhost:7555/v1/extract/file
curl -X POST \
-H "Content-Type: application/json" \
-d '{
"encoded_base64_file": "0J/RgNC40LLQtdGCINGN0YLQviDRgtC10LrRgdGCIQ==",
"filename": "document.txt"
}' \
http://localhost:7555/v1/extract/base64
POST /v1/extract/url
- Извлечение текста с веб-страниц и файлов по URL (новое в v1.10.0, расширено в v1.10.2, v1.10.3)
Базовый запрос (для обратной совместимости):
curl -X POST \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/page",
"user_agent": "Text Extraction Bot 1.0"
}' \
http://localhost:7555/v1/extract/url
Расширенный запрос с настройками извлечения (новое в v1.10.2):
curl -X POST \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/spa-app",
"extraction_options": {
"enable_javascript": true,
"js_render_timeout": 15,
"web_page_delay": 2,
"enable_lazy_loading_wait": false,
"max_scroll_attempts": 0,
"process_images": true,
"max_images_per_page": 5,
"web_page_timeout": 20
}
}' \
http://localhost:7555/v1/extract/url
Скачивание файла по URL (новое в v1.10.3):
curl -X POST \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/document.pdf"
}' \
http://localhost:7555/v1/extract/url
{
"status": "success",
"filename": "document.pdf",
"files": [
{
"filename": "document.pdf",
"path": "document.pdf",
"size": 1024000,
"type": "pdf",
"text": "Извлеченный текст из документа..."
}
]
}
{
"status": "success",
"filename": "documents.zip",
"files": [
{
"filename": "document1.pdf",
"path": "documents/document1.pdf",
"size": 524288,
"type": "pdf",
"text": "Текст из первого документа..."
},
{
"filename": "image1.jpg",
"path": "documents/images/image1.jpg",
"size": 102400,
"type": "jpg",
"text": "Распознанный текст с изображения..."
}
]
}
{
"status": "success",
"url": "https://example.com/news/article",
"count": 3,
"files": [
{
"filename": "page_content",
"path": "https://example.com/news/article",
"size": 45670,
"type": "html",
"text": "Заголовок статьи. Основной текст новости с подробным описанием события..."
},
{
"filename": "photo1.jpg",
"path": "https://example.com/images/photo1.jpg",
"size": 234567,
"type": "jpg",
"text": "Подпись к фотографии на изображении..."
},
{
"filename": "chart.png",
"path": "https://example.com/assets/chart.png",
"size": 189432,
"type": "png",
"text": "Данные с диаграммы: 2023 - 45%, 2024 - 67%"
}
]
}
{
"status": "success",
"url": "https://example.com/document.pdf",
"count": 1,
"files": [
{
"filename": "document.pdf",
"path": "document.pdf",
"size": 1024000,
"type": "pdf",
"text": "Извлеченный текст из скачанного PDF документа..."
}
]
}
{
"status": "success",
"url": "https://example.com/files.zip",
"count": 2,
"files": [
{
"filename": "document1.docx",
"path": "files/document1.docx",
"size": 524288,
"type": "docx",
"text": "Текст из первого документа в архиве..."
},
{
"filename": "image1.jpg",
"path": "files/images/image1.jpg",
"size": 102400,
"type": "jpg",
"text": "Распознанный текст с изображения из архива..."
}
]
}
{
"status": "error",
"filename": "broken.pdf",
"message": "Файл поврежден или формат не поддерживается."
}
400
- Некорректный запрос (отсутствует Content-Length или неверный base64)413
- Файл слишком большой (>20MB)415
- Неподдерживаемый формат или несоответствие типа файла422
- Поврежденный файл, пустой или защищенный паролем504
- Превышен лимит времени обработки
API теперь поддерживает гибкие настройки извлечения текста с веб-страниц через параметр extraction_options
. Все параметры опциональны и позволяют адаптировать процесс извлечения под конкретные требования.
JavaScript и рендеринг:
enable_javascript
: Включить Playwright для JS-рендеринга (по умолчанию:false
)js_render_timeout
: Таймаут JS-рендеринга в секундах (по умолчанию:10
)web_page_delay
: Задержка после JS в секундах (по умолчанию:3
)
Lazy Loading:
enable_lazy_loading_wait
: Автоматический скролл для lazy loading (по умолчанию:true
)max_scroll_attempts
: Количество попыток скролла, 0 = без скролла (по умолчанию:3
)
Обработка изображений:
process_images
: Обрабатывать изображения через OCR (по умолчанию:true
)enable_base64_images
: Обрабатывать base64 изображения (по умолчанию:true
)min_image_size_for_ocr
: Минимальный размер для OCR в пикселях (по умолчанию:22500
)max_images_per_page
: Максимум изображений на странице (по умолчанию:20
)
Таймауты:
web_page_timeout
: Таймаут загрузки страницы в секундах (по умолчанию:30
)image_download_timeout
: Таймаут загрузки изображений в секундах (по умолчанию:15
)
Сетевые настройки:
follow_redirects
: Следовать редиректам (по умолчанию:true
)max_redirects
: Максимум редиректов (только для requests)
User-Agent: Используется параметр user_agent
на корневом уровне запроса.
Быстрое извлечение без lazy loading:
{
"url": "https://news.example.com/article",
"extraction_options": {
"enable_lazy_loading_wait": false,
"max_scroll_attempts": 0,
"web_page_delay": 1,
"web_page_timeout": 15
}
}
Только текст, без изображений:
{
"url": "https://blog.example.com/post",
"extraction_options": {
"process_images": false,
"enable_base64_images": false
}
}
Тщательная обработка SPA:
{
"url": "https://spa.example.com",
"extraction_options": {
"enable_javascript": true,
"js_render_timeout": 20,
"web_page_delay": 5,
"enable_lazy_loading_wait": true,
"max_scroll_attempts": 5
}
}
Максимальная производительность:
{
"url": "https://simple.example.com",
"extraction_options": {
"enable_javascript": false,
"process_images": false,
"web_page_timeout": 10
}
}
Используйте /v1/extract/file
когда:
- Загружаете файлы напрямую через форму или drag&drop
- Работаете с локальными файлами
- Интегрируетесь с файловыми системами
Используйте /v1/extract/base64
когда:
- Файл уже закодирован в base64 в вашей системе
- Интегрируетесь с API, которые передают файлы в base64
- Работаете с микросервисной архитектурой через JSON
- Файл хранится в базе данных в виде base64
Используйте /v1/extract/url
когда:
- Извлекаете текст напрямую с веб-страниц
- Работаете с современными веб-приложениями (SPA)
- Нужен контроль над процессом извлечения (JavaScript, lazy loading, изображения)
- Скачиваете и обрабатываете файлы по URL (новое в v1.10.3)
- Работаете с прямыми ссылками на документы, PDF, архивы и другие файлы
- Интегрируетесь с системами где файлы доступны через HTTP/HTTPS ссылки
{
"status": "error",
"filename": "document.pdf",
"message": "Отсутствует заголовок Content-Length. Пожалуйста, убедитесь, что размер файла указан в запросе."
}
{
"status": "error",
"filename": "malicious.txt",
"message": "Расширение файла не соответствует его содержимому. Возможная подделка типа файла."
}
API включает несколько уровней защиты:
- Автоматическая очистка имен файлов от потенциально опасных символов
- Предотвращение атак типа path traversal (
../../../etc/passwd
) - Использование безопасных имен для внутренней обработки
- Верификация соответствия расширения файла его реальному содержимому
- Использование MIME-типов для определения истинного формата
- Предотвращение загрузки исполняемых файлов под видом текстовых
- Обязательная проверка наличия заголовка
Content-Length
- Предотвращение загрузки файлов неизвестного размера
- Ограничение максимального размера файла (20MB)
- Ограничение размера распакованного содержимого архивов (100MB)
- Контроль глубины вложенности архивов (максимум 3 уровня)
- Изоляция процесса распаковки с таймаутом
- Детальное логирование всех попыток нарушения безопасности
- Предупреждения о подозрительной активности
- Трассировка потенциальных угроз
# Порт API (по умолчанию: 7555)
API_PORT=7555
# Режим отладки
DEBUG=false
# Языки для OCR (по умолчанию: rus+eng)
OCR_LANGUAGES=rus+eng
# Таймаут обработки в секундах (по умолчанию: 300)
PROCESSING_TIMEOUT_SECONDS=300
# Количество ядер CPU (по умолчанию: 4)
# Используется для автоматического расчета WORKERS в продакшене
CPU_CORES=4
# Количество worker-процессов uvicorn (по умолчанию: 1)
# Для продакшена автоматически вычисляется: 2 * CPU_CORES + 1
WORKERS=1
# Максимальный размер файла в байтах (по умолчанию: 20MB)
MAX_FILE_SIZE=20971520
# Максимальный размер архива в байтах (по умолчанию: 20MB)
MAX_ARCHIVE_SIZE=20971520
# Максимальный размер распакованного содержимого (по умолчанию: 100MB)
MAX_EXTRACTED_SIZE=104857600
# Максимальная глубина вложенности архивов (по умолчанию: 3)
MAX_ARCHIVE_NESTING=3
# Настройки веб-экстрактора (новое в v1.10.0)
# Минимальный размер изображений для OCR в пикселях (по умолчанию: 150x150 = 22500)
MIN_IMAGE_SIZE_FOR_OCR=22500
# Максимальное количество изображений для обработки на странице (по умолчанию: 20)
MAX_IMAGES_PER_PAGE=20
# Таймаут загрузки веб-страницы в секундах (по умолчанию: 30)
WEB_PAGE_TIMEOUT=30
# Таймаут загрузки изображения в секундах (по умолчанию: 15)
IMAGE_DOWNLOAD_TIMEOUT=15
# User-Agent по умолчанию для веб-запросов
DEFAULT_USER_AGENT="Text Extraction Bot 1.0"
# Включить выполнение JavaScript (по умолчанию: false, требует дополнительных ресурсов)
ENABLE_JAVASCRIPT=false
# Заблокированные IP-диапазоны для защиты от SSRF
BLOCKED_IP_RANGES="127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,::1/128,fe80::/10"
# Настройки веб-экстрактора v1.10.1 (Playwright)
# Включить поддержку base64 изображений (по умолчанию: true)
ENABLE_BASE64_IMAGES=true
# Задержка после загрузки JavaScript в секундах (по умолчанию: 3)
WEB_PAGE_DELAY=3
# Включить ожидание lazy loading изображений (по умолчанию: true)
ENABLE_LAZY_LOADING_WAIT=true
# Отдельный таймаут для JS-рендеринга в секундах (по умолчанию: 10)
JS_RENDER_TIMEOUT=10
# Максимальное количество попыток скролла для lazy loading (по умолчанию: 3)
MAX_SCROLL_ATTEMPTS=3
# Новые настройки для определения типа контента и скачивания файлов (v1.10.3)
# Таймаут HEAD запроса для определения типа контента в секундах (по умолчанию: 10)
HEAD_REQUEST_TIMEOUT=10
# Таймаут скачивания файлов в секундах (по умолчанию: 60)
FILE_DOWNLOAD_TIMEOUT=60
cp env_example .env
# Отредактируйте .env под ваши нужды
# Помощь
make help
# Сборка и развертывание
make build # Собрать Docker образ
make dev # Запустить в режиме разработки
make prod # Запустить в продакшене
# Управление сервисом
make stop # Остановить все контейнеры
make logs # Показать логи приложения
make status # Показать статус контейнеров
# Тестирование
make test # Полное тестирование с покрытием
make test-unit # Только unit тесты
make test-integration # Только integration тесты
make test-docker # Тестирование в Docker
make test-coverage # Показать отчет покрытия
make test-legacy # Старые функциональные тесты
# Проверка кода
make install-linters # Установить инструменты для проверки кода
make lint # Проверить код всеми линтерами
make lint-check # Проверить код без исправлений
make format # Автоформатирование кода (black + isort)
# Очистка
make clean # Полная очистка системы
# Разработка
docker-compose up
# Продакшен
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d
# Остановка
docker-compose down
# Создание виртуального окружения
python -m venv venv
source venv/bin/activate # Linux/Mac
# или
venv\Scripts\activate # Windows
# Установка зависимостей
pip install -r requirements.txt
# Установка браузеров Playwright (новое в v1.10.1)
playwright install chromium
# Новые зависимости для веб-экстракции:
# v1.10.0: requests, beautifulsoup4, lxml, urllib3
# v1.10.1: playwright - для JS-рендеринга и lazy loading
# Запуск сервера разработки
uvicorn app.main:app --reload --host 0.0.0.0 --port 7555
├── app/
│ ├── __init__.py
│ ├── main.py # Главный модуль FastAPI
│ ├── config.py # Конфигурация
│ ├── extractors.py # Извлечение текста из всех форматов
│ └── utils.py # Утилиты (включая функции безопасности)
├── tests/ # Тестовые файлы (126+ файлов различных форматов)
├── docs/
│ └── TZ.md # Техническое задание
├── requirements.txt # Python зависимости
├── requirements-test.txt # Зависимости для тестирования
├── Dockerfile # Docker образ с системными зависимостями
├── docker-compose.yml # Разработка
├── docker-compose.prod.yml # Продакшен
├── Makefile # Команды управления
├── run_tests.sh # Скрипт legacy тестирования
├── CHANGELOG.md # Журнал изменений
└── README.md # Документация
# Запуск всех тестов
make test
# Отдельные виды тестов
make test-unit # Unit тесты
make test-integration # Integration тесты
make test-docker # Тестирование в Docker
Современная система тестирования:
- Framework: pytest + pytest-asyncio
- Покрытие: pytest-cov с минимальным порогом 60%
- HTTP тесты: httpx для тестирования API
- Моки: pytest-mock для внешних зависимостей
- Типы тестов: Unit, Integration, Real Files
Структура тестов:
tests/
├── conftest.py # Общие фикстуры
├── test_config.py # Тесты конфигурации
├── test_extractors.py # Тесты извлечения текста
├── test_integration.py # Integration тесты с реальными файлами
├── test_main.py # Тесты API эндпоинтов
├── test_utils.py # Тесты утилит
└── [126+ test files] # Реальные файлы для тестирования
Статистика тестирования:
- Всего тестов: 120+
- Покрытие кода: 37%+ (требуется минимум 60%)
- Поддерживаемые форматы: 130+
- Тестовые файлы: 126+
- Успешность: 94.4% (119 из 126 файлов)
# Запуск старых функциональных тестов
make test-legacy
Скрипт run_tests.sh
:
- Проверяет доступность API
- Тестирует все файлы из папки
tests/
- Создает файлы результатов:
filename.ok.txt
- успешное извлечениеfilename.err.txt
- ошибки
- Выводит статистику покрытия форматов
Новый класс TestAllRealFiles
в tests/test_integration.py
:
- Автоматически находит все файлы с поддерживаемыми расширениями
- Исключает служебные файлы и результаты тестов
- Отправляет файлы в API для проверки функциональности
- Предоставляет детальную статистику по типам файлов
После запуска API, документация доступна по адресам:
- Swagger UI: http://localhost:7555/docs
- ReDoc: http://localhost:7555/redoc
Проект использует современные инструменты для поддержания качества кода:
# Установка инструментов
make install-linters
# Автоформатирование кода
make format
# Проверка всеми линтерами
make lint
# Проверка без исправлений
make lint-check
Форматирование:
- Black: Автоформатирование Python кода
- isort: Сортировка и организация импортов
Проверка стиля:
- Flake8: Проверка соответствия PEP 8 и поиск ошибок
- MyPy: Статическая проверка типов (опционально)
Безопасность:
- Bandit: Поиск уязвимостей в коде
- Safety: Проверка зависимостей на известные уязвимости
Настройки линтеров находятся в:
pyproject.toml
- конфигурация Black, isort, MyPy, pytest.flake8
- настройки Flake8requirements-lint.txt
- зависимости для проверки кода
Проект включает полный CI/CD pipeline:
- Линтинг: Автоматическая проверка кода при каждом коммите
- Тестирование: Запуск тестов в Docker и на разных версиях Python
- Безопасность: Проверка на уязвимости
- Покрытие: Генерация отчетов покрытия и загрузка в Codecov
- Артефакты: Сохранение отчетов для анализа
# Локальная проверка перед коммитом
make format # Исправить форматирование
make lint # Проверить все аспекты
make test # Запустить тесты
API ведет подробные логи:
- Входящие запросы с временными метками
- Время обработки каждого файла
- Ошибки с полным traceback
- Статистика извлечения (количество файлов, длина текста)
- Предупреждения безопасности
# Docker логи
make logs
# Статус контейнеров
make status
# Или напрямую
docker-compose logs -f
- Максимальный размер файла: 20 MB
- Максимальный размер архива: 20 MB
- Максимальный размер распакованного содержимого: 100 MB
- Таймаут обработки: 300 секунд (5 минут) для всех операций
- Таймаут обработки архивов: 300 секунд (5 минут) с принудительным завершением
- Максимальная глубина вложенности архивов: 3 уровня
- Асинхронная обработка: Все CPU-bound операции выполняются в отдельном пуле потоков
- Неблокирующая архитектура: Event loop не блокируется при обработке тяжелых файлов
- Множественные worker-процессы: Настраиваемое количество процессов для продакшена
- Изоляция операций: Сбой в одной операции не влияет на другие
Рекомендации:
- Используйте правильные форматы файлов
- Сжимайте изображения перед отправкой
- Для продакшена установите
WORKERS=9
(или 2 * количество ядер CPU + 1) - Убедитесь в наличии заголовка Content-Length в запросах
Тип файла | Среднее время обработки | Особенности |
---|---|---|
Текстовые файлы | <1мс | Автоопределение кодировки |
Исходный код | <1мс | 50+ языков программирования |
Изображения (OCR) | 100-500мс | Русский и английский |
PDF документы | 50-200мс | С OCR для изображений |
Office документы | 100-1000мс | Полное извлечение |
DOCX документы | 100-800мс | Включая колонтитулы, сноски, комментарии |
PPTX презентации | 100-600мс | Включая заметки спикера |
Таблицы (большие) | 100-300мс | Все популярные форматы |
Архивы | 200-2000мс | Таймаут 300 секунд |
- ZIP: Стандартный формат, быстрая обработка
- RAR: Требует библиотеку rarfile
- 7Z: Требует библиотеку py7zr
- TAR: Включая сжатые варианты (GZ, BZ2, XZ)
- Распаковка: Архив распаковывается во временную папку
- Фильтрация: Игнорируются системные файлы (.DS_Store, Thumbs.db)
- Обработка: Каждый файл обрабатывается согласно его типу
- Объединение: Результаты объединяются в единый ответ
- Очистка: Временные файлы автоматически удаляются
- Таймаут: Обработка архивов ограничена 300 секундами для предотвращения блокировки системы
- Защита от zip-бомб: Ограничение размера распакованного содержимого
- Защита от path traversal: Санитизация имен файлов в архивах
- Контроль вложенности: Максимум 3 уровня вложенности архивов
- Изоляция процесса: Распаковка в отдельном процессе с таймаутом
- Таймаут обработки: Принудительное завершение обработки архивов через 300 секунд
# Сборка
docker build -t text-extraction-api .
# Запуск
docker run -p 7555:7555 text-extraction-api
apiVersion: apps/v1
kind: Deployment
metadata:
name: text-extraction-api
spec:
replicas: 3
selector:
matchLabels:
app: text-extraction-api
template:
metadata:
labels:
app: text-extraction-api
spec:
containers:
- name: api
image: text-extraction-api:latest
ports:
- containerPort: 7555
env:
- name: API_PORT
value: "7555"
- name: WORKERS
value: "9"
- name: OCR_LANGUAGES
value: "rus+eng"
resources:
requests:
memory: "512Mi"
cpu: "250m"
limits:
memory: "2Gi"
cpu: "1000m"
-
OCR не работает
- Проверьте установку tesseract в Docker образе
- Убедитесь в наличии языковых пакетов (rus+eng)
-
Ошибки памяти
- Уменьшите размер файлов или архивов
- Увеличьте лимиты контейнера
- Уменьшите
MAX_EXTRACTED_SIZE
-
Таймауты
- Увеличьте
PROCESSING_TIMEOUT_SECONDS
- Уменьшите сложность входных файлов
- Проверьте размер архивов
- Обработка архивов автоматически завершается через 300 секунд
- Увеличьте
-
Архивы не обрабатываются
- Убедитесь в наличии библиотек rarfile и py7zr
- Проверьте размер архива и содержимого
- Проверьте глубину вложенности
- Обработка прекращается через 300 секунд (см. таймаут)
-
Неполное извлечение текста
- DOCX: Теперь включает колонтитулы, сноски и комментарии
- PPTX: Теперь включает заметки спикера
- Проверьте версию API (должна быть 1.8.6+)
# Включение отладки
export DEBUG=true
# Просмотр подробных логов
make logs
# Проверка статуса
make status
# Быстрая проверка API
curl http://localhost:7555/health
# Проверка поддерживаемых форматов
curl http://localhost:7555/v1/supported-formats
# Тестирование с простым файлом
curl -X POST -F "file=@tests/test.txt" http://localhost:7555/v1/extract/file
- Форк репозитория
- Создание ветки для фичи
- Коммит изменений
- Запуск тестов (
make test
) - Пуш в ветку
- Создание Pull Request
Этот проект лицензирован под MIT License - см. файл LICENSE.
Для вопросов и поддержки:
- GitHub Issues
- Техническая документация:
docs/TZ.md
Версия: 1.10.5 Разработчик: Барилко Виталий