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 nei documenti di prestito composti da più pagine o analizzarli, 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, l'argomento.

  3. Autorizza l'argomento a 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 di lavoro (JobId) restituito dall'Startoperazione. Il codice di esempio ottiene i risultati solo per la corrispondenza degli identificatori di lavoro che vengono 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 di 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 terminata l'elaborazione dei documenti, assicurati di eliminare l'argomento Amazon SNS e la coda Amazon SQS. Se hai bisogno di elaborare documenti aggiuntivi, puoi lasciare invariati l'argomento di Amazon SNS e la coda di Amazon SQS e riutilizzarli per gli altri documenti.

Esecuzione di un'analisi asincrona dei prestiti

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

  1. Configura l'accesso utente ad Amazon Textract e configura l'accesso 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 multipagina in formato PDF. Puoi saltare i passaggi da 3 a 6 delle istruzioni di configurazione, poiché 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 multipagina 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 Caricamento di oggetti in Amazon S3 nella Guida per l'utente di Amazon Simple Storage Service.

  3. Utilizza il seguente codice AWS SDK for Python (Boto3) o AWS CLI per analizzare il testo in un documento di prestito multipagina. Nella funzione principale:

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

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

    • Sostituite il valore del parametro di type input della ProcessDocument funzione con il tipo di elaborazione che desiderate utilizzare. Ad esempio, utilizzare ProcessType.DETECTION per rilevare il testo o utilizzare 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 client.

    Per il prossimo codice di esempio AWS CLI, procedi come segue:

    • Quando richiami 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. Specificate la regione del bucket sostituendola region-name con il nome della regione. Tieni presente che l'esempio CLI non utilizza SQS.

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

  4. Esegui il codice per l'SDK o la AWS CLI 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 avviare l'analisi del documento di prestito, utilizzare il seguente comando CLI. Se vuoi vedere i 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 del documento di prestito, utilizzare 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()