Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Utilizzo del flusso di lavoro Analyze Lending
Per rilevare il testo nei documenti di prestito composti da più pagine o analizzarli, utilizzando il flusso di lavoro Analyze Lending, effettuate le seguenti operazioni:
-
Crea l'argomento Amazon SNS e la coda Amazon SQS.
-
Sottoscrivi la coda, l'argomento.
-
Autorizza l'argomento a inviare messaggi alla coda.
-
Inizia l'elaborazione del documento. StartLendingAnalysisOperazione di chiamata.
-
Ottenimento dello stato di completamento dalla coda Amazon SQS. Il codice di esempio tiene traccia dell'identificatore di lavoro (JobId) restituito dall'Startoperazione. Il codice di esempio ottiene i risultati solo per la corrispondenza degli identificatori di lavoro che vengono letti a partire dallo stato di completamento. Questo è importante se altre applicazioni utilizzano la stessa coda e lo stesso argomento. Per semplicità, il codice di esempio elimina i lavori che non corrispondono. Valuta la possibilità di aggiungere i lavori eliminati a una coda di lettere morte di Amazon SQS per ulteriori indagini.
I risultati dell' StartLendingAnalysis operazione possono essere inviati a un bucket Amazon S3 di tua scelta utilizzando la funzionalità. OutputConfig Se utilizzi questa funzionalità, potresti dover eseguire alcune configurazioni aggiuntive del tuo ruolo utente e di servizio. Per informazioni su come consentire ad Amazon Textract di inviare documenti crittografati al tuo bucket Amazon S3, consulta. Autorizzazioni per la configurazione dell'output
-
Ottieni e visualizza i risultati dell'elaborazione chiamando l'GetLendingAnalysisoperazione o l'operazione. GetLendingAnalysisSummary
-
Una volta terminata l'elaborazione dei documenti, assicurati di eliminare l'argomento Amazon SNS e la coda Amazon SQS. Se hai bisogno di elaborare documenti aggiuntivi, puoi lasciare invariati l'argomento di Amazon SNS e la coda di Amazon SQS e riutilizzarli per gli altri documenti.
Esecuzione di un'analisi asincrona dei prestiti
Il codice di esempio per questa procedura viene fornito per Python e per. AWS CLI Prima di iniziare, installa l' AWS SDK appropriato. Per ulteriori informazioni, consulta Passaggio 2: configura il AWS CLI and AWS SDK.
-
Configura l'accesso utente ad Amazon Textract e configura l'accesso Amazon Textract ad Amazon SNS. Per ulteriori informazioni, consulta Configurazione di Amazon Textract per operazioni asincrone. Per completare questa procedura, è necessario un file di documento multipagina in formato PDF. Puoi saltare i passaggi da 3 a 6 delle istruzioni di configurazione, poiché il codice di esempio crea e configura l'argomento Amazon SNS e la coda Amazon SQS. Se si completa l'esempio CLI, non è necessario configurare una coda SQS.
-
Carica un file di documento multipagina in formato PDF o TIFF nel tuo bucket Amazon S3 (puoi anche elaborare documenti a pagina singola nei formati JPEG, PNG, TIFF o PDF). Per istruzioni, consulta Caricamento di oggetti in Amazon S3 nella Guida per l'utente di Amazon Simple Storage Service.
-
Utilizza il seguente codice AWS SDK for Python (Boto3) o AWS CLI per analizzare il testo in un documento di prestito multipagina. Nella funzione principale:
-
Sostituisci il valore di roleArn con l'ARN del ruolo IAM che hai salvato nell'argomento Giving Amazon Textract Access to Your Amazon SNS.
-
Sostituisci i valori di bucket e document con il nome del bucket e del file del documento che hai specificato in precedenza nella fase 2 della procedura.
-
Sostituite il valore del parametro di type input della ProcessDocument funzione con il tipo di elaborazione che desiderate utilizzare. Ad esempio, utilizzare ProcessType.DETECTION per rilevare il testo o utilizzare ProcessType.ANALYSIS per analizzare il testo.
-
Per l'esempio di Python, sostituisci il valore di region_name con la regione in cui opera il tuo client.
Per il prossimo codice di esempio AWS CLI, procedi come segue:
-
Quando richiami l'StartLendingAnalysisoperazione, sostituisci il valore di bucket-name con il nome del tuo bucket S3 e sostituiscilo FileName con il nome del file specificato nel passaggio 2. Specificate la regione del bucket sostituendola region-name con il nome della regione. Tieni presente che l'esempio CLI non utilizza SQS.
-
Quando si chiama l'GetLendingAnalysisoperazione o l'GetLendingAnalysisSummaryoperazione, sostituiscila jobId con quella jobId restituita da. StartLendingAnalysis Specificate la regione del bucket sostituendola region-name con il nome della regione.
-
Esegui il codice per l'SDK o la AWS CLI che hai scelto.
Il completamento dell'operazione potrebbe richiedere alcuni minuti. Al termine, viene visualizzato un elenco di blocchi per il testo rilevato o analizzato con i seguenti esempi:
- AWS CLI
-
Per avviare l'analisi del documento di prestito, utilizzare il seguente comando CLI. Se vuoi vedere i documenti divisi, usa l'output-configargomento, altrimenti puoi rimuoverlo:
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'
Per ottenere i risultati dell'analisi del documento di prestito, utilizzare il seguente comando CLI. L'max-resultsargomento è facoltativo e se non vuoi limitare il numero di risultati restituiti puoi rimuoverlo:
aws textract get-lending-analysis \
--job-id 'jobId' \
--region 'us-west-2' \
--max-results 30
Per recuperare un riepilogo dei risultati:
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()