View a markdown version of this page

Verwenden Sie den Workflow „Kreditvergabe analysieren“ - Amazon Textract

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verwenden Sie den Workflow „Kreditvergabe analysieren“

Gehen Sie wie folgt vor, um Text in mehrseitigen Kreditdokumenten zu erkennen oder mit dem Workflow „Kreditvergabe analysieren“ zu analysieren:

  1. Erstellen Sie das Amazon SNS SNS-Thema und die Amazon SQS SQS-Warteschlange.

  2. Abonnieren Sie die Warteschlange zum Thema.

  3. Erteilen Sie dem Thema die Erlaubnis, Nachrichten an die Warteschlange zu senden.

  4. Beginnen Sie mit der Bearbeitung des Dokuments. Rufen Sie StartLendingAnalysis den Vorgang auf.

  5. Rufen Sie den Status der Erledigung aus der Amazon-SQS-Warteschlange ab. Der Beispielcode verfolgt die Job-ID (JobId), die von der Start Operation zurückgegeben wird. Der Beispielcode ruft nur die Ergebnisse für übereinstimmende Job-IDs ab, die aus dem Abschlussstatus gelesen werden. Dies ist wichtig, wenn andere Anwendungen dieselbe Warteschlange und dasselbe Thema verwenden. Der Einfachheit halber löscht der Beispielcode Jobs, die nicht übereinstimmen. Erwägen Sie, die gelöschten Jobs zur weiteren Untersuchung einer Amazon SQS SQS-Warteschlange für unzustellbare Briefe hinzuzufügen.

    Die Ergebnisse des StartLendingAnalysis Vorgangs können mithilfe der OutputConfig Funktion an einen Amazon S3 S3-Bucket Ihrer Wahl gesendet werden. Wenn Sie diese Funktion verwenden, müssen Sie möglicherweise eine zusätzliche Konfiguration Ihrer Benutzer- und Servicerolle vornehmen. Informationen darüber, wie Amazon Textract verschlüsselte Dokumente an Ihren Amazon S3 S3-Bucket senden kann, finden Sie unterBerechtigungen für die Ausgabekonfiguration.

  6. Rufen Sie die Verarbeitungsergebnisse ab und zeigen Sie sie an, indem Sie den GetLendingAnalysis Vorgang oder den GetLendingAnalysisSummary Vorgang aufrufen.

  7. Wenn Sie mit der Bearbeitung der Dokumente fertig sind, stellen Sie sicher, dass Sie das Amazon SNS SNS-Thema und die Amazon SQS SQS-Warteschlange löschen. Wenn Sie weitere Dokumente verarbeiten müssen, können Sie das Amazon SNS SNS-Thema und die Amazon SQS SQS-Warteschlange unverändert lassen und sie für die anderen Dokumente wiederverwenden.

Durchführung einer asynchronen Kreditanalyse

Der Beispielcode für dieses Verfahren wird für Python und die bereitgestellt AWS CLI. Bevor Sie beginnen, installieren Sie das entsprechende AWS SDK. Weitere Informationen finden Sie unter Schritt 2: Richten Sie das ein AWS CLI und AWS SDKs.

  1. Konfigurieren Sie den Benutzerzugriff auf Amazon Textract und konfigurieren Sie den Amazon Textract Textract-Zugriff auf Amazon SNS. Weitere Informationen finden Sie unter Amazon Textract für asynchrone Operationen konfigurieren. Um dieses Verfahren abzuschließen, benötigen Sie eine mehrseitige Dokumentdatei im PDF-Format. Sie können die Schritte 3 bis 6 der Konfigurationsanweisungen überspringen, da der Beispielcode das Amazon SNS-Thema und die Amazon SQS SQS-Warteschlange erstellt und konfiguriert. Wenn Sie das CLI-Beispiel abschließen, müssen Sie keine SQS-Warteschlange einrichten.

  2. Laden Sie eine mehrseitige Dokumentdatei im PDF- oder TIFF-Format in Ihren Amazon S3 S3-Bucket hoch (Sie können auch einseitige Dokumente in den Formaten JPEG, PNG, TIFF oder PDF verarbeiten). Anweisungen finden Sie unter Hochladen von Objekten in Amazon S3 im Amazon Simple Storage Service-Benutzerhandbuch.

  3. Verwenden Sie das folgende AWS-SDK SDK for Python (Boto3) oder den AWS-CLI-Code, um Text in einem mehrseitigen Ausleihdokument zu analysieren. In der Hauptfunktion:

    • Ersetzen Sie den Wert von roleArn durch den ARN der IAM-Rolle, den Sie in Amazon Textract Access to Your Amazon SNS Topic gespeichert haben.

    • Ersetzen Sie die Werte von bucket und document durch den Bucket und den Namen der Dokumentdatei, die Sie zuvor im vorherigen Schritt 2 angegeben haben.

    • Ersetzen Sie den Wert des type Eingabeparameters der ProcessDocument Funktion durch den Verarbeitungstyp, den Sie verwenden möchten. Verwenden Sie es beispielsweise, ProcessType.DETECTION um Text zu erkennen oder ProcessType.ANALYSIS um Text zu analysieren.

    • Ersetzen Sie für das Python-Beispiel den Wert von region_name durch die Region, in der Ihr Client tätig ist.

    Gehen Sie für den kommenden AWS-CLI-Beispielcode wie folgt vor:

    • Wenn Sie den StartLendingAnalysisVorgang aufrufen, ersetzen Sie den Wert von bucket-name durch den Namen Ihres S3-Buckets und FileName durch den Namen der Datei, die Sie in Schritt 2 angegeben haben. Geben Sie die Region Ihres Buckets an, indem Sie region-name ihn durch den Namen Ihrer Region ersetzen. Beachten Sie, dass das CLI-Beispiel SQS nicht verwendet.

    • Wenn Sie den GetLendingAnalysisVorgang oder den GetLendingAnalysisSummaryVorgang aufrufen, jobId ersetzen Sie ihn durch den jobId zurückgegebenen Wert von StartLendingAnalysis. Geben Sie die Region Ihres Buckets an, indem Sie sie region-name durch den Namen Ihrer Region ersetzen.

  4. Führen Sie den Code für das von Ihnen gewählte SDK oder die AWS CLI aus.

    Die Operation kann einige Zeit in Anspruch nehmen. Wenn der Vorgang abgeschlossen ist, wird eine Liste von Blöcken für erkannten oder analysierten Text anhand der folgenden Beispiele angezeigt:

    AWS CLI

    Verwenden Sie den folgenden CLI-Befehl, um die Analyse von Kreditdokumenten zu starten. Wenn Sie geteilte Dokumente sehen möchten, verwenden Sie das output-config Argument, andernfalls können Sie es entfernen:

    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'

    Verwenden Sie den folgenden CLI-Befehl, um die Ergebnisse der Analyse der Kreditdokumente abzurufen. Das max-results Argument ist optional. Wenn Sie die Anzahl der zurückgegebenen Ergebnisse nicht einschränken möchten, können Sie es entfernen:

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

    Um eine Zusammenfassung der Ergebnisse abzurufen:

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