Логотип Зефирнет

Обработка документов, содержащих рукописное табличное содержимое, с помощью Amazon Textract и Amazon A2I

Дата:

Даже в нашу цифровую эпоху, когда все больше и больше компаний переходят в облако и используют машинное обучение (ML) или технологии для улучшения бизнес-процессов, мы все еще видим, как огромное количество компаний обращаются к нам и спрашивают об обработке документов, особенно документов с рукописным вводом. Мы видим бланки занятости, табели учета рабочего времени и финансовые приложения с таблицами и формами, которые содержат рукописный текст в дополнение к печатной информации. Чтобы усложнить ситуацию, каждый документ может быть в разных форматах, и каждое учреждение в любой отрасли может иметь несколько разных форматов. Организации ищут простое решение, которое может обрабатывать сложные документы различных форматов, включая таблицы, формы и табличные данные.

Извлечение данных из этих документов, особенно когда у вас есть комбинация печатного и рукописного текста, подвержено ошибкам, требует много времени, дорого и не масштабируется. Текст, встроенный в таблицы и формы, усложняет извлечение и обработку. Амазонка Текст - это сервис AWS AI, который автоматически извлекает печатный текст, почерк и другие данные из отсканированных документов, что выходит за рамки простого оптического распознавания символов (OCR) для идентификации, понимания и извлечения данных из форм и таблиц.

После извлечения данных этап постобработки в рабочем процессе управления документами включает в себя проверку записей и внесение изменений в соответствии с требованиями последующих приложений обработки. Amazon увеличил AI (Amazon A2I) позволяет легко настроить проверку, выполненную человеком, в рабочий процесс машинного обучения. Это позволяет вам автоматически проверять конвейер машинного обучения, если результаты оказываются ниже указанного порога достоверности, настраивать рабочие процессы проверки и аудита и при необходимости изменять результаты прогнозов.

В этом посте мы покажем, как можно использовать функцию Amazon Textract Handwritten для извлечения табличных данных из документов и создания цикла проверки человеком с помощью Пользовательский тип задачи Amazon A2I чтобы убедиться, что прогнозы очень точны. Мы храним результаты в Amazon DynamoDB, которая представляет собой базу данных «ключ-значение» и документов, которая обеспечивает производительность в миллисекундах, измеряемую одной цифрой, в любом масштабе, делая данные доступными для последующей обработки.

Мы проведем вас через следующие шаги, используя Блокнот Jupyter:

  1. Используйте Amazon Textract для извлечения табличных данных из документа и проверки ответа.
  2. Настройте человеческий цикл Amazon A2I для просмотра и изменения ответа Amazon Textract.
  3. Оценка ответа Amazon A2I и сохранение его в DynamoDB для последующей обработки.

Предпосылки

Прежде чем начать, давайте настроим пошаговую инструкцию Jupyter Notebook с помощью AWS CloudFormation шаблон, а затем создайте частную рабочую силу Amazon A2I, которая необходима в записной книжке для настройки пользовательского рабочего процесса Amazon A2I.

Настройка записной книжки Jupyter

Мы развертываем шаблон CloudFormation, который выполняет большую часть работы по начальной настройке за вас, например, создание Управление идентификацией и доступом AWS (IAM) роль для Создатель мудреца Амазонки, создание экземпляра записной книжки SageMaker и клонирование репозитория GitHub в экземпляр записной книжки.

  1. Выберите Стек запуска для настройки ноутбука в регионе Восток США (Северная Вирджиния):

  1. Не вносите никаких изменений в имя или параметры стека.
  2. В Возможности раздел, выберите Я признаю, что AWS CloudFormation может создавать ресурсы IAM.
  3. Выберите Создать стек.

Выберите Создать стек

На следующем снимке экрана страницы сведений о стеке показано состояние стека: CREATE_IN_PROGRESS, Изменение статуса до 20 минут CREATE_COMPLETE.

На следующем снимке экрана страницы сведений о стеке показано состояние стека как CREATE_IN_PROGRESS.

  1. На консоли SageMaker выберите Экземпляры ноутбуков.
  2. Выберите Открытый Юпитер для TextractA2INotebook записную книжку, которую вы создали.
  3. Откройте textract-hand-written-a2i-forms.ipynb и следуйте туда.

