View a markdown version of this page

Utilizzo del flusso di lavoro Analyze Lending - Amazon Textract

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Utilizzo del flusso di lavoro Analyze Lending

Per rilevare il testo o analizzare documenti di prestito composti da più pagine, utilizzando il flusso di lavoro Analyze Lending, effettuate le seguenti operazioni:

  1. Crea l'argomento Amazon SNS e la coda Amazon SQS.

  2. Sottoscrivi la coda all'argomento.

  3. Concedi all'argomento il permesso di inviare messaggi alla coda.

  4. Inizia l'elaborazione del documento. StartLendingAnalysisOperazione di chiamata.

  5. Ottenimento dello stato di completamento dalla coda Amazon SQS. Il codice di esempio tiene traccia dell'identificatore del lavoro (JobId) restituito dall'Startoperazione. Il codice di esempio ottiene solo i risultati della corrispondenza con gli identificatori del lavoro letti a partire dallo stato di completamento. Questo è importante se altre applicazioni utilizzano la stessa coda e lo stesso argomento. Per semplicità, il codice di esempio elimina i lavori che non corrispondono. Valuta la possibilità di aggiungere i lavori eliminati a una coda di lettere morte di Amazon SQS per ulteriori indagini.

    I risultati dell' StartLendingAnalysis operazione possono essere inviati a un bucket Amazon S3 a tua scelta utilizzando la funzionalità. OutputConfig Se utilizzi questa funzionalità, potresti dover eseguire alcune configurazioni aggiuntive del tuo ruolo utente e di servizio. Per informazioni su come consentire ad Amazon Textract di inviare documenti crittografati al tuo bucket Amazon S3, consulta. Autorizzazioni per la configurazione dell'output

  6. Ottieni e visualizza i risultati dell'elaborazione chiamando l'GetLendingAnalysisoperazione o l'operazione. GetLendingAnalysisSummary

  7. Una volta completata l'elaborazione dei documenti, assicurati di eliminare l'argomento Amazon SNS e la coda Amazon SQS. Se devi elaborare documenti aggiuntivi, puoi lasciare l'argomento Amazon SNS e la coda Amazon SQS così come sono e riutilizzarli per gli altri documenti.

Esecuzione di un'analisi asincrona dei prestiti

