

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 gedrosselten Anrufen und gelöschten
<a name="handling-errors"></a>

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 in kurzer Zeit zu viele Anrufe Amazon Textract Textract-Operationen tätigen, drosselt es Ihre Anrufe und sendet eine`ProvisionedThroughputExceededException`Fehler in der Betriebsantwort. Hinweise zu Amazon Textract TPS-Kontingenten finden Sie unter[Amazon Textract Kontingente](https://docs.aws.amazon.com/general/latest/gr/textract.html)aus. 

Sie können Drosselung und abgebrochene Verbindungen verwalten, indem Sie den Vorgang automatisch wiederholen. Sie können die Anzahl der Wiederholungen angeben, indem Sie die`Config`-Parameter, wenn Sie den Amazon Textract Textract-Client erstellen. Wir empfehlen eine Wiederholungsanzahl von 5. DieAWSDas SDK versucht eine Operation die angegebene Anzahl von Malen erneut, bevor es fehlschlägt und eine Ausnahme ausgelöst wird. Weitere Informationen finden Sie unter [Wiederholversuche bei Fehlern und exponentielles Backoff in AWS](https://docs.aws.amazon.com/general/latest/gr/api-retries.html).

**Anmerkung**  
Automatische Wiederholungen funktionieren sowohl für synchrone als auch für asynchrone Operationen. Stellen Sie vor dem Angeben von automatischen Wiederholungen sicher, dass Sie über die neueste Version des AWS SDKs verfügen. Weitere Informationen finden Sie unter [Schritt 2: Einrichten derAWS CLIundAWS-SDKs](setup-awscli-sdk.md) .

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

**Voraussetzungen**
+ Wenn Sie dies noch nicht getan haben:

  1. Erstellen oder aktualisieren Sie einen IAM-Benutzer mit`AmazonTextractFullAccess`und`AmazonS3ReadOnlyAccess`-Berechtigungen Weitere Informationen finden Sie unter [Schritt 1: Einrichten eines AWS-Kontos und Erstellen eines IAM-Benutzers](setting-up.md#setting-up-iam) .

  1. Installieren und konfigurieren Sie die AWS CLI- und AWS-SDKs. Weitere Informationen finden Sie unter [Schritt 2: Einrichten derAWS CLIundAWS-SDKs](setup-awscli-sdk.md) .

**So wiederholen Sie Operationen automatisch**

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 es`StartDocumentTextDetection`darauf, um das Asynchrone Beispiel auszuführen.

   Detaillierte Anweisungen finden Sie unter[Hochladen von Objekten in Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/UploadingObjectsintoAmazonS3.html)im*Amazon Simple Storage Service Benutzerhandbuch*aus.

1. Die folgenden Beispiele veranschaulichen, wie Sie die`Config`-Parameter, um eine Operation automatisch erneut zu versuchen. Das synchrone Beispiel ruft den`DetectDocumentText`-Operation, während das Asynchrone Beispiel die`GetDocumentTextDetection`verwenden. 

------
#### [ Sync Example ]

   Verwenden Sie die folgenden Beispiele, um die`DetectDocumentText`-Betrieb auf den Dokumenten in Ihrem Amazon S3 S3-Bucket. In :`main`So ändern Sie den -Wert`bucket`auf Ihrem S3-Bucket hoch (es sollte ein oder mehrere Objekte wie beispielsweise Bäume, Häuser, Boote, etc. enthalten). Ändern Sie den -Wert`documents`auf 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 bereits angerufen haben`StartDocumentTextDetection`auf den Dokumenten in Ihrem Amazon S3 S3-Bucket erhalten und eine`JobId`aus. In :`main`So ändern Sie den -Wert`bucket`auf Ihrem S3-Bucket und dem -Wert`roleArn`zu dem Arn, der Ihrer Textrakt-Rolle zugewiesen wurde. Sie müssen auch den -Wert ändern`document`auf den Namen Ihres mehrseitigen Dokuments in Ihrem Amazon S3 S3-Bucket hoch. Ersetzen Sie schließlich den -Wert`region_name`Geben Sie den Namen Ihrer Region an und geben Sie die`GetResults`-Funktion mit dem Namen Ihres`jobId`aus.

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

------