Настройка частной рабочей силы Amazon A2I

Для этого поста вы создаете частную рабочую команду и добавляете в нее только одного пользователя (вас). Инструкции см. Создание частной рабочей силы (консоль Amazon SageMaker). Когда пользователь (вы) принимает приглашение, вы должны добавить себя в рабочую силу. Инструкции см. В Добавить работника в рабочую команду в разделе Управление персоналом (консоль Amazon SageMaker).

После того, как вы создадите группу специалистов по маркировке, скопируйте ARN сотрудников и введите его в ячейку записной книжки, чтобы настроить команду для частного просмотра:

WORKTEAM_ARN= "<your workteam ARN>"

В следующих разделах мы расскажем, как использовать этот блокнот.

Получение табличных данных из документа и проверка ответа

В этом разделе мы проходим следующие шаги, используя пошаговая тетрадь:

  1. Просмотрите образцы данных, которые содержат как печатное, так и рукописное содержание.
  2. Настройте вспомогательные функции для анализа ответа Amazon Textract.
  3. Изучите и проанализируйте ответ Amazon Textract.

Просмотр выборки данных

Просмотрите образец данных, запустив следующую ячейку записной книжки:

# Document
documentName = "test_handwritten_document.png" display(Image(filename=documentName))

Мы используем следующий образец документа, который содержит как печатное, так и рукописное содержимое в таблицах.

Мы используем следующий образец документа, который содержит как печатное, так и рукописное содержимое в таблицах.

Используйте библиотеку парсера Amazon Textract для обработки ответа

Теперь мы импортируем Парсер ответов Amazon Textract библиотека для анализа и извлечения того, что нам нужно, из ответа Amazon Textract. Здесь есть две основные функции. Во-первых, мы извлечем данные формы (пары ключ-значение) из раздела заголовка документа. Во-вторых, мы проанализируем таблицу и ячейки, чтобы создать файл csv, содержащий табличные данные. В этой записной книжке мы будем использовать API синхронизации Amazon Textract для извлечения документов, АнализДокумент. Это принимает файлы изображений (png или jpeg) в качестве входных данных.

client = boto3.client( service_name='textract', region_name= 'us-east-1', endpoint_url='https://textract.us-east-1.amazonaws.com',
) with open(documentName, 'rb') as file: img_test = file.read() bytes_test = bytearray(img_test) print('Image loaded', documentName) # process using image bytes
response = client.analyze_document(Document={'Bytes': bytes_test}, FeatureTypes=['TABLES','FORMS'])

Вы можете использовать библиотеку анализатора ответов Amazon Textract, чтобы легко анализировать JSON, возвращаемый Amazon Textract. Библиотека анализирует JSON и предоставляет специфические для языка программирования конструкции для работы с различными частями документа. Для получения более подробной информации, пожалуйста, обратитесь к Библиотека парсеров Amazon Textract

from trp import Document
# Parse JSON response from Textract
doc = Document(response) # Iterate over elements in the document
for page in doc.pages: # Print lines and words for line in page.lines: print("Line: {}".format(line.text)) for word in line.words: print("Word: {}".format(word.text)) # Print tables for table in page.tables: for r, row in enumerate(table.rows): for c, cell in enumerate(row.cells): print("Table[{}][{}] = {}".format(r, c, cell.text)) # Print fields for field in page.form.fields: print("Field: Key: {}, Value: {}".format(field.key.text, field.value.text))

Теперь, когда у нас есть необходимое содержимое изображения документа, давайте создадим CSV-файл для его хранения, а также будем использовать его для настройки человеческого цикла Amazon A2I для просмотра и модификации по мере необходимости.

# Lets get the form data into a csv file
with open('test_handwritten_form.csv', 'w', newline='') as csvfile: formwriter = csv.writer(csvfile, delimiter=',', quoting=csv.QUOTE_MINIMAL) for field in page.form.fields: formwriter.writerow([field.key.text+" "+field.value.text]) # Lets get the table data into a csv file
with open('test_handwritten_tab.csv', 'w', newline='') as csvfile: tabwriter = csv.writer(csvfile, delimiter=',') for r, row in enumerate(table.rows): csvrow = [] for c, cell in enumerate(row.cells): if cell.text: csvrow.append(cell.text.rstrip()) #csvrow += '{}'.format(cell.text.rstrip())+"," tabwriter.writerow(csvrow) 