Il codice di esempio per questa procedura è fornito per Python e per. AWS CLI Prima di iniziare, installate l' AWS SDK appropriato. Per ulteriori informazioni, consulta Passaggio 2: configura il AWS CLI and AWS SDK.

  1. Configura l'accesso degli utenti ad Amazon Textract e configura l'accesso di Amazon Textract ad Amazon SNS. Per ulteriori informazioni, consulta Configurazione di Amazon Textract per operazioni asincrone. Per completare questa procedura, è necessario un file di documento composto da più pagine in formato PDF. Puoi saltare i passaggi da 3 a 6 nelle istruzioni di configurazione, perché il codice di esempio crea e configura l'argomento Amazon SNS e la coda Amazon SQS. Se si completa l'esempio CLI, non è necessario configurare una coda SQS.

  2. Carica un file di documento composto da più pagine in formato PDF o TIFF nel tuo bucket Amazon S3 (puoi anche elaborare documenti a pagina singola nei formati JPEG, PNG, TIFF o PDF). Per istruzioni, consulta Uploading Objects in Amazon S3 nella Amazon Simple Storage Service User Guide.

  3. Usa il seguente codice AWS SDK for Python (Boto3) o AWS CLI per analizzare il testo in un documento di prestito composto da più pagine. Nella funzione principale:

    • Sostituisci il valore di roleArn con l'ARN del ruolo IAM che hai salvato in Giving Amazon Textract Access to Your Amazon SNS Topic.

    • Sostituisci i valori di bucket e document con il nome del file del bucket e del documento che hai specificato in precedenza nella Fase 2 precedente.

    • Sostituite il valore del parametro di type input della ProcessDocument funzione con il tipo di elaborazione che desiderate utilizzare. Ad esempio, utilizzalo ProcessType.DETECTION per rilevare il testo o utilizzalo ProcessType.ANALYSIS per analizzare il testo.

    • Per l'esempio di Python, sostituisci il valore di region_name con la regione in cui opera il tuo cliente.

    Per il prossimo codice di esempio dell'interfaccia a riga di comando di AWS, procedi come segue:

    • Quando chiami l'StartLendingAnalysisoperazione, sostituisci il valore di bucket-name con il nome del tuo bucket S3 e sostituiscilo FileName con il nome del file specificato nel passaggio 2. Specifica la regione del bucket sostituendola region-name con il nome della tua regione. Tieni presente che l'esempio CLI non utilizza SQS.

    • Quando si chiama l'GetLendingAnalysisoperazione o l'GetLendingAnalysisSummaryoperazione, sostituiscila jobId con la risposta jobId restituita da. StartLendingAnalysis Specifica la regione del bucket sostituendola region-name con il nome della tua regione.

  4. Esegui il codice per l'SDK o la CLI AWS che hai scelto.

    Il completamento dell'operazione potrebbe richiedere alcuni minuti. Al termine, viene visualizzato un elenco di blocchi per il testo rilevato o analizzato con i seguenti esempi:

    AWS CLI

    Per iniziare l'analisi del documento di prestito, usa il seguente comando CLI. Se vuoi vedere documenti divisi, usa l'output-configargomento, altrimenti puoi rimuoverlo:

    aws textract start-lending-analysis \ --document-location '{"S3Object":{"Bucket":"S3Bucket","Name":"FileName"}}' \ --output-config '{"S3Bucket": "S3Bucket", "S3Prefix": "S3Prefix"}' \ --kms-key-id '1234abcd-12ab-34cd-56ef-1234567890ab' \ --region 'region-name'

    Per ottenere i risultati dell'analisi dei documenti di prestito, usa il seguente comando CLI. L'max-resultsargomento è facoltativo e se non vuoi limitare il numero di risultati restituiti puoi rimuoverlo:

    aws textract get-lending-analysis \ --job-id 'jobId' \ --region 'us-west-2' \ --max-results 30

    Per recuperare un riepilogo dei risultati:

    aws textract get-lending-analysis-summary \ --job-id 'jobId' \ --region 'us-west-2'
    Python
    import boto3 import json import sys import time class DocumentProcessor: def __init__(self, role, bucket, document, region): self.roleArn = role self.bucket = bucket self.document = document self.region_name = region self.textract = boto3.client('textract', region_name=self.region_name) self.sqs = boto3.client('sqs') self.sns = boto3.client('sns') def ProcessDocument(self): jobFound = False response = self.textract.start_lending_analysis( DocumentLocation={'S3Object': {'Bucket': self.bucket, 'Name': self.document}}, NotificationChannel={'RoleArn': self.roleArn, 'SNSTopicArn': self.snsTopicArn}) print('Processing type: Analysis') print('Start Job Id: ' + response['JobId']) dotLine = 0 while jobFound == False: sqsResponse = self.sqs.receive_message(QueueUrl=self.sqsQueueUrl, MessageAttributeNames=['ALL'], MaxNumberOfMessages=10) if sqsResponse: if 'Messages' not in sqsResponse: if dotLine < 40: print('.', end='') dotLine = dotLine + 1 else: print() dotLine = 0 sys.stdout.flush() time.sleep(5) continue for message in sqsResponse['Messages']: notification = json.loads(message['Body']) textMessage = json.loads(notification['Message']) print(textMessage['JobId']) print(textMessage['Status']) if str(textMessage['JobId']) == response['JobId']: print('Matching Job Found:' + textMessage['JobId']) jobFound = True self.GetResults(textMessage['JobId']) self.GetSummary(textMessage['JobId']) self.sqs.delete_message(QueueUrl=self.sqsQueueUrl, ReceiptHandle=message['ReceiptHandle']) else: print("Job didn't match:" + str(textMessage['JobId']) + ' : ' + str(response['JobId'])) # Delete the unknown message. Consider sending to dead letter queue self.sqs.delete_message(QueueUrl=self.sqsQueueUrl, ReceiptHandle=message['ReceiptHandle']) print('Done!') def CreateTopicandQueue(self): millis = str(int(round(time.time() * 1000))) # Create SNS topic snsTopicName = "AmazonTextractTopic" + millis topicResponse = self.sns.create_topic(Name=snsTopicName) self.snsTopicArn = topicResponse['TopicArn'] # create SQS queue sqsQueueName = "AmazonTextractQueue" + millis self.sqs.create_queue(QueueName=sqsQueueName) self.sqsQueueUrl = self.sqs.get_queue_url(QueueName=sqsQueueName)['QueueUrl'] attribs = self.sqs.get_queue_attributes(QueueUrl=self.sqsQueueUrl, AttributeNames=['QueueArn'])['Attributes'] sqsQueueArn = attribs['QueueArn'] # Subscribe SQS queue to SNS topic self.sns.subscribe( TopicArn=self.snsTopicArn, Protocol='sqs', Endpoint=sqsQueueArn) # Authorize SNS to write SQS queue policy = """{{ "Version":"2012-10-17", "Statement":[ {{ "Sid":"MyPolicy", "Effect":"Allow", "Principal" : {{"AWS" : "*"}}, "Action":"sqs:*", "Resource": "{}", "Condition":{{ "ArnEquals":{{ "aws:SourceArn": "{}" }} }} }} ] }}""".format(sqsQueueArn, self.snsTopicArn) response = self.sqs.set_queue_attributes( QueueUrl=self.sqsQueueUrl, Attributes={ 'Policy': policy }) def DeleteTopicandQueue(self): self.sqs.delete_queue(QueueUrl=self.sqsQueueUrl) self.sns.delete_topic(TopicArn=self.snsTopicArn) # Display information about a block def DisplayExtractInfo(self, response): results = response['Results'] for page in results: print("Page Classification: {}".format(page["PageClassification"]["PageType"])) print("Page Number: {}".format(page["Page"])) for extract in page["Extractions"]: for fields, vals in extract['LendingDocument'].items(): for val in vals: print("Document Type: {}".format(val['Type'])) detections = val['ValueDetections'] for i in detections: print(i['Text']) print('Geometry') print('\tBounding Box: {}'.format(i['Geometry']['BoundingBox'])) print('\tPolygon: {}'.format(i['Geometry']['Polygon'])) def GetSummary(self, jobId): maxResults = 1000 response = self.textract.get_lending_analysis_summary(JobId=jobId, MaxResults=maxResults) doc_groups = response['DocumentGroups'] print("Summary info:") for group in doc_groups: print("Document type: " + group['Type']) split_docs = group['SplitDocuments'] for doc in split_docs: print(doc) for idx, page in doc.items(): print(str(idx) + " - " + str(page)) def GetResults(self, jobId): maxResults = 1000 paginationToken = None finished = False while finished == False: response = None if paginationToken == None: response = self.textract.get_lending_analysis(JobId=jobId, MaxResults=maxResults) else: response = self.textract.get_lending_analysis(JobId=jobId, MaxResults=maxResults, NextToken=paginationToken) print('Detected Document Text') print('Pages: {}'.format(response['DocumentMetadata']['Pages'])) self.DisplayExtractInfo(response) if 'NextToken' in response: paginationToken = response['NextToken'] else: finished = True def main(): roleArn = '' bucket = '' document = '' region_name = '' analyzer = DocumentProcessor(roleArn, bucket, document, region_name) analyzer.CreateTopicandQueue() analyzer.ProcessDocument() analyzer.DeleteTopicandQueue() if __name__ == "__main__": main()