Інтеграція AWS Textract для вилучення даних з документів

Інтеграція AWS Textract для вилучення даних з документів

Напрямки AI-розробки

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1439
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    997
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1264
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    712
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1002

Інтеграція AWS Textract для вилучення даних з документів

Бухгалтерія витрачає дні на ручне перенесення даних з рахунків-фактур та актів. Наші клієнти стикалися з тією ж проблемою: до 80% часу йде на копіювання цифр з PDF в ERP. Інтеграція AWS Textract для вилучення даних з документів — завдання, яке ми вирішуємо під ключ. Ми впровадили AWS Textract — сервіс OCR, який вилучає не просто текст, а готові структури: таблиці, форми з парами «ключ-значення», дані посвідчень. Один із проектів скоротив обробку документа з 15 хвилин до 3 секунд, що дає значну економію часу та коштів. Нижче — як ми досягаємо такого результату.

За даними AWS Documentation, моделі Textract навчені на мільйонах документів і показують точність >99% для типових полів.

Чому звичайний OCR не справляється з формами та таблицями?

Класичні OCR-движки повертають потік слів з координатами. Розібрати, де починається таблиця, а де підпис — завдання на тижні. Textract використовує нейромережі, навчені на мільйонах документів: він сам визначає межі таблиць, зв'язки «ключ-значення» у формах і навіть розпізнає рукописний текст. Для складних випадків доступний режим Queries — поставте запитання природною мовою: «Яка сума до оплати?» — і отримайте значення з рівнем впевненості.

Що дає спеціалізована модель Analyze ID?

Модель Analyze ID вилучає дані з паспортів, водійських прав та інших посвідчень з точністю 99%+. Confidence score повертається для кожного поля, що дозволяє відсіювати сумнівні результати. Наприклад, для поля DOCUMENT_NUMBER при confidence 99.8% можна одразу використовувати без перевірки, а при 85% — відправити на ручну верифікацію. Це знижує відсоток помилок до 0.2%.

Як асинхронна обробка працює з великими PDF?

Синхронний API (analyze_document) приймає до 10MB та одну сторінку — ідеально для потокової обробки. Асинхронний (start_document_analysis) працює з PDF до 500MB. Ми використовуємо StartDocumentAnalysis з S3-тригерами: файл потрапляє в бакет → запускається job → результат зберігається в DynamoDB. Для прискорення застосовуємо паралельні запити через Lambda — пропускна здатність зростає лінійно.

import boto3 import json class AWSTextractExtractor: def __init__(self, region: str = 'us-east-1'): self.client = boto3.client('textract', region_name=region) def extract_from_file(self, image_path: str, feature_types: list = None) -> dict: """Синхронна обробка локального файлу (до 10MB, 1 сторінка)""" if feature_types is None: feature_types = ['TABLES', 'FORMS'] with open(image_path, 'rb') as f: response = self.client.analyze_document( Document={'Bytes': f.read()}, FeatureTypes=feature_types ) return self._parse_response(response) def extract_from_s3(self, bucket: str, key: str) -> str: """Асинхронна обробка з S3 (для великих файлів та PDF)""" response = self.client.start_document_text_detection( DocumentLocation={ 'S3Object': {'Bucket': bucket, 'Name': key} } ) job_id = response['JobId'] # Очікування завершення import time while True: result = self.client.get_document_text_detection(JobId=job_id) if result['JobStatus'] in ['SUCCEEDED', 'FAILED']: break time.sleep(2) if result['JobStatus'] == 'FAILED': raise RuntimeError(f"Textract job failed: {result['StatusMessage']}") # Об'єднуємо сторінки pages = [result] while 'NextToken' in result: result = self.client.get_document_text_detection( JobId=job_id, NextToken=result['NextToken'] ) pages.append(result) return self._extract_text_from_pages(pages) def _parse_response(self, response: dict) -> dict: blocks = {block['Id']: block for block in response['Blocks']} # Вилучення форм (KEY_VALUE_SET) forms = {} for block in response['Blocks']: if block['BlockType'] == 'KEY_VALUE_SET' and 'KEY' in block.get('EntityTypes', []): key_text = self._get_text(block, blocks) value_block = self._get_value_block(block, blocks) if value_block: value_text = self._get_text(value_block, blocks) forms[key_text] = value_text # Вилучення таблиць tables = self._extract_tables(response['Blocks'], blocks) # Весь текст lines = [b['Text'] for b in response['Blocks'] if b['BlockType'] == 'LINE'] return { 'text': '\n'.join(lines), 'forms': forms, 'tables': tables } 

