View a markdown version of this page

Umgang mit Verbindungsfehlern - 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.

Umgang mit Verbindungsfehlern

Ein Amazon Textract Textract-Vorgang kann fehlschlagen, wenn Sie die maximale Anzahl von Transaktionen pro Sekunde (TPS) überschreiten, wodurch der Service Ihre Anwendung drosselt, oder wenn Ihre Verbindung unterbrochen wird. Wenn Sie beispielsweise innerhalb kurzer Zeit zu viele Aufrufe von Amazon Textract Textract-Vorgängen tätigen, werden Ihre Anrufe gedrosselt und es wird ein ProvisionedThroughputExceededException Fehler in der Betriebsantwort gesendet. Informationen zu Amazon Textract TPS-Kontingenten finden Sie unter Amazon Textract Textract-Kontingente. Um ein Limit zu ändern, können Sie in der Service Quotas Konsole auf die Option Amazon Textract zugreifen.

Sie können Drosselungen und Verbindungsabbrüche verwalten, indem Sie den Vorgang automatisch wiederholen. Sie können die Anzahl der Wiederholungen angeben, indem Sie den Config Parameter angeben, wenn Sie den Amazon Textract Textract-Client erstellen. Wir empfehlen eine Anzahl von 5 Wiederholungen. Das AWS SDK wiederholt einen Vorgang so oft wie angegeben, bevor er fehlschlägt und eine Ausnahme auslöst. Weitere Informationen finden Sie unter Wiederholversuche bei Fehlern und exponentielles Backoff in AWS.

Anmerkung

Automatische Wiederholungen funktionieren sowohl für synchrone als auch für asynchrone Operationen. Bevor Sie automatische Wiederholungen angeben, stellen Sie sicher, dass Sie über die neueste Version des AWS-SDK verfügen. Weitere Informationen finden Sie unter Schritt 2: Richten Sie das ein AWS CLI und AWS SDKs.

Das folgende Beispiel zeigt, wie Sie Amazon Textract Textract-Vorgänge automatisch wiederholen, wenn Sie mehrere Dokumente verarbeiten.

Voraussetzungen
Um Vorgänge automatisch zu wiederholen
  1. Laden Sie mehrere Dokumentbilder in Ihren S3-Bucket hoch, um das synchrone Beispiel auszuführen. Laden Sie ein mehrseitiges Dokument in Ihren S3-Bucket hoch und führen Sie StartDocumentTextDetection es aus, um das asynchrone Beispiel auszuführen.

    Weitere Anleitungen finden Sie unter Upload eines Objekts in Amazon S3 im Benutzerhandbuch für Amazon Simple Storage Service.

  2. Die folgenden Beispiele zeigen, wie Sie den Config Parameter verwenden, um einen Vorgang automatisch zu wiederholen. Das synchrone Beispiel ruft die DetectDocumentText Operation auf, während das asynchrone Beispiel die Operation aufruft. GetDocumentTextDetection

    Sync Example

    Verwenden Sie die folgenden Beispiele, um den DetectDocumentText Vorgang für die Dokumente in Ihrem Amazon S3 S3-Bucket aufzurufen. Ändern Sie in main den Wert von in bucket Ihren S3-Bucket. Ändern Sie den Wert von in documents die Namen der Dokumentbilder, die Sie in Schritt 2 hochgeladen haben.

    import boto3 from botocore.client import Config # Documents def process_multiple_documents(bucket, documents): config = Config(retries = dict(max_attempts = 5)) # Amazon Textract client textract = boto3.client('textract', config=config) for documentName in documents: print("\nProcessing: {}\n==========================================".format(documentName)) # Call Amazon Textract response = textract.detect_document_text( Document={ 'S3Object': { 'Bucket': bucket, 'Name': documentName } }) # Print detected text for item in response["Blocks"]: if item["BlockType"] == "LINE": print ('\033[94m' + item["Text"] + '\033[0m') def main(): bucket = "" documents = ["document-image-1.png", "document-image-2.png", "document-image-3.png", "document-image-4.png", "document-image-5.png" ] process_multiple_documents(bucket, documents) if __name__ == "__main__": main()
    Async Example

    Verwenden Sie die folgenden Beispiele zum Aufrufen der GetDocumentTextDetection-Operation. Es wird davon ausgegangen, dass Sie die Dokumente in Ihrem Amazon S3 S3-Bucket bereits aufgerufen StartDocumentTextDetection und eine erhalten habenJobId. Ändern Sie in main den Wert für Ihren S3-Bucket und den Wert für den ArnroleArn, der Ihrer Textract-Rolle zugewiesen ist. bucket Außerdem müssen Sie den Wert von document in den Namen Ihres mehrseitigen Dokuments in Ihrem Amazon S3 S3-Bucket ändern. Ersetzen Sie abschließend den Wert von region_name durch den Namen Ihrer Region und geben Sie der GetResults Funktion den Namen Ihrer jobId Region an.

    import boto3 from botocore.client import Config class DocumentProcessor: jobId = '' region_name = '' roleArn = '' bucket = '' document = '' sqsQueueUrl = '' snsTopicArn = '' processType = '' def __init__(self, role, bucket, document, region): self.roleArn = role self.bucket = bucket self.document = document self.region_name = region self.config = Config(retries = dict(max_attempts = 5)) self.textract = boto3.client('textract', region_name=self.region_name, config=self.config) self.sqs = boto3.client('sqs') self.sns = boto3.client('sns') # Display information about a block def DisplayBlockInfo(self, block): print("Block Id: " + block['Id']) print("Type: " + block['BlockType']) if 'EntityTypes' in block: print('EntityTypes: {}'.format(block['EntityTypes'])) if 'Text' in block: print("Text: " + block['Text']) if block['BlockType'] != 'PAGE': print("Confidence: " + "{:.2f}".format(block['Confidence']) + "%") print('Page: {}'.format(block['Page'])) if block['BlockType'] == 'CELL': print('Cell Information') print('\tColumn: {} '.format(block['ColumnIndex'])) print('\tRow: {}'.format(block['RowIndex'])) print('\tColumn span: {} '.format(block['ColumnSpan'])) print('\tRow span: {}'.format(block['RowSpan'])) if 'Relationships' in block: print('\tRelationships: {}'.format(block['Relationships'])) print('Geometry') print('\tBounding Box: {}'.format(block['Geometry']['BoundingBox'])) print('\tPolygon: {}'.format(block['Geometry']['Polygon'])) if block['BlockType'] == 'SELECTION_ELEMENT': print(' Selection element detected: ', end='') if block['SelectionStatus'] == 'SELECTED': print('Selected') else: print('Not selected') def GetResults(self, jobId): maxResults = 1000 paginationToken = None finished = False while finished == False: response = None if paginationToken == None: response = self.textract.get_document_text_detection(JobId=jobId, MaxResults=maxResults) else: response = self.textract.get_document_text_detection(JobId=jobId, MaxResults=maxResults, NextToken=paginationToken) blocks = response['Blocks'] print('Detected Document Text') print('Pages: {}'.format(response['DocumentMetadata']['Pages'])) # Display block information for block in blocks: self.DisplayBlockInfo(block) print() print() if 'NextToken' in response: paginationToken = response['NextToken'] else: finished = True def main(): roleArn = 'role-arn' bucket = 'bucket-name' document = 'document-name' region_name = 'region-name' analyzer = DocumentProcessor(roleArn, bucket, document, region_name) analyzer.GetResults("job-id") if __name__ == "__main__": main()