AWS Синтаксическая ошибка get_document_analysis анализа форм Textract! Как мне это написать? - PullRequest
0 голосов
/ 14 июля 2020
• 1000 : Значение, которое я нашел в блоке KEY_VALUE_SET, как раз то, что мне нужно. Однако в моем коде, когда я использую LINES в качестве типа блока, он работает, но файл csv действительно беспорядочный. Когда я использую KEY_VALUE_SET в качестве типа своего блока, он даже не работает, и ошибка не показывает ничего полезного.

Мой код:

import boto3
import os

def getJobResults(jobId):

    pages = []

    textract = boto3.client('textract')
    response = textract.get_document_analysis(JobId=jobId)
    
    pages.append(response)

    nextToken = None
    if('NextToken' in response):
        nextToken = response['NextToken']

    while(nextToken):

        response = textract.get_document_analysis(JobId=jobId, NextToken=nextToken)

        pages.append(response)
        nextToken = None
        if('NextToken' in response):
            nextToken = response['NextToken']

    return pages

def lambda_handler(event, context):
    notificationMessage = json.loads(json.dumps(event))['Records'][0]['Sns']['Message']
    
    pdfTextExtractionStatus = json.loads(notificationMessage)['Status']
    pdfTextExtractionJobTag = json.loads(notificationMessage)['JobTag']
    pdfTextExtractionJobId = json.loads(notificationMessage)['JobId']
    pdfTextExtractionDocumentLocation = json.loads(notificationMessage)['DocumentLocation']
    
    pdfTextExtractionS3ObjectName = json.loads(json.dumps(pdfTextExtractionDocumentLocation))['S3ObjectName']
    pdfTextExtractionS3Bucket = json.loads(json.dumps(pdfTextExtractionDocumentLocation))['S3Bucket']
    
    print(pdfTextExtractionJobTag + ' : ' + pdfTextExtractionStatus)
    
    pdfText = ''
    
    if(pdfTextExtractionStatus == 'SUCCEEDED'):
        response = getJobResults(pdfTextExtractionJobId)
        
        for resultPage in response:
            for item in resultPage["Blocks"]:
                if item["BlockType"] == "KEY_VALUE_SET":
                    pdfText += item["Text"] + '\n'
                    
        s3 = boto3.client('s3')
        
        outputTextFileName = os.path.splitext(pdfTextExtractionS3ObjectName)[0] + '.csv'
        s3.put_object(Body=pdfText, Bucket=pdfTextExtractionS3Bucket, Key=outputTextFileName)

Код ошибки Я получаю

  "errorMessage": "'Records'",
  "errorType": "KeyError",
  "stackTrace": [
    "  File \"/var/task/lambda_function.py\", line 30, in lambda_handler\n    notificationMessage = json.loads(json.dumps(event))['Records'][0]['Sns']['Message']\n"
  ]
}

Из ссылки на документацию в начале кажется, что мне нужно как-то добавить

EntityTypes': [ 'KEY'|'VALUE'],

, если я использую тип блока KEY_VALUE_SET, но я не уверен, как добавить это в код. Может ли кто-нибудь посоветовать? Спасибо!

...