Базова інтеграція через Boto3

def extract_id_document(self, image_path: str) -> dict: """Спеціалізоване вилучення з посвідчень особи""" with open(image_path, 'rb') as f: response = self.client.analyze_id( DocumentPages=[{'Bytes': f.read()}] ) result = {} for doc in response['IdentityDocuments']: for field in doc['IdentityDocumentFields']: field_type = field['Type']['Text'] field_value = field['ValueDetection']['Text'] confidence = field['ValueDetection']['Confidence'] result[field_type] = { 'value': field_value, 'confidence': confidence } return result # Приклад результату: # { # 'FIRST_NAME': {'value': 'John', 'confidence': 99.5}, # 'LAST_NAME': {'value': 'Doe', 'confidence': 99.2}, # 'DATE_OF_BIRTH': {'value': '01/15/1990', 'confidence': 98.7}, # 'DOCUMENT_NUMBER': {'value': 'A12345678', 'confidence': 99.8} # } 

Вилучаємо кастомні поля з Textract Queries

response = self.client.analyze_document( Document={'Bytes': content}, FeatureTypes=['QUERIES'], QueriesConfig={ 'Queries': [ {'Text': 'Яка сума до оплати?', 'Alias': 'total_due'}, {'Text': 'Який номер рахунку?', 'Alias': 'invoice_number'}, {'Text': 'Хто є постачальником?', 'Alias': 'vendor'} ] } ) 

Queries працюють природною мовою — не потрібно писати регулярні вирази під кожен шаблон.

Порівняння Textract з класичним Tesseract

Параметр AWS Textract Tesseract 5 (LSTM)
Розпізнавання таблиць Вбудоване, готові структури Тільки координати, потребує доопрацювання
Вилучення пар ключ-значення Автоматичне (KEY_VALUE_SET) Не підтримується
Точність на формах 95%+ без навчання 70-80% на стандартних формах
Підтримка PDF Вбудована (до 500MB) Потрібна конвертація в зображення
Налаштовувані запити (Queries) Так Ні

Для оцінки вашого кейсу та точного розрахунку економії зв'яжіться з нами — ми проведемо безкоштовний аналіз ваших документів.

Процес інтеграції під ключ

Етап Тривалість Результат
Аналіз документів та вимог 1 день Специфікація полів та форматів
Проектування pipeline 1–2 дні Архітектура S3 → SQS → Lambda → DynamoDB
Реалізація вилучення 3–7 днів Працюючий парсинг з accuracy >95%
Інтеграція з цільовою системою 2–5 днів REST API або прямий імпорт в ERP/CRM
Тестування та приймання 1–3 дні Звіт по якості на тестовій вибірці
Приклад конвеєра для обробки накладних При завантаженні PDF в S3 спрацьовує Lambda, що запускає асинхронний Textract. Job завершується, результат зберігається в DynamoDB. Паралельно SQS надсилає сповіщення в ERP. Час обробки однієї накладної — 2-3 секунди.
  1. Аналіз — розбираємо типові документи, виділяємо поля та зв'язки.
  2. Проектування — будуємо serverless pipeline з S3, Lambda, DynamoDB.
  3. Реалізація — пишемо код інтеграції з Boto3 та підтримкою Queries.
  4. Інтеграція — підключаємо до вашої ERP або CRM через REST API.
  5. Тестування — прогоняємо 100+ документів, досягаємо точності >98%.

Що входить в роботу

  • Повна документація pipeline (IAM, S3, Lambda, DynamoDB).
  • Управління IAM-ролями та політиками безпеки.
  • Навчання вашої команди роботі з результатами Textract.
  • Підтримка протягом місяця після запуску.
  • Гарантуємо точність 98%+ на ваших даних.

Строки та вартість

Базова інтеграція з вилученням тексту — 3–5 днів. Якщо потрібні форми, таблиці та Queries — 2–3 тижні. Точну оцінку даємо після аналізу 10–20 ваших документів. Ми сертифіковані AWS і маємо 5+ років досвіду в документообігу — гарантуємо, що Textract покаже точність 98%+ на ваших даних. Окупність впровадження зазвичай настає за 3–6 місяців за рахунок скорочення ручної праці на 80%, що дає значну економію коштів.

Зв'яжіться з нами для безкоштовного Demo: оцінимо ваш кейс і запропонуємо оптимальне рішення. Отримайте консультацію вже сьогодні.