View a markdown version of this page

Utilisation du flux de travail d'analyse des prêts - Amazon Textract

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Utilisation du flux de travail d'analyse des prêts

Pour détecter du texte dans des documents de prêt de plusieurs pages ou les analyser, à l'aide du flux de travail Analyze Lending, procédez comme suit :

  1. Créez la rubrique Amazon SNS et la file d'attente Amazon SQS.

  2. Inscrivez le sujet dans la file d'attente.

  3. Autorisez le sujet à envoyer des messages à la file d'attente.

  4. Commencez à traiter le document. StartLendingAnalysisOpération d'appel.

  5. Obtenir le statut d’achèvement à partir de la file d’attente Amazon SQS. L'exemple de code suit l'identifiant de tâche (JobId) renvoyé par l'Startopération. L'exemple de code obtient uniquement les résultats pour les identificateurs de tâche correspondants qui sont lus à partir du statut d'achèvement. Ceci est important si d'autres applications utilisent la même file d'attente et le même sujet. Pour des raisons de simplicité, l'exemple de code supprime les tâches qui ne correspondent pas. Envisagez d'ajouter les tâches supprimées à une file d'attente de lettres mortes Amazon SQS pour une enquête plus approfondie.

    Les résultats de l' StartLendingAnalysis opération peuvent être envoyés à un compartiment Amazon S3 de votre choix à l'aide de OutputConfig cette fonctionnalité. Si vous utilisez cette fonctionnalité, vous devrez peut-être effectuer une configuration supplémentaire de votre rôle d'utilisateur et de service. Pour savoir comment autoriser Amazon Textract à envoyer des documents chiffrés vers votre compartiment Amazon S3, consultez. Autorisations pour la configuration des sorties

  6. Obtenez et affichez les résultats du traitement en appelant l'GetLendingAnalysisopération ou l'GetLendingAnalysisSummaryopération.

  7. Une fois que vous avez terminé de traiter les documents, veillez à supprimer la rubrique Amazon SNS et la file d'attente Amazon SQS. Si vous devez traiter des documents supplémentaires, vous pouvez laisser la rubrique Amazon SNS et la file d'attente Amazon SQS telles quelles et les réutiliser pour les autres documents.

Exécution d'une analyse asynchrone des prêts

L'exemple de code de cette procédure est fourni pour Python et le AWS CLI. Avant de commencer, installez le AWS SDK approprié. Pour de plus amples informations, veuillez consulter Étape 2 : configurer le AWS CLI and AWS Kits SDK.

  1. Configurez l'accès utilisateur à Amazon Textract et configurez l'accès Amazon Textract à Amazon SNS. Pour plus d'informations, consultez Configuration d'Amazon Textract pour les opérations asynchrones. Pour effectuer cette procédure, vous avez besoin d'un fichier de plusieurs pages au format PDF. Vous pouvez ignorer les étapes 3 à 6 des instructions de configuration, car l'exemple de code crée et configure la rubrique Amazon SNS et la file d'attente Amazon SQS. Si vous suivez l'exemple de CLI, vous n'avez pas besoin de configurer une file d'attente SQS.

  2. Téléchargez un document de plusieurs pages au format PDF ou TIFF dans votre compartiment Amazon S3 (vous pouvez également traiter des documents d'une seule page aux formats JPEG, PNG, TIFF ou PDF). Pour obtenir des instructions, consultez la section Chargement d'objets dans Amazon S3 dans le guide de l'utilisateur d'Amazon Simple Storage Service.

  3. Utilisez le SDK AWS pour Python (Boto3) ou le code de la CLI AWS suivant pour analyser le texte d'un document de prêt de plusieurs pages. Dans la fonction principale :

    • Remplacez la valeur de roleArn par l'ARN du rôle IAM que vous avez enregistré dans Giving Amazon Textract Access to Your Amazon SNS topic.

    • Remplacez les valeurs de bucket et document par le nom du compartiment et du fichier de document que vous avez précédemment spécifiés à l'étape 2 de la procédure.

    • Remplacez la valeur du paramètre type d'entrée de la ProcessDocument fonction par le type de traitement que vous souhaitez utiliser. Utilisez-le par exemple ProcessType.DETECTION pour détecter du texte ou ProcessType.ANALYSIS pour analyser du texte.

    • Pour l'exemple Python, remplacez la valeur de region_name par la région dans laquelle votre client opère.

    Pour le prochain exemple de code de la CLI AWS, procédez comme suit :

    • Lorsque vous appelez l'StartLendingAnalysisopération, remplacez la valeur de bucket-name par le nom de votre compartiment S3 et FileName par le nom du fichier que vous avez spécifié à l'étape 2. Spécifiez la région de votre compartiment en la region-name remplaçant par le nom de votre région. Notez que l'exemple de CLI n'utilise pas SQS.

    • Lorsque vous appelez l'GetLendingAnalysisopération ou l'GetLendingAnalysisSummaryopération, remplacez jobId par le jobId renvoyé par StartLendingAnalysis. Spécifiez la région de votre compartiment en la region-name remplaçant par le nom de votre région.

  4. Exécutez le code du SDK ou de la AWS CLI de votre choix.

    L’opération peut prendre un certain temps pour s’exécuter. Une fois l'opération terminée, une liste de blocs pour le texte détecté ou analysé s'affiche à l'aide des exemples suivants :

    AWS CLI

    Pour démarrer l'analyse du document de prêt, utilisez la commande CLI suivante. Si vous souhaitez voir des documents divisés, utilisez l'output-configargument, sinon vous pouvez le supprimer :

    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'

    Pour obtenir les résultats de l'analyse du document de prêt, utilisez la commande CLI suivante. L'max-resultsargument est facultatif, et si vous ne souhaitez pas limiter le nombre de résultats renvoyés, vous pouvez le supprimer :

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

    Pour obtenir un résumé des résultats, procédez comme suit :

    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()