제퍼넷 로고

Amazon Textract 및 Amazon A2I를 사용하여 손으로 쓴 표 형식 콘텐츠가 포함 된 문서 처리

시간

점점 더 많은 회사가 클라우드로 이동하고 머신 러닝(ML) 또는 기술을 사용하여 비즈니스 프로세스를 개선하는 디지털 시대에도 여전히 수많은 회사에서 문서, 특히 손으로 쓰는 문서 처리에 대해 문의하고 있습니다. 우리는 인쇄된 정보 외에 손글씨가 포함된 표와 양식이 있는 고용 양식, 타임 카드, 재정 지원서를 봅니다. 문제를 복잡하게 하자면, 각 문서는 다양한 형식이 될 수 있으며 주어진 산업 내의 각 기관은 여러 형식을 가질 수 있습니다. 조직은 표, 양식 및 표 형식 데이터를 비롯한 다양한 형식의 복잡한 문서를 처리할 수 있는 간단한 솔루션을 찾고 있습니다.

특히 인쇄된 텍스트와 손으로 쓴 텍스트가 결합된 경우 이러한 문서에서 데이터를 추출하면 오류가 발생하기 쉽고 시간이 많이 걸리고 비용이 많이 들고 확장할 수 없습니다. 테이블과 양식에 포함된 텍스트는 추출 및 처리 복잡성을 가중시킵니다. 아마존 텍사스 양식 및 테이블에서 데이터를 식별, 이해 및 추출하기 위해 단순한 OCR(광학 문자 인식)을 넘어 인쇄된 텍스트, 필기 및 기타 데이터를 스캔한 문서에서 자동으로 추출하는 AWS AI 서비스입니다.

데이터가 추출된 후 문서 관리 워크플로의 후처리 단계에는 항목을 검토하고 다운스트림 처리 응용 프로그램에서 요구하는 대로 변경하는 작업이 포함됩니다. 아마존 증강 AI (Amazon A2I)를 사용하면 ML 워크플로에 인적 검토를 쉽게 구성할 수 있습니다. 이를 통해 결과가 지정된 신뢰도 임계값 아래로 떨어지는 경우 ML 파이프라인을 검토하고 검토 및 감사 워크플로를 설정하고 필요에 따라 예측 결과를 수정하는 수동 단계를 자동으로 수행할 수 있습니다.

이 게시물에서는 Amazon Textract 필기 기능을 사용하여 문서에서 표 형식 데이터를 추출하고 다음을 사용하여 사람이 검토 루프를 만드는 방법을 보여줍니다. Amazon A2I 사용자 지정 작업 유형 예측이 매우 정확한지 확인합니다. 우리는 결과를 저장합니다 아마존 DynamoDB, 모든 규모에서 한 자리 밀리초 성능을 제공하여 데이터를 다운스트림 처리에 사용할 수 있도록 하는 키-값 및 문서 데이터베이스입니다.

를 사용하여 다음 단계를 안내합니다. 주피터 노트:

  1. Amazon Textract를 사용하여 문서에서 표 형식 데이터를 검색하고 응답을 검사합니다.
  2. Amazon A2I 휴먼 루프를 설정하여 Amazon Textract 응답을 검토하고 수정합니다.
  3. Amazon A2I 응답을 평가하고 다운스트림 처리를 위해 DynamoDB에 저장합니다.

사전 조건

