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 multipages ou les analyser à l'aide du flux de travail Analyser le prêt, procédez comme suit :

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

  2. Abonnez-vous à la file d'attente du sujet.

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

  4. Commencez à traiter le document. StartLendingAnalysisFonctionnement des appels.

  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 des identificateurs de tâche correspondants qui sont lus à partir de l'état d'achèvement. Ceci est important si d'autres applications utilisent la même file d'attente et la même rubrique. Par souci 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 Amazon SQS pour une enquête plus approfondie.

    Les résultats de l' StartLendingAnalysis opération peuvent être envoyés vers 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, consultezAutorisations 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 fini 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.

Réalisation d'une analyse des prêts asynchrones

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 plus d’informations, consultez Étape 2 : Configurez 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 complétez l'exemple CLI, vous n'avez pas besoin de configurer une file d'attente SQS.

  2. Téléchargez un fichier 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 AWS CLI 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 Donner à Amazon Textract l'accès à votre rubrique Amazon SNS.

    • 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 suivante.

    • Remplacez la valeur du paramètre type d'entrée de la ProcessDocument fonction par le type de traitement que vous souhaitez utiliser. Par exemple, ProcessType.DETECTION utilisez-le 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 l'interface de ligne de commande 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 remplacez-la 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 CLI n'utilise pas SQS.

    • Lorsque vous appelez l'GetLendingAnalysisopération ou l'GetLendingAnalysisSummaryopération, remplacez-la jobId par la valeur jobId renvoyée 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 correspondant au SDK ou à l' AWS interface de ligne de commande de votre choix.

    L’opération peut prendre un certain temps pour s’exécuter. Une fois l'opération terminée, la liste des blocs du 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 voulez voir des documents fractionné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 :

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