Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menggunakan Alur Kerja Analisis Pinjaman
Untuk mendeteksi teks dalam, atau menganalisis dokumen pinjaman multipage, menggunakan alur kerja Analyze Lending, Anda melakukan hal berikut:
-
Buat topik Amazon SNS dan antrean Amazon SQS.
-
Berlangganan antrian topik.
-
Berikan izin topik untuk mengirim pesan ke antrian.
-
Mulai memproses dokumen. StartLendingAnalysisOperasi panggilan.
-
Dapatkan status penyelesaian dari antrean Amazon SQS. Kode contoh melacak pengenal pekerjaan (JobId) yang dikembalikan oleh Start operasi. Kode contoh hanya mendapatkan hasil untuk pencocokan pengenal pekerjaan yang dibaca dari status penyelesaian. Ini penting jika aplikasi lain menggunakan antrian dan topik yang sama. Untuk mempermudah, kode contoh menghapus pekerjaan yang tidak cocok. Pertimbangkan untuk menambahkan pekerjaan yang dihapus ke antrean surat mati Amazon SQS untuk penyelidikan lebih lanjut.
Hasil StartLendingAnalysis operasi dapat dikirim ke bucket Amazon S3 pilihan Anda dengan menggunakan fitur ini OutputConfig . Jika Anda menggunakan fitur ini, Anda mungkin harus melakukan beberapa konfigurasi tambahan Peran Pengguna dan Layanan Anda. Untuk informasi tentang cara mengizinkan Amazon Ttract mengirim dokumen terenkripsi ke bucket Amazon S3 Anda, lihat. Izin untuk Konfigurasi Output
-
Dapatkan dan tampilkan hasil pemrosesan dengan memanggil GetLendingAnalysis operasi atau GetLendingAnalysisSummary operasi.
-
Setelah Anda selesai memproses dokumen, pastikan untuk menghapus topik Amazon SNS dan antrian Amazon SQS. Jika Anda perlu memproses dokumen tambahan, Anda dapat membiarkan topik Amazon SNS dan antrian Amazon SQS apa adanya dan menggunakannya kembali untuk dokumen lain.
Melakukan Analisis Pinjaman Asinkron
Kode contoh untuk prosedur ini disediakan untuk Python dan file. AWS CLI Sebelum Anda mulai, instal AWS SDK yang sesuai. Untuk informasi selengkapnya, lihat Langkah 2: Siapkan AWS CLI and AWS SDK.
-
Konfigurasikan akses pengguna ke Amazon Ttract, dan konfigurasikan akses Amazon Textract ke Amazon SNS. Untuk informasi selengkapnya, lihat Mengonfigurasi Amazon Ttract untuk Operasi Asinkron. Untuk menyelesaikan prosedur ini, Anda memerlukan file dokumen multipage dalam format PDF. Anda dapat melewati langkah 3 — 6 dalam instruksi konfigurasi, karena kode contoh membuat dan mengonfigurasi topik Amazon SNS dan antrian Amazon SQS. Jika menyelesaikan contoh CLI, Anda tidak perlu mengatur antrian SQS.
-
Unggah file dokumen multihalaman dalam format PDF atau TIFF ke bucket Amazon S3 Anda (Anda juga dapat memproses dokumen satu halaman dalam format JPEG, PNG, TIFF, atau PDF). Untuk petunjuk, lihat Mengunggah Objek ke Amazon S3 di Panduan Pengguna Layanan Penyimpanan Sederhana Amazon.
-
Gunakan AWS SDK for Python (Boto3) atau kode AWS CLI berikut untuk menganalisis teks dalam dokumen pinjaman multihalaman. Dalam fungsi utama:
-
Ganti nilai roleArn dengan ARN peran IAM yang Anda simpan di Memberikan Akses Amazon Textract ke Topik Amazon SNS Anda.
-
Ganti nilai bucket dan document dengan bucket dan nama file dokumen yang sebelumnya Anda tentukan di Langkah 2 selanjutnya.
-
Ganti nilai parameter type input ProcessDocument fungsi dengan jenis pemrosesan yang ingin Anda gunakan. Misalnya, gunakan ProcessType.DETECTION untuk mendeteksi teks, atau gunakan ProcessType.ANALYSIS untuk menganalisis teks.
-
Untuk contoh Python, ganti nilainya region_name dengan wilayah tempat klien Anda beroperasi.
Untuk kode contoh AWS CLI yang akan datang, lakukan hal berikut:
-
Saat memanggil StartLendingAnalysisoperasi, ganti nilai bucket-name dengan nama bucket S3 Anda, dan ganti FileName dengan nama file yang Anda tentukan di langkah 2. Tentukan wilayah bucket Anda dengan mengganti region-name dengan nama wilayah Anda. Perhatikan bahwa contoh CLI tidak menggunakan SQS.
-
Saat memanggil GetLendingAnalysisoperasi atau GetLendingAnalysisSummaryoperasi, ganti jobId dengan yang jobId dikembalikan oleh StartLendingAnalysis. Tentukan wilayah bucket Anda dengan mengganti region-name dengan nama wilayah Anda.
-
Jalankan kode untuk SDK atau AWS CLI yang Anda pilih.
Operasi mungkin membutuhkan waktu beberapa saat untuk menyelesaikan. Setelah selesai, daftar blok untuk teks yang terdeteksi atau dianalisis ditampilkan oleh contoh berikut:
- AWS CLI
-
Untuk memulai analisis dokumen pinjaman gunakan perintah CLI berikut. Jika Anda ingin melihat dokumen yang terbagi, gunakan output-config argumen, jika tidak, Anda dapat menghapusnya:
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'
Untuk mendapatkan hasil analisis dokumen pinjaman gunakan perintah CLI berikut. max-resultsArgumennya opsional, dan jika Anda tidak ingin membatasi jumlah hasil yang dikembalikan, Anda dapat menghapusnya:
aws textract get-lending-analysis \
--job-id 'jobId' \
--region 'us-west-2' \
--max-results 30
Untuk mengambil ringkasan hasil:
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()