AWS запуск анализа документа с использованием текстового контракта не работает - PullRequest
0 голосов
/ 14 июля 2020

Я выполняю проект для своей школы, где я должен провести анализ документа в форме с использованием текстового контракта и запустить этот вывод в A2I, где алгоритм определит, одобрена ли форма, отклонена или необходима проверка. Эта лямбда-функция textract должна запускаться после загрузки документа в S3. Однако, следуя этой документации, я получаю синтаксические ошибки; https://docs.aws.amazon.com/textract/latest/dg/API_StartDocumentAnalysis.html

Мой код:

import urllib.parse
import boto3

print('Loading function')

##Clients
s3 = boto3.client('s3')
textract = boto3.client('textract')

def analyzedata(bucketName,documentKey):
    print("Loading")
    AnalyzedData= textract.StartDocumentAnalysis("DocumentLocation": { 
      "S3Object": { 
         "Bucket": "bucketName",
         "Name": "documentKey",
      })
    detectedText = ''

    # Print detected text
    for item in AnalyzedData['Blocks']:
        if item['BlockType'] == 'LINE':
            detectedText += item['Text'] + '\n'
            
    return detectedText
      
def writeTextractToS3File(textractData, bucketName, createdS3Document):
    print('Loading writeTextractToS3File')
    generateFilePath = os.path.splitext(createdS3Document)[0] + '.csv'
    s3.put_object(Body=textractData, Bucket=bucketName, Key=generateFilePath)
    print('Generated ' + generateFilePath)





def lambda_handler(event, context):
    #print("Received event: " + json.dumps(event, indent=2))

    # Get the object from the event and show its content type
    bucket = event['Records'][0]['s3']['bucket']['name']
    key = urllib.parse.unquote_plus(event['Records'][0]['s3']['object']['key'], encoding='utf-8')
    try:
        detectedText = analyzedata(bucket, key)
        writeTextractToS3File(detectedText, bucket, key)
        
        return 'Processing Done!'
        
        
        
    except Exception as e:
        print(e)
        print('Error getting object {} from bucket {}. Make sure they exist and your bucket is in the same region as this function.'.format(key, bucket))
        raise e

Код еще не завершен, но я уже получаю синтаксические ошибки:

  "errorMessage": "Syntax error in module 'lambda_function': invalid syntax (lambda_function.py, line 13)",
  "errorType": "Runtime.UserCodeSyntaxError",
  "stackTrace": [
    "  File \"/var/task/lambda_function.py\" Line 13\n        AnalyzedData= textract.Start_Document_Analysis(\"DocumentLocation\": { \n"
  ]
}

Ответы [ 3 ]

1 голос
/ 14 июля 2020

Согласно boto3 docs , ваш синтаксис должен быть больше похож на:

AnalyzedData= textract.start_document_analysis(DocumentLocation={ 
  "S3Object": { 
     "Bucket": "bucketName",
     "Name": "documentKey",
  })

Также обратите внимание, что параметр FeatureTypes указан как обязательный.

0 голосов
/ 14 июля 2020

Думаю, вам не хватает начального символа фигурной скобки для этого.

AnalyzedData= textract.StartDocumentAnalysis("DocumentLocation": { # missing { in this line
  "S3Object": { 
     "Bucket": "bucketName",
     "Name": "documentKey",
  })
0 голосов
/ 14 июля 2020

Вам следует попробовать установить awscli

pip install awscli

или pip3, если это работает лучше

Затем импортируйте и попробуйте запустить код.

...