Кроме того, если вы хотите изменить эту записную книжку для использования файла PDF или для пакетной обработки документов, используйте API StartDocumentAnalysis. StartDocumentAnalysis возвращает идентификатор вакансии (JobId), который вы используете для получения результатов операции. По завершении анализа текста Amazon Textract публикует статус завершения в теме Amazon Simple Notification Service (Amazon SNS), указанной вами в NotificationChannel. Чтобы получить результаты операции анализа текста, сначала убедитесь, что значение статуса, опубликованное в теме Amazon SNS, УСПЕШНО. Если да, звоните GetDocumentAnalysis, и передайте идентификатор задания (JobId) от первоначального вызова до StartDocumentAnalysis.

Проверка и анализ ответа Amazon Textract

Теперь мы загружаем элементы строк формы в Pandas DataFrame и очищаем его, чтобы обеспечить наличие соответствующих столбцов и строк, которые нужны последующим приложениям. Затем мы отправляем его в Amazon A2I для проверки человеком.

Запустите следующую ячейку записной книжки, чтобы проверить и проанализировать данные «ключ-значение» из ответа Amazon Textract:

# Load the csv file contents into a dataframe, strip out extra spaces, use comma as delimiter
df_form = pd.read_csv('test_handwritten_form.csv', header=None, quoting=csv.QUOTE_MINIMAL, sep=',')
# Rename column
df_form = df_form.rename(columns={df_form.columns[0]: 'FormHeader'})
# display the dataframe
df_form

На следующем снимке экрана показан наш результат.

Запустите следующую ячейку записной книжки, чтобы проверить и проанализировать табличные данные из ответа Amazon Textract:

# Load the csv file contents into a dataframe, strip out extra spaces, use comma as delimiter
df_tab = pd.read_csv('test_handwritten_tab.csv', header=1, quoting=csv.QUOTE_MINIMAL, sep=',')
# display the dataframe
df_tab.head()

На следующем снимке экрана показан наш результат.

На следующем снимке экрана показан наш результат.

Мы видим, что Amazon Textract обнаружил как печатный, так и рукописный контент из табличных данных.

Настройка человеческого цикла Amazon A2I

Amazon A2I поддерживает два встроенных типа задач: Извлечение пар "ключ-значение" в Amazon Textract и Модерация изображений Amazon RekognitionИ настраиваемый тип задачи которые вы можете использовать для интеграции цикла анализа, выполняемого человеком, в любой рабочий процесс машинного обучения. Вы можете использовать настраиваемый тип задачи для интеграции Amazon A2I с другими сервисами AWS, такими как Amazon Comprehend, Amazon транскрибироватькачества Amazon Translate, а также ваши собственные рабочие процессы машинного обучения. Чтобы узнать больше, см. Сценарии и примеры использования Amazon A2I.

В этом разделе мы покажем, как использовать настраиваемый тип задачи Amazon A2I для интеграции с таблицами Amazon Textract и парами «ключ-значение» через пошаговая тетрадь для оценок обнаружения с низким уровнем достоверности из ответов Amazon Textract. Он включает в себя следующие шаги:

  1. Создайте пользовательский интерфейс задач.
  2. Создайте определение рабочего процесса.
  3. Отправляйте прогнозы в человеческие петли Amazon A2I.
  4. Войдите на рабочий портал и комментируйте или проверяйте результаты Amazon Textract.

Создание пользовательского интерфейса задачи

Вы можете создать пользовательский интерфейс задачи для своих работников, создав шаблон рабочего задания. Шаблон задачи работника - это HTML-файл, который вы используете для отображения входных данных и инструкций, которые помогут работникам выполнить вашу задачу. Если вы создаете рабочий процесс проверки человеком для настраиваемого типа задачи, вы должны создать настраиваемый шаблон задачи рабочего с помощью HTML-кода. Для получения дополнительной информации см. Создать настраиваемый шаблон задачи рабочего.

Для этого поста мы создали пользовательский HTML-шаблон пользовательского интерфейса для отображения таблиц Amazon Textract и пар ключ-значение в записной книжке. Вы можете найти шаблон таблицы-keyvalue-sample.liquid.html в нашем репозитории GitHub и настройте его для вашего конкретного случая использования документа.