시작하기 전에 다음을 사용하여 연습 Jupyter 노트북을 구성해 보겠습니다. AWS 클라우드 포메이션 템플릿을 만든 다음 사용자 지정 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 파일을 만듭니다. 이 노트북에서는 문서 추출을 위해 Amazon Textract의 Sync API를 사용합니다. 문서 분석. 이것은 이미지 파일(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 응답 구문 분석기 라이브러리를 사용하여 Amazon Textract에서 반환된 JSON을 쉽게 구문 분석할 수 있습니다. 라이브러리는 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 작업 식별자(JobId) 작업 결과를 가져오는 데 사용합니다. 텍스트 분석이 완료되면 Amazon Textract는 사용자가 지정한 Amazon Simple Notification Service(Amazon SNS) 주제에 완료 상태를 게시합니다. NotificationChannel. 텍스트 분석 작업의 결과를 얻으려면 먼저 Amazon SNS 주제에 게시된 상태 값이 SUCCEEDED인지 확인합니다. 그렇다면 전화 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 이미지 조정및 사용자 정의 작업 유형 사람의 검토 루프를 모든 ML 워크플로에 통합하는 데 사용할 수 있습니다. 사용자 지정 작업 유형을 사용하여 Amazon A2I를 다음과 같은 다른 AWS 서비스와 통합할 수 있습니다. 아마존 이해, 아마존 전사아마존 번역, 사용자 지정 ML 워크플로뿐 아니라 자세한 내용은 다음을 참조하십시오. Amazon A2I를 사용한 사용 사례 및 예.

이 섹션에서는 Amazon A2I 사용자 지정 작업 유형을 사용하여 Amazon Textract 테이블 및 키-값 쌍과 통합하는 방법을 보여줍니다. 연습 노트북 Amazon Textract 응답의 낮은 신뢰도 감지 점수 여기에는 다음 단계가 포함됩니다.

  1. 휴먼 타스크 UI를 작성하십시오.
  2. 워크플로 정의를 만듭니다.
  3. Amazon A2I 휴먼 루프에 예측을 보냅니다.
  4. 작업자 포털에 로그인하고 Amazon Textract 결과에 주석을 달거나 확인합니다.

휴먼 타스크 UI 작성

다음을 생성하여 작업자를 위한 작업 UI를 생성할 수 있습니다. 작업자 작업 템플릿. 작업자 작업 템플릿은 작업자가 작업을 완료하는 데 도움이 되는 입력 데이터와 지침을 표시하는 데 사용하는 HTML 파일입니다. 사용자 지정 작업 유형에 대한 인적 검토 워크플로를 만드는 경우 HTML 코드를 사용하여 사용자 지정 작업자 작업 템플릿을 만들어야 합니다. 자세한 내용은 사용자 지정 작업자 작업 템플릿 생성.

이 게시물에서는 노트북에서 Amazon Textract 테이블과 키-값 쌍을 렌더링하는 사용자 지정 UI HTML 템플릿을 만들었습니다. 템플릿을 찾을 수 있습니다 table-keyvalue-sample.liquid.html GitHub 리포지토리에서 특정 문서 사용 사례에 맞게 사용자 지정합니다.

이 템플릿은 휴먼 루프가 필요할 때마다 사용됩니다. 70개 이상의 사전 빌드된 UI를 사용할 수 있습니다. GitHub의. 선택적으로 이 워크플로 정의를 생성할 수 있습니다. 아마존 A2I 콘솔. 지침은 인적 검토 워크 플로 만들기.

HTML을 사용하여 이 사용자 지정 템플릿을 생성한 후 이 템플릿을 사용하여 Amazon A2I 휴먼 태스크 UI Amazon 리소스 이름(ARN)을 생성해야 합니다. 이 ARN의 형식은 다음과 같습니다. arn:aws:sagemaker:<AWS 지역>:AWS 계정 번호>:human-task-u나/템플릿 이름>. 이 ARN은 하나 이상의 인적 검토 워크플로(흐름 정의)에서 사용할 수 있는 작업자 작업 템플릿 리소스와 연결됩니다. 다음을 사용하여 작업자 작업 템플릿을 사용하여 휴먼 작업 UI 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

필요에 따라이 워크 플로 정의를 아마존 A2I 콘솔. 지침은 인적 검토 워크 플로 만들기.

Amazon A2I 휴먼 루프로 예측 보내기

Amazon Textract 출력이 저장된 Pandas DataFrame에서 항목 목록을 생성합니다. 다음 노트북 셀을 실행하여 검토를 위해 보낼 항목 목록을 만듭니다.

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

다음 코드를 실행하여 이전 셀의 키-값과 테이블 목록을 결합하여 Amazon A2I 루프에 대한 JSON 응답을 생성합니다.

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 Textract에서 감지된 텍스트 응답, 테이블 응답을 볼 수 있는 Amazon A2I 콘솔로 리디렉션됩니다.

작업 시작을 선택합니다.

아래로 스크롤하여 결과를 확인하고 Amazon Textract 응답을 원본 문서와 비교할 수 있는 키-값 쌍 및 텍스트에 대한 수정 양식을 찾습니다. 또한 표 형식의 손으로 쓴 내용과 인쇄된 내용을 수정하기 위한 UI를 찾을 수 있습니다.

원본 이미지 응답을 기반으로 각 셀을 수정하고 올바른 값을 다시 입력하고 응답을 제출할 수 있습니다. 응답을 제출하면 레이블 지정 워크플로가 완료됩니다.

결과 평가

레이블 지정 작업이 완료되면 인적 검토 워크플로 정의에 지정된 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')

다음 코드는 Amazon A2I 주석 출력 JSON 파일의 스니펫을 보여줍니다.

{ '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}}

DynamoDB에 Amazon A2I 주석 결과 저장

이제 다운스트림 애플리케이션에서 사용할 수 있도록 업데이트된 콘텐츠가 있는 양식을 DynamoDB 테이블에 저장합니다. 프로세스를 자동화하려면 다음을 설정하기만 하면 됩니다. AWS 람다 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. DataFrame을 하나의 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 콘솔에서 테이블을 확인할 수 있습니다.

결론

이 게시물은 Amazon Textract 및 Amazon A2I와 같은 AWS AI/ML 스택의 AI 계층에서 서비스를 사용하여 필기 형식에서 테이블 형식 데이터를 읽고 처리하고 다운스트림 애플리케이션을 위해 DynamoDB 테이블에 저장하는 것이 얼마나 쉬운지를 보여주었습니다. 사용. 또한 Amazon A2I에서 AWS 분석 애플리케이션에서 사용할 S3 버킷으로 증강 양식 데이터를 보낼 수 있습니다.

비디오 프레젠테이션, 샘플 Jupyter 노트북 또는 문서 처리, 컨텐츠 조정, 감정 분석, 텍스트 번역 등과 같은 사용 사례에 대한 자세한 내용은 다음을 참조하십시오. 아마존 증강 AI 리소스. 이 게시물이 문제 해결에 도움이 되거나 영감을 준다면 그 소식을 듣고 싶습니다! 이 솔루션의 코드는 GitHub 레포 사용하고 확장 할 수 있습니다. 기부는 언제나 환영합니다!


저자에 관하여

프렘 랑가 조지 아주 애틀랜타에 본사를 둔 엔터프라이즈 솔루션 아키텍트입니다. 그는 기계 학습 기술 분야 커뮤니티의 일원이며 ML 및 AI 여정에서 고객과 협력하는 것을 좋아합니다. Prem은 로봇 공학에 열정적이며 자율 주행 차량 연구원이며 휴스턴 및 기타 지역에 Alexa 제어 맥주 Pours를 구축했습니다.

모나 모나 버지니아 주 알링턴에 기반을 둔 AI / ML 전문가 솔루션 아키텍트입니다. 그녀는 World Wide Public Sector 팀과 협력하여 고객이 대규모로 기계 학습을 채택하도록 돕습니다. 그녀는 AI / ML의 NLP 및 ML 설명 가능성 영역에 열정적입니다.

Sriharsha MS Amazon Web Services의 Strategic Specialist 팀의 AI/ML 전문 솔루션 설계자입니다. 그는 AI/ML을 활용하여 복잡한 비즈니스 문제를 해결하는 전략적 AWS 고객과 협력합니다. 그는 AI/ML 애플리케이션을 대규모로 구현하기 위한 기술 지침 및 설계 조언을 제공합니다. 그의 전문 지식은 애플리케이션 아키텍처, 빅 데이터, 분석 및 기계 학습에 걸쳐 있습니다.

출처: https://aws.amazon.com/blogs/machine-learning/process-documents- included-handwritten-table-content-using-amazon-textract-and-amazon-a2i/

spot_img

최신 인텔리전스

spot_img

우리와 함께 채팅

안녕하세요! 어떻게 도와 드릴까요?