View a markdown version of this page

Verwenden Sie den Workflow „Kreditanalyse“ - 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 „Kreditanalyse“

Gehen Sie wie folgt vor, um Text in mehrseitigen Kreditdokumenten mithilfe des Workflows „Kreditanalyse“ zu erkennen oder zu analysieren:

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

  2. Abonnieren Sie die Warteschlange und das Thema.

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

  4. Beginnen Sie mit der Verarbeitung des Dokuments. StartLendingAnalysisVorgang aufrufen.

  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 wurde. 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-Warteschlange mit unzustellbaren Briefen hinzuzufügen.

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

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

  7. Wenn Sie mit der Verarbeitung von Dokumenten fertig sind, stellen Sie sicher, dass Sie das Amazon SNS-Thema und die Amazon SQS-Warteschlange löschen. Wenn Sie zusätzliche Dokumente verarbeiten müssen, können Sie das Amazon SNS-Thema und die Amazon 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-Zugriff auf Amazon SNS. Weitere Informationen finden Sie unter Konfiguration von Amazon Textract für asynchrone Abläufe. Um dieses Verfahren abzuschließen, benötigen Sie eine mehrseitige Dokumentdatei im PDF-Format. Sie können die Schritte 3 bis 6 in den Konfigurationsanweisungen überspringen, da der Beispielcode das Amazon SNS-Thema und die Amazon 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-Bucket hoch (Sie können auch einseitige Dokumente in den Formaten JPEG, PNG, TIFF oder PDF verarbeiten). Eine Anleitung finden Sie unter Objekte in Amazon S3 hochladen im Amazon Simple Storage Service-Benutzerhandbuch.

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

    • Ersetzen Sie den Wert von roleArn durch den IAM-Rollen-ARN, den Sie unter Giving Amazon Textract Access to Your Amazon SNS Topic gespeichert haben.

    • Ersetzen Sie die Werte von bucket und document durch den Bucket- und Dokumentdateinamen, den Sie zuvor im weiteren 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 StartLendingAnalysis Vorgang aufrufen, ersetzen Sie den Wert von bucket-name durch den Namen Ihres S3-Buckets und FileName ersetzen Sie ihn durch den Namen der Datei, die Sie in Schritt 2 angegeben haben. Geben Sie die Region Ihres Buckets an, indem Sie sie region-name durch den Namen Ihrer Region ersetzen. Beachten Sie, dass das CLI-Beispiel SQS nicht verwendet.

    • Wenn Sie die GetLendingAnalysis Operation oder die GetLendingAnalysisSummary Operation aufrufen, jobId ersetzen Sie sie durch das jobId zurückgegebene 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. Nach Abschluss des Vorgangs 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 der Ausleihdokumente 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 Ausleihdokumente 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()