Этот шаблон используется всякий раз, когда требуется человеческий цикл. У нас есть более 70 встроенных пользовательских интерфейсов, доступных на GitHub. При желании вы можете создать это определение рабочего процесса на Amazon A2I консоль, Для получения инструкций см. Создайте рабочий процесс проверки человеком.

После создания этого настраиваемого шаблона с помощью HTML необходимо использовать этот шаблон для создания пользовательского интерфейса неавтоматизированной задачи Amazon A2I Имя ресурса Amazon (ARN). Этот ARN имеет следующий формат: arn:aws:sagemaker:<aws-регион>:номер учетной записи aws>:human-task-uя/Имя Шаблона>. Этот ARN связан с ресурсом шаблона рабочей задачи, который вы можете использовать в одном или нескольких рабочих процессах проверки людьми (определениях потоков). Создание ARN пользовательского интерфейса для неавтоматизированной задачи с использованием шаблона задачи исполнителя с помощью CreateHumanTaskUI Работа API, запустив следующую ячейку записной книжки:

def create_task_ui(): ''' Creates a Human Task UI resource. Returns: struct: HumanTaskUiArn ''' response = sagemaker_client.create_human_task_ui( HumanTaskUiName=taskUIName, UiTemplate={'Content': template}) return response
# Create task UI
humanTaskUiResponse = create_task_ui()
humanTaskUiArn = humanTaskUiResponse['HumanTaskUiArn']
print(humanTaskUiArn)

Предыдущий код дает вам ARN в качестве вывода, который мы используем при настройке определений потока на следующем шаге:

arn:aws:sagemaker:us-east-1:<aws-account-nr>:human-task-ui/ui-hw-invoice-2021-02-10-16-27-23

Создание определения рабочего процесса

В этом разделе мы создаем определение потока. Определения потока позволяют нам указать следующее:

  • Рабочая сила, на которую отправляются ваши задачи
  • Инструкции, которые получает ваш персонал (шаблон задачи работника)
  • Где хранятся ваши выходные данные

Для этого поста мы используем API в следующем коде:

create_workflow_definition_response = sagemaker_client.create_flow_definition( FlowDefinitionName= flowDefinitionName, RoleArn= role, HumanLoopConfig= { "WorkteamArn": WORKTEAM_ARN, "HumanTaskUiArn": humanTaskUiArn, "TaskCount": 1, "TaskDescription": "Review the table contents and correct values as indicated", "TaskTitle": "Employment History Review" }, OutputConfig={ "S3OutputPath" : OUTPUT_PATH } )
flowDefinitionArn = create_workflow_definition_response['FlowDefinitionArn'] # let's save this ARN for future use

При желании вы можете создать это определение рабочего процесса на Amazon A2I консоль, Для получения инструкций см. Создайте рабочий процесс проверки человеком.

Отправка прогнозов в человеческие петли Amazon A2I

Мы создаем список элементов из Pandas DataFrame, где у нас сохраняется вывод Amazon Textract. Запустите следующую ячейку записной книжки, чтобы создать список элементов, которые нужно отправить на проверку:

NUM_TO_REVIEW = len(df_tab) # number of line items to review
dfstart = df_tab['Start Date'].to_list()
dfend = df_tab['End Date'].to_list()
dfemp = df_tab['Employer Name'].to_list()
dfpos = df_tab['Position Held'].to_list()
dfres = df_tab['Reason for leaving'].to_list()
item_list = [{'row': "{}".format(x), 'startdate': dfstart[x], 'enddate': dfend[x], 'empname': dfemp[x], 'posheld': dfpos[x], 'resleave': dfres[x]} for x in range(NUM_TO_REVIEW)]
item_list

Вы получаете вывод всех строк и столбцов, полученных от Amazon Textract:

[{'row': '0', 'startdate': '1/15/2009 ', 'enddate': '6/30/2011 ', 'empname': 'Any Company ', 'posheld': 'Assistant baker ', 'resleave': 'relocated '}, {'row': '1', 'startdate': '7/1/2011 ', 'enddate': '8/10/2013 ', 'empname': 'Example Corp. ', 'posheld': 'Baker ', 'resleave': 'better opp. '}, {'row': '2', 'startdate': '8/15/2013 ', 'enddate': 'Present ', 'empname': 'AnyCompany ', 'posheld': 'head baker ', 'resleave': 'N/A current '}]

Запустите следующую ячейку записной книжки, чтобы получить список пар ключ-значение:

dforighdr = df_form['FormHeader'].to_list()
hdr_list = [{'hdrrow': "{}".format(x), 'orighdr': dforighdr[x]} for x in range(len(df_form))]
hdr_list

Выполните следующий код, чтобы создать ответ JSON для цикла Amazon A2I, объединив ключ-значение и список таблиц из предыдущих ячеек:

ip_content = {"Header": hdr_list, 'Pairs': item_list, 'image1': s3_img_url }

Запустите человеческий цикл, запустив следующую ячейку записной книжки:

# Activate human loops
import json
humanLoopName = str(uuid.uuid4()) start_loop_response = a2i.start_human_loop( HumanLoopName=humanLoopName, FlowDefinitionArn=flowDefinitionArn, HumanLoopInput={ "InputContent": json.dumps(ip_content) } )

Проверьте статус человеческого цикла с помощью следующего кода:

completed_human_loops = []
resp = a2i.describe_human_loop(HumanLoopName=humanLoopName)
print(f'HumanLoop Name: {humanLoopName}')
print(f'HumanLoop Status: {resp["HumanLoopStatus"]}')
print(f'HumanLoop Output Destination: {resp["HumanLoopOutput"]}')
print('n') if resp["HumanLoopStatus"] == "Completed": completed_human_loops.append(resp)

Вы получите следующий вывод, который показывает состояние цикла и целевого сегмента S3:

HumanLoop Name: f69bb14e-3acd-4301-81c0-e272b3c77df0
HumanLoop Status: InProgress
HumanLoop Output Destination: {'OutputS3Uri': 's3://sagemaker-us-east-1-<aws-account-nr>/textract-a2i-handwritten/a2i-results/fd-hw-forms-2021-01-11-16-54-31/2021/01/11/16/58/13/f69bb14e-3acd-4301-81c0-e272b3c77df0/output.json'}

Аннотирование результатов через рабочий портал

Выполните шаги в записной книжке, чтобы проверить состояние петли человека. Вы можете использовать сопровождающий Блокнот SageMaker Jupyter чтобы следовать инструкциям в этом сообщении.

  1. Запустите следующую ячейку записной книжки, чтобы получить ссылку для входа на портал частной рабочей силы:
    workteamName = WORKTEAM_ARN[WORKTEAM_ARN.rfind('/') + 1:]
    print("Navigate to the private worker portal and do the tasks. Make sure you've invited yourself to your workteam!")
    print('https://' + sagemaker_client.describe_workteam(WorkteamName=workteamName)['Workteam']['SubDomain'])

  1. Выберите ссылку для входа на портал частного работника.
  2. Выберите работу проверки человеком.
  3. Выберите Начать работать.

Выберите Начать работу.

Вы будете перенаправлены на консоль Amazon A2I, где найдете исходный документ, вашу пару «ключ-значение», текстовые ответы, обнаруженные Amazon Textract, и ответы вашей таблицы.

Выберите Начать работу.

Прокрутите вниз, чтобы найти форму исправления для пар ключ-значение и текста, где вы можете проверить результаты и сравнить ответ Amazon Textract с исходным документом. Вы также найдете пользовательский интерфейс для изменения рукописного и печатного табличного содержимого.

Вы можете изменить каждую ячейку на основе исходного ответа изображения, повторно ввести правильные значения и отправить свой ответ. Когда вы отправляете свои ответы, рабочий процесс маркировки завершается.

Оценка результатов

Когда работа над маркировкой завершена, ваши результаты должны быть доступны в пути вывода S3, указанном в определении рабочего процесса проверки человеком. Человеческие ответы возвращаются и сохраняются в файле JSON. Запустите ячейку записной книжки, чтобы получить результаты из Amazon S3:

import re
import pprint pp = pprint.PrettyPrinter(indent=4) for resp in completed_human_loops: splitted_string = re.split('s3://' + 'a2i-experiments' + '/', resp['HumanLoopOutput']['OutputS3Uri']) output_bucket_key = splitted_string[1] response = s3.get_object(Bucket='a2i-experiments', Key=output_bucket_key) content = response["Body"].read() json_output = json.loads(content) pp.pprint(json_output) print('n')

В следующем коде показан фрагмент выходного JSON-файла аннотации Amazon A2I:

{ 'flowDefinitionArn': 'arn:aws:sagemaker:us-east-1:<aws-account-nr>:flow-definition/fd-hw-invoice-2021-02-22-23-07-53', 'humanAnswers': [ { 'acceptanceTime': '2021-02-22T23:08:38.875Z', 'answerContent': { 'TrueHdr3': 'Full Name: Jane ' 'Smith', 'predicted1': 'relocated', 'predicted2': 'better opp.', 'predicted3': 'N/A, current', 'predictedhdr1': 'Phone ' 'Number: ' '555-0100', 'predictedhdr2': 'Mailing ' 'Address: ' 'same as ' 'above', 'predictedhdr3': 'Full Name: ' 'Jane Doe', 'predictedhdr4': 'Home ' 'Address: ' '123 Any ' 'Street, Any ' 'Town. USA', 'rating1': { 'agree': True, 'disagree': False}, 'rating2': { 'agree': True, 'disagree': False}, 'rating3': { 'agree': False, 'disagree': True}, 'rating4': { 'agree': True, 'disagree': False}, 'ratingline1': { 'agree': True, 'disagree': False}, 'ratingline2': { 'agree': True, 'disagree': False}, 'ratingline3': { 'agree': True, 'disagree': False}}

Сохранение аннотированных результатов Amazon A2I в DynamoDB

Теперь мы сохраняем форму с обновленным содержимым в таблице DynamoDB, чтобы последующие приложения могли ее использовать. Чтобы автоматизировать процесс, просто настройте AWS Lambda запускать с DynamoDB для автоматического извлечения и отправки информации конечным точкам API или приложениям. Для получения дополнительной информации см. Потоки DynamoDB и триггеры AWS Lambda.

Чтобы сохранить результаты, выполните следующие действия:

  1. Получите человеческие ответы на пары "ключ-значение" и текст в DataFrame, запуск следующей ячейки ноутбука:
    #updated array values to be strings for dataframe assignment
    for i in json_output['humanAnswers']: x = i['answerContent'] for j in range(0, len(df_form)): df_form.at[j, 'TrueHeader'] = str(x.get('TrueHdr'+str(j+1))) df_form.at[j, 'Comments'] = str(x.get('Comments'+str(j+1))) df_form = df_form.where(df_form.notnull(), None)
    

  1. Получите проверенные человеком ответы на табличные данные в DataFrame, запустив следующую ячейку:
    #updated array values to be strings for dataframe assignment
    for i in json_output['humanAnswers']: x = i['answerContent'] for j in range(0, len(df_tab)): df_tab.at[j, 'TrueStartDate'] = str(x.get('TrueStartDate'+str(j+1))) df_tab.at[j, 'TrueEndDate'] = str(x.get('TrueEndDate'+str(j+1))) df_tab.at[j, 'TrueEmpName'] = str(x.get('TrueEmpName'+str(j+1))) df_tab.at[j, 'TruePosHeld'] = str(x.get('TruePosHeld'+str(j+1))) df_tab.at[j, 'TrueResLeave'] = str(x.get('TrueResLeave'+str(j+1))) df_tab.at[j, 'ChangeComments'] = str(x.get('Change Reason'+str(j+1))) df_tab = df_tab.where(df_tab.notnull(), None)You will get below output:

  1. Объедините DataFrames в один DataFrame для сохранения в таблице DynamoDB:
    # Join both the dataframes to prep for insert into DynamoDB
    df_doc = df_form.join(df_tab, how='outer')
    df_doc = df_doc.where(df_doc.notnull(), None)
    df_doc

Создание таблицы DynamoDB

Создайте свою таблицу DynamoDB с помощью следующего кода:

# Get the service resource.
dynamodb = boto3.resource('dynamodb')
tablename = "emp_history-"+str(uuid.uuid4()) # Create the DynamoDB table.
table = dynamodb.create_table(
TableName=tablename,
KeySchema=[
{ 'AttributeName': 'line_nr', 'KeyType': 'HASH'
}
],
AttributeDefinitions=[
{ 'AttributeName': 'line_nr', 'AttributeType': 'N'
},
],
ProvisionedThroughput={ 'ReadCapacityUnits': 5, 'WriteCapacityUnits': 5
}
)
# Wait until the table exists.
table.meta.client.get_waiter('table_exists').wait(TableName=tablename)
# Print out some data about the table.
print("Table successfully created. Item count is: " + str(table.item_count))

Вы получите следующий вывод:

Table successfully created. Item count is: 0

Загрузка содержимого DataFrame в таблицу DynamoDB

Загрузите содержимое DataFrame в таблицу DynamoDB с помощью следующего кода:

Примечание: При добавлении содержимого из нескольких документов в таблицу DynamoDB убедитесь, что вы добавили номер документа в качестве атрибута, чтобы различать документы. В приведенном ниже примере мы просто используем индекс как line_nr, потому что мы работаем с одним документом.

for idx, row in df_doc.iterrows(): table.put_item( Item={ 'line_nr': idx, 'orig_hdr': str(row['FormHeader']) , 'true_hdr': str(row['TrueHeader']), 'comments': str(row['Comments']), 'start_date': str(row['Start Date ']), 'end_date': str(row['End Date ']), 'emp_name': str(row['Employer Name ']), 'position_held': str(row['Position Held ']), 'reason_for_leaving': str(row['Reason for leaving']), 'true_start_date': str(row['TrueStartDate']), 'true_end_date': str(row['TrueEndDate']), 'true_emp_name': str(row['TrueEmpName']), 'true_position_held': str(row['TruePosHeld']), 'true_reason_for_leaving': str(row['TrueResLeave']), 'change_comments': str(row['ChangeComments']) } )

Чтобы проверить, были ли обновлены элементы, запустите следующий код, чтобы получить значение таблицы DynamoDB:

response = table.get_item(
Key={ 'line_nr': 2
}
)
item = response['Item']
print(item)

Кроме того, вы можете проверить таблицу в консоли DynamoDB, как показано на следующем снимке экрана.

Заключение

Этот пост продемонстрировал, насколько просто использовать сервисы на уровне AI в стеке AWS AI / ML, такие как Amazon Textract и Amazon A2I, для чтения и обработки табличных данных из рукописных форм и сохранения их в таблице DynamoDB для последующих приложений. использовать. Вы также можете отправить данные расширенной формы из Amazon A2I в корзину S3 для использования вашими аналитическими приложениями AWS.

Видеопрезентации, образцы записных книжек Jupyter или дополнительную информацию о вариантах использования, таких как обработка документов, модерация контента, анализ настроений, перевод текста и другие, см. В разделе Ресурсы искусственного интеллекта Amazon. Если этот пост поможет вам или вдохновит на решение проблемы, мы будем рады услышать об этом! Код этого решения доступен на Репо GitHub для использования и расширения. Пожертвования всегда приветствуются!


Об авторах

Прем Ранга является архитектором корпоративных решений из Атланты, штат Джорджия. Он является частью сообщества технических специалистов по машинному обучению и любит работать с клиентами на их пути к машинному обучению и искусственному интеллекту. Прем увлечен робототехникой, занимается исследованием автономных транспортных средств, а также построил контролируемые Alexa Beer Pours в Хьюстоне и других местах.

Мона Мона является специалистом по архитектуре решений AI / ML из Арлингтона, штат Вирджиния. Она работает с командой World Wide Public Sector и помогает клиентам широко внедрять машинное обучение. Она увлечена областями объяснимости NLP и ML в AI / ML.

Шрихарша М.С. является специалистом-архитектором решений AI / ML в группе специалистов по стратегическим вопросам Amazon Web Services. Он работает со стратегическими клиентами AWS, которые используют AI / ML для решения сложных бизнес-задач. Он предоставляет техническое руководство и советы по проектированию для масштабного внедрения приложений AI / ML. Его опыт охватывает архитектуру приложений, большие данные, аналитику и машинное обучение.

Источник: https://aws.amazon.com/blogs/machine-learning/process-documents-contain-handwritten-tabular-content-using-amazon-textract-and-amazon-a2i/

Spot_img

Последняя разведка

Spot_img