Zephyrnet Logosu

Amazon Textract ve Amazon A2I kullanarak el yazısı tablo içeriği içeren belgeleri işleyin

Tarih:

Giderek daha fazla şirketin buluta geçtiği ve iş süreçlerini iyileştirmek için makine öğrenimi (ML) veya teknolojiyi kullandığı bu dijital çağda bile, hala çok sayıda şirketin ulaştığını ve belgeleri, özellikle de el yazısıyla belgelerin işlenmesini sorduğunu görüyoruz. Basılı bilgilerin yanı sıra el yazısı içeren tablolar ve formlarla istihdam formları, zaman kartları ve finansal uygulamalar görüyoruz. İşleri karmaşıklaştırmak için, her belge çeşitli formatlarda olabilir ve herhangi bir sektördeki her kurum birkaç farklı formatta olabilir. Kuruluşlar, tablolar, formlar ve tablo verileri dahil olmak üzere çeşitli biçimlerdeki karmaşık belgeleri işleyebilen basit bir çözüm arıyor.

Bu belgelerden veri çıkarmak, özellikle basılı ve el yazısı metnin bir kombinasyonuna sahip olduğunuzda, hataya açık, zaman alıcı, pahalıdır ve ölçeklenebilir değildir. Tablolara ve formlara gömülü metin, çıkarma ve işleme karmaşıklığını artırır. Amazon Metin Yazısı Formlardan ve tablolardan verileri tanımlamak, anlamak ve çıkarmak için basit optik karakter tanımanın (OCR) ötesine geçen, taranmış belgelerden basılı metinleri, el yazısını ve diğer verileri otomatik olarak çıkaran bir AWS AI hizmetidir.

Veriler çıkarıldıktan sonra, bir belge yönetimi iş akışındaki son işlem adımı, girişlerin gözden geçirilmesini ve aşağı akış işleme uygulamalarının gerektirdiği şekilde değişiklik yapılmasını içerir. Amazon Artırılmış AI (Amazon A2I), makine öğrenimi iş akışınızda bir insan incelemesini yapılandırmayı kolaylaştırır. Bu, sonuçların belirli bir güven eşiğinin altına düşmesi durumunda makine öğrenimi ardışık düzeninizi gözden geçirmek için otomatik olarak bir insan adımına sahip olmanıza, inceleme ve denetleme iş akışlarını ayarlamanıza ve tahmin sonuçlarını gerektiği gibi değiştirmenize olanak tanır.

Bu gönderide, belgelerden tablo şeklindeki verileri çıkarmak ve bir insan incelemesi döngüsüne sahip olmak için Amazon Textract Handwritten özelliğini nasıl kullanabileceğinizi göstereceğiz. Amazon A2I özel görev türü tahminlerin son derece doğru olduğundan emin olmak için. Sonuçları saklıyoruz Amazon DinamoDB, herhangi bir ölçekte tek basamaklı milisaniye performansı sunan bir anahtar-değer ve belge veritabanı olan ve verileri aşağı akışta işleme için kullanılabilir hale getiren

Aşağıdaki adımlarda size bir Jupyter dizüstü bilgisayar:

  1. Belgeden tablo şeklindeki verileri almak ve yanıtı incelemek için Amazon Textract'i kullanın.
  2. Amazon Textract yanıtını gözden geçirmek ve değiştirmek için bir Amazon A2I insan döngüsü kurun.
  3. Amazon A2I yanıtını değerlendirme ve aşağı akış işlemleri için DynamoDB'de depolama.

Önkoşullar

Başlamadan önce, izlenecek yol Jupyter not defterini bir AWS CloudFormation şablonu ve ardından özel Amazon A2I iş akışını ayarlamak için dizüstü bilgisayarda gerekli olan bir Amazon A2I özel iş gücü oluşturun.

Jupyter not defterini kurma

İlk kurulum işinin çoğunu sizin için gerçekleştiren bir CloudFormation şablonu dağıtıyoruz, örneğin bir AWS Kimlik ve Erişim Yönetimi (IAM) rolü Amazon Adaçayı Yapıcı, bir SageMaker not defteri örneği oluşturma ve GitHub deposunu not defteri örneğine klonlama.

  1. Klinik Yığını Başlat dizüstü bilgisayarı ABD Doğu (K.Virginia) Bölgesinde yapılandırmak için:

  1. Yığın adı veya parametrelerinde herhangi bir değişiklik yapmayın.
  2. içinde Uygulama Alanı bölümünde, seçin AWS CloudFormation'ın IAM kaynakları oluşturabileceğini kabul ediyorum.
  3. Klinik Yığın oluştur.

Yığın oluştur'u seçin

Yığın ayrıntıları sayfasının aşağıdaki ekran görüntüsü yığının durumunu şu şekilde gösterir: CREATE_IN_PROGRESS. Durumun değişmesi 20 dakika kadar sürebilir CREATE_COMPLETE.

Yığın ayrıntıları sayfasının aşağıdaki ekran görüntüsü yığının durumunu CREATE_IN_PROGRESS olarak gösterir.

  1. SageMaker konsolunda, Dizüstü Bilgisayar Örnekleri.
  2. Klinik Jupyter'ı aç için TextractA2INotebook oluşturduğunuz not defteri.
  3. Açılış textract-hand-written-a2i-forms.ipynb ve orayı takip edin.

Amazon A2I özel iş gücü kurma

Bu gönderi için, özel bir çalışma ekibi oluşturursunuz ve ona yalnızca bir kullanıcı (siz) eklersiniz. Talimatlar için bkz. Özel İş Gücü Oluşturun (Amazon SageMaker Konsolu). Kullanıcı (siz) daveti kabul ettiğinde, kendinizi işgücüne eklemeniz gerekir. Talimatlar için bkz. Çalışma Ekibine Çalışan Ekleme bölümündeki bölüm İş Gücü Yönetme (Amazon SageMaker Konsolu).

Bir etiketleme iş gücü oluşturduktan sonra, iş gücü ARN'sini kopyalayın ve özel bir inceleme iş gücü oluşturmak için onu not defteri hücresine girin:

WORKTEAM_ARN= "<your workteam ARN>"

Aşağıdaki bölümlerde, bu defteri kullanma adımlarında size yol göstereceğiz.

Belgeden tablo şeklindeki verileri almak ve yanıtı incelemek

Bu bölümde, aşağıdaki adımları kullanarak açıklayıcı not defteri:

  1. Hem basılı hem de elle yazılmış içeriğe sahip örnek verileri inceleyin.
  2. Amazon Textract yanıtını ayrıştırmak için yardımcı işlevleri ayarlayın.
  3. Amazon Textract yanıtını inceleyin ve analiz edin.

Örnek verilerin gözden geçirilmesi

Aşağıdaki not defteri hücresini çalıştırarak örnek verileri inceleyin:

# Document
documentName = "test_handwritten_document.png" display(Image(filename=documentName))

Tablolarda hem basılı hem de el yazısı içeriğe sahip aşağıdaki örnek belgeyi kullanıyoruz.

Tablolarda hem basılı hem de el yazısı içeriğe sahip aşağıdaki örnek belgeyi kullanıyoruz.

Yanıtı işlemek için Amazon Textract Parser Kitaplığı'nı kullanın

Şimdi ithal edeceğiz Amazon Textract Response Ayrıştırıcı Amazon Textract'in yanıtından ihtiyacımız olanı ayrıştırmak ve ayıklamak için kitaplık. Burada iki ana işlev vardır. Birincisi, belgenin başlık bölümünün form verilerini (anahtar-değer çiftleri) kısmını çıkaracağız. İkinci olarak, tablo verilerini içeren bir csv dosyası oluşturmak için tabloyu ve hücreleri ayrıştıracağız. Bu defterde, belge ayıklama için Amazon Textract'in Sync API'sini kullanacağız, Analiz etBelge. Bu, görüntü dosyalarını (png veya jpeg) bir girdi olarak kabul eder.

client = boto3.client( service_name='textract', region_name= 'us-east-1', endpoint_url='https://textract.us-east-1.amazonaws.com',
) with open(documentName, 'rb') as file: img_test = file.read() bytes_test = bytearray(img_test) print('Image loaded', documentName) # process using image bytes
response = client.analyze_document(Document={'Bytes': bytes_test}, FeatureTypes=['TABLES','FORMS'])

Amazon Textract tarafından döndürülen JSON'u kolayca ayrıştırmak için Amazon Textract Response Parser kitaplığını kullanabilirsiniz. Kitaplık JSON'u ayrıştırır ve belgenin farklı bölümleriyle çalışmak için programlama diline özgü yapılar sağlar. Daha fazla ayrıntı için lütfen bakın Amazon Textract Parser Kitaplığı

from trp import Document
# Parse JSON response from Textract
doc = Document(response) # Iterate over elements in the document
for page in doc.pages: # Print lines and words for line in page.lines: print("Line: {}".format(line.text)) for word in line.words: print("Word: {}".format(word.text)) # Print tables for table in page.tables: for r, row in enumerate(table.rows): for c, cell in enumerate(row.cells): print("Table[{}][{}] = {}".format(r, c, cell.text)) # Print fields for field in page.form.fields: print("Field: Key: {}, Value: {}".format(field.key.text, field.value.text))

Artık belge görüntüsünden ihtiyacımız olan içeriğe sahip olduğumuza göre, onu depolamak için bir csv dosyası oluşturalım ve gerektiğinde gözden geçirme ve değiştirme için Amazon A2I insan döngüsünü kurmak için kullanalım.

# Lets get the form data into a csv file
with open('test_handwritten_form.csv', 'w', newline='') as csvfile: formwriter = csv.writer(csvfile, delimiter=',', quoting=csv.QUOTE_MINIMAL) for field in page.form.fields: formwriter.writerow([field.key.text+" "+field.value.text]) # Lets get the table data into a csv file
with open('test_handwritten_tab.csv', 'w', newline='') as csvfile: tabwriter = csv.writer(csvfile, delimiter=',') for r, row in enumerate(table.rows): csvrow = [] for c, cell in enumerate(row.cells): if cell.text: csvrow.append(cell.text.rstrip()) #csvrow += '{}'.format(cell.text.rstrip())+"," tabwriter.writerow(csvrow) 

Alternatif olarak, bu not defterini bir PDF dosyası kullanmak veya belgelerin toplu olarak işlenmesi için değiştirmek isterseniz, StartDocumentAnalysis API'si. StartDocumentAnalysis bir iş tanımlayıcısı döndürür (JobId) operasyonun sonuçlarını almak için kullandığınız. Metin analizi bittiğinde Amazon Textract, Amazon Simple Notification Service (Amazon SNS) konusunda belirttiğiniz bir tamamlanma durumu yayınlar. NotificationChannel. Metin analizi işleminin sonuçlarını almak için önce Amazon SNS konusunda yayınlanan durum değerinin BAŞARILI olup olmadığını kontrol edin. Eğer öyleyse, ara GetDocumentAnalysisve iş tanımlayıcısını (JobId) ilk aramadan StartDocumentAnalysis.

Amazon Textract yanıtını inceleme ve analiz etme

Şimdi form satır öğelerini bir Pandas DataFrame'e yüklüyoruz ve aşağı akış uygulamalarının ihtiyaç duyduğu ilgili sütunlara ve satırlara sahip olduğumuzdan emin olmak için temizliyoruz. Daha sonra insan incelemesi için Amazon A2I'ye göndeririz.

Amazon Textract yanıtından anahtar-değer verilerini incelemek ve analiz etmek için aşağıdaki not defteri hücresini çalıştırın:

# Load the csv file contents into a dataframe, strip out extra spaces, use comma as delimiter
df_form = pd.read_csv('test_handwritten_form.csv', header=None, quoting=csv.QUOTE_MINIMAL, sep=',')
# Rename column
df_form = df_form.rename(columns={df_form.columns[0]: 'FormHeader'})
# display the dataframe
df_form

Aşağıdaki ekran görüntüsü çıktımızı göstermektedir.

Amazon Textract yanıtından alınan tablo şeklindeki verileri incelemek ve analiz etmek için aşağıdaki not defteri hücresini çalıştırın:

# Load the csv file contents into a dataframe, strip out extra spaces, use comma as delimiter
df_tab = pd.read_csv('test_handwritten_tab.csv', header=1, quoting=csv.QUOTE_MINIMAL, sep=',')
# display the dataframe
df_tab.head()

Aşağıdaki ekran görüntüsü çıktımızı göstermektedir.

Aşağıdaki ekran görüntüsü çıktımızı göstermektedir.

Amazon Textract'in tablo verilerinden hem basılı hem de el yazısı içeriği algıladığını görebiliyoruz.

Amazon A2I insan döngüsü kurma

Amazon A2I, iki yerleşik görev türünü destekler: Amazon Textract anahtar / değer çifti ayıklama ve Amazon Rekognition görüntü denetimiVe özel görev türü insan incelemesi döngüsünü herhangi bir makine öğrenimi iş akışına entegre etmek için kullanabileceğiniz. Amazon A2I'yi aşağıdaki gibi diğer AWS hizmetleriyle entegre etmek için özel bir görev türü kullanabilirsiniz: Amazon Kavramak, Amazon Yazısı, ve Amazon Tercümeve kendi özel makine öğrenimi iş akışlarınız. Daha fazlasını öğrenmek için bkz. Amazon A2I kullanarak Kullanım Durumları ve Örnekleri.

Bu bölümde, Amazon A2I özel görev türünün Amazon Textract tabloları ve anahtar / değer çiftleriyle entegre etmek için nasıl kullanılacağını gösteriyoruz. açıklayıcı not defteri Amazon Textract yanıtlarından düşük güvenilirlik algılama puanları için. Aşağıdaki adımları içerir:

  1. Bir insan görevi kullanıcı arayüzü oluşturun.
  2. Bir iş akışı tanımı oluşturun.
  3. Tahminleri Amazon A2I insan döngülerine gönderin.
  4. Çalışan portalında oturum açın ve Amazon Textract sonuçlarına açıklama ekleyin veya sonuçları doğrulayın.

İnsan görevi kullanıcı arayüzü oluşturma

Çalışanlarınız için bir görev kullanıcı arabirimi oluşturabilirsiniz. alt görev şablonu. Çalışan görev şablonu, giriş verilerinizi ve işçilerin görevinizi tamamlamasına yardımcı olacak talimatları görüntülemek için kullandığınız bir HTML dosyasıdır. Özel bir görev türü için bir insan incelemesi iş akışı oluşturuyorsanız, HTML kodunu kullanarak özel bir çalışan görev şablonu oluşturmanız gerekir. Daha fazla bilgi için bakınız Özel Çalışan Görev Şablonu Oluşturun.

Bu gönderi için, not defterinde Amazon Textract tablolarını ve anahtar / değer çiftlerini işlemek için özel bir UI HTML şablonu oluşturduk. Şablonu bulabilirsiniz tablolar-keyvalue-sample.liquid.html GitHub depomuzda ve özel belge kullanım durumunuz için özelleştirin.

Bu şablon, bir insan döngüsüne ihtiyaç duyulduğunda kullanılır. 70'in üzerinde önceden oluşturulmuş kullanıcı arayüzümüz var GitHub. İsteğe bağlı olarak, bu iş akışı tanımını Amazon A2I konsolu. Talimatlar için bkz. Bir İnsan İncelemesi İş Akışı Oluşturun.

Bu özel şablonu HTML kullanarak oluşturduktan sonra, bir Amazon A2I insan görevi kullanıcı arabirimi Amazon Kaynak Adı (ARN) oluşturmak için bu şablonu kullanmanız gerekir. Bu ARN aşağıdaki biçime sahiptir: arn:aws:sagemaker:<aws bölgesi>:aws-hesap-numarası>:human-task-uben/şablon adı>. Bu ARN, bir veya daha fazla insan incelemesi iş akışında (akış tanımları) kullanabileceğiniz bir çalışan görevi şablon kaynağı ile ilişkilidir. Bir çalışan görev şablonu kullanarak bir insan görevi UI ARN'si oluşturun. YaratİnsanGöreviUi Aşağıdaki dizüstü bilgisayar hücresini çalıştırarak API işlemi:

def create_task_ui(): ''' Creates a Human Task UI resource. Returns: struct: HumanTaskUiArn ''' response = sagemaker_client.create_human_task_ui( HumanTaskUiName=taskUIName, UiTemplate={'Content': template}) return response
# Create task UI
humanTaskUiResponse = create_task_ui()
humanTaskUiArn = humanTaskUiResponse['HumanTaskUiArn']
print(humanTaskUiArn)

Yukarıdaki kod, bir sonraki adımda akış tanımlarını oluştururken kullandığımız çıktı olarak size bir ARN verir:

arn:aws:sagemaker:us-east-1:<aws-account-nr>:human-task-ui/ui-hw-invoice-2021-02-10-16-27-23

İş akışı tanımının oluşturulması

Bu bölümde bir akış tanımı oluşturuyoruz. Akış tanımları aşağıdakileri belirlememize izin verir:

  • Görevlerinizin gönderildiği işgücü
  • İş gücünüzün aldığı talimatlar (çalışan görev şablonu)
  • Çıktı verilerinizin saklandığı yer

Bu gönderi için aşağıdaki kodda API'yi kullanıyoruz:

create_workflow_definition_response = sagemaker_client.create_flow_definition( FlowDefinitionName= flowDefinitionName, RoleArn= role, HumanLoopConfig= { "WorkteamArn": WORKTEAM_ARN, "HumanTaskUiArn": humanTaskUiArn, "TaskCount": 1, "TaskDescription": "Review the table contents and correct values as indicated", "TaskTitle": "Employment History Review" }, OutputConfig={ "S3OutputPath" : OUTPUT_PATH } )
flowDefinitionArn = create_workflow_definition_response['FlowDefinitionArn'] # let's save this ARN for future use

İsteğe bağlı olarak, bu iş akışı tanımını Amazon A2I konsolu. Talimatlar için bkz. Bir İnsan İncelemesi İş Akışı Oluşturun.

Tahminleri Amazon A2I insan döngülerine gönderme

Amazon Textract çıktısının kaydedildiği Pandas DataFrame'den bir öğe listesi oluşturuyoruz. İncelenmek üzere gönderilecek öğelerin bir listesini oluşturmak için aşağıdaki not defteri hücresini çalıştırın:

NUM_TO_REVIEW = len(df_tab) # number of line items to review
dfstart = df_tab['Start Date'].to_list()
dfend = df_tab['End Date'].to_list()
dfemp = df_tab['Employer Name'].to_list()
dfpos = df_tab['Position Held'].to_list()
dfres = df_tab['Reason for leaving'].to_list()
item_list = [{'row': "{}".format(x), 'startdate': dfstart[x], 'enddate': dfend[x], 'empname': dfemp[x], 'posheld': dfpos[x], 'resleave': dfres[x]} for x in range(NUM_TO_REVIEW)]
item_list

Amazon Textract'tan alınan tüm satırların ve sütunların bir çıktısını alırsınız:

[{'row': '0', 'startdate': '1/15/2009 ', 'enddate': '6/30/2011 ', 'empname': 'Any Company ', 'posheld': 'Assistant baker ', 'resleave': 'relocated '}, {'row': '1', 'startdate': '7/1/2011 ', 'enddate': '8/10/2013 ', 'empname': 'Example Corp. ', 'posheld': 'Baker ', 'resleave': 'better opp. '}, {'row': '2', 'startdate': '8/15/2013 ', 'enddate': 'Present ', 'empname': 'AnyCompany ', 'posheld': 'head baker ', 'resleave': 'N/A current '}]

Anahtar-değer çiftlerinin bir listesini almak için aşağıdaki not defteri hücresini çalıştırın:

dforighdr = df_form['FormHeader'].to_list()
hdr_list = [{'hdrrow': "{}".format(x), 'orighdr': dforighdr[x]} for x in range(len(df_form))]
hdr_list

Önceki hücrelerden anahtar / değer ve tablo listesini birleştirerek Amazon A2I döngüsü için bir JSON yanıtı oluşturmak üzere aşağıdaki kodu çalıştırın:

ip_content = {"Header": hdr_list, 'Pairs': item_list, 'image1': s3_img_url }

Aşağıdaki dizüstü bilgisayar hücresini çalıştırarak insan döngüsünü başlatın:

# Activate human loops
import json
humanLoopName = str(uuid.uuid4()) start_loop_response = a2i.start_human_loop( HumanLoopName=humanLoopName, FlowDefinitionArn=flowDefinitionArn, HumanLoopInput={ "InputContent": json.dumps(ip_content) } )

Aşağıdaki kodla insan döngüsünün durumunu kontrol edin:

completed_human_loops = []
resp = a2i.describe_human_loop(HumanLoopName=humanLoopName)
print(f'HumanLoop Name: {humanLoopName}')
print(f'HumanLoop Status: {resp["HumanLoopStatus"]}')
print(f'HumanLoop Output Destination: {resp["HumanLoopOutput"]}')
print('n') if resp["HumanLoopStatus"] == "Completed": completed_human_loops.append(resp)

İnsan döngüsünün durumunu ve çıkış hedefi S3 klasörünü gösteren aşağıdaki çıktıyı alırsınız:

HumanLoop Name: f69bb14e-3acd-4301-81c0-e272b3c77df0
HumanLoop Status: InProgress
HumanLoop Output Destination: {'OutputS3Uri': 's3://sagemaker-us-east-1-<aws-account-nr>/textract-a2i-handwritten/a2i-results/fd-hw-forms-2021-01-11-16-54-31/2021/01/11/16/58/13/f69bb14e-3acd-4301-81c0-e272b3c77df0/output.json'}

Sonuçlara işçi portalı üzerinden açıklama ekleme

İnsan döngüsünün durumunu kontrol etmek için dizüstü bilgisayardaki adımları çalıştırın. Beraberindeki kullanabilirsiniz SageMaker Jupyter dizüstü bilgisayar Bu gönderideki adımları takip etmek için.

  1. Özel iş gücü portalına gitmek üzere bir oturum açma bağlantısı almak için aşağıdaki not defteri hücresini çalıştırın:
    workteamName = WORKTEAM_ARN[WORKTEAM_ARN.rfind('/') + 1:]
    print("Navigate to the private worker portal and do the tasks. Make sure you've invited yourself to your workteam!")
    print('https://' + sagemaker_client.describe_workteam(WorkteamName=workteamName)['Workteam']['SubDomain'])

  1. Özel çalışan portalına giriş bağlantısını seçin.
  2. İnsan incelemesi işini seçin.
  3. Klinik Çalışmaya başlamak.

Çalışmaya başla'yı seçin.

Orijinal belgeyi, anahtar / değer çiftinizi, Amazon Textract tarafından algılanan metin yanıtlarını ve tablonuzun yanıtlarını bulduğunuz Amazon A2I konsoluna yönlendirilirsiniz.

Çalışmaya başla'yı seçin.

Sonuçları doğrulayabileceğiniz ve Amazon Textract yanıtını orijinal belgeyle karşılaştırabileceğiniz anahtar-değer çiftleri ve metin için düzeltme formunu bulmak için aşağı kaydırın. Ayrıca, el yazısıyla yazılmış ve yazdırılmış tablo içeriğini değiştirmek için kullanıcı arayüzünü bulacaksınız.

Her bir hücreyi orijinal görüntü yanıtına göre değiştirebilir ve doğru değerleri yeniden girip yanıtınızı gönderebilirsiniz. Yanıtlarınızı gönderdiğinizde etiketleme iş akışı tamamlanmıştır.

Sonuçların değerlendirilmesi

Etiketleme işi tamamlandığında, sonuçlarınız insan incelemesi iş akışı tanımında belirtilen S3 çıktı yolunda bulunmalıdır. İnsan cevapları döndürülür ve JSON dosyasına kaydedilir. Sonuçları Amazon S3'ten almak için dizüstü bilgisayar hücresini çalıştırın:

import re
import pprint pp = pprint.PrettyPrinter(indent=4) for resp in completed_human_loops: splitted_string = re.split('s3://' + 'a2i-experiments' + '/', resp['HumanLoopOutput']['OutputS3Uri']) output_bucket_key = splitted_string[1] response = s3.get_object(Bucket='a2i-experiments', Key=output_bucket_key) content = response["Body"].read() json_output = json.loads(content) pp.pprint(json_output) print('n')

Aşağıdaki kod, Amazon A2I ek açıklama çıktı JSON dosyasının bir parçacığını gösterir:

{ 'flowDefinitionArn': 'arn:aws:sagemaker:us-east-1:<aws-account-nr>:flow-definition/fd-hw-invoice-2021-02-22-23-07-53', 'humanAnswers': [ { 'acceptanceTime': '2021-02-22T23:08:38.875Z', 'answerContent': { 'TrueHdr3': 'Full Name: Jane ' 'Smith', 'predicted1': 'relocated', 'predicted2': 'better opp.', 'predicted3': 'N/A, current', 'predictedhdr1': 'Phone ' 'Number: ' '555-0100', 'predictedhdr2': 'Mailing ' 'Address: ' 'same as ' 'above', 'predictedhdr3': 'Full Name: ' 'Jane Doe', 'predictedhdr4': 'Home ' 'Address: ' '123 Any ' 'Street, Any ' 'Town. USA', 'rating1': { 'agree': True, 'disagree': False}, 'rating2': { 'agree': True, 'disagree': False}, 'rating3': { 'agree': False, 'disagree': True}, 'rating4': { 'agree': True, 'disagree': False}, 'ratingline1': { 'agree': True, 'disagree': False}, 'ratingline2': { 'agree': True, 'disagree': False}, 'ratingline3': { 'agree': True, 'disagree': False}}

Amazon A2I açıklamalı sonuçların DynamoDB'de depolanması

Artık formu güncellenmiş içerikle birlikte bir DynamoDB tablosunda saklıyoruz, böylece aşağı akış uygulamaları onu kullanabilir. Süreci otomatikleştirmek için bir AWS Lambda API uç noktalarınıza veya uygulamalarınıza otomatik olarak bilgi ayıklamak ve göndermek için DynamoDB ile tetikleyin. Daha fazla bilgi için bakınız DynamoDB Akışları ve AWS Lambda Tetikleyicileri.

Sonuçlarınızı saklamak için aşağıdaki adımları tamamlayın:

  1. Anahtar / değer çiftleri ve metin için insan yanıtlarını bir DataFrame'e şu şekilde alın: aşağıdaki dizüstü bilgisayar hücresini çalıştırmak:
    #updated array values to be strings for dataframe assignment
    for i in json_output['humanAnswers']: x = i['answerContent'] for j in range(0, len(df_form)): df_form.at[j, 'TrueHeader'] = str(x.get('TrueHdr'+str(j+1))) df_form.at[j, 'Comments'] = str(x.get('Comments'+str(j+1))) df_form = df_form.where(df_form.notnull(), None)
    

  1. Aşağıdaki hücreyi çalıştırarak bir DataFrame'e tablo veriler için insanlar tarafından incelenen yanıtları alın:
    #updated array values to be strings for dataframe assignment
    for i in json_output['humanAnswers']: x = i['answerContent'] for j in range(0, len(df_tab)): df_tab.at[j, 'TrueStartDate'] = str(x.get('TrueStartDate'+str(j+1))) df_tab.at[j, 'TrueEndDate'] = str(x.get('TrueEndDate'+str(j+1))) df_tab.at[j, 'TrueEmpName'] = str(x.get('TrueEmpName'+str(j+1))) df_tab.at[j, 'TruePosHeld'] = str(x.get('TruePosHeld'+str(j+1))) df_tab.at[j, 'TrueResLeave'] = str(x.get('TrueResLeave'+str(j+1))) df_tab.at[j, 'ChangeComments'] = str(x.get('Change Reason'+str(j+1))) df_tab = df_tab.where(df_tab.notnull(), None)You will get below output:

  1. DynamoDB tablosuna kaydetmek için DataFrame'leri tek bir DataFrame'de birleştirin:
    # Join both the dataframes to prep for insert into DynamoDB
    df_doc = df_form.join(df_tab, how='outer')
    df_doc = df_doc.where(df_doc.notnull(), None)
    df_doc

DynamoDB tablosu oluşturma

Aşağıdaki kodla DynamoDB tablonuzu oluşturun:

# Get the service resource.
dynamodb = boto3.resource('dynamodb')
tablename = "emp_history-"+str(uuid.uuid4()) # Create the DynamoDB table.
table = dynamodb.create_table(
TableName=tablename,
KeySchema=[
{ 'AttributeName': 'line_nr', 'KeyType': 'HASH'
}
],
AttributeDefinitions=[
{ 'AttributeName': 'line_nr', 'AttributeType': 'N'
},
],
ProvisionedThroughput={ 'ReadCapacityUnits': 5, 'WriteCapacityUnits': 5
}
)
# Wait until the table exists.
table.meta.client.get_waiter('table_exists').wait(TableName=tablename)
# Print out some data about the table.
print("Table successfully created. Item count is: " + str(table.item_count))

Aşağıdaki çıktıyı alırsınız:

Table successfully created. Item count is: 0

DataFrame içeriğini bir DynamoDB tablosuna yükleme

DataFrame'inizin içeriğini aşağıdaki kodla DynamoDB tablonuza yükleyin:

Not: DynamoDB tablonuza birden çok belgeden içerik eklerken, belgeler arasında ayrım yapmak için öznitelik olarak bir belge numarası eklediğinizden lütfen emin olun. Aşağıdaki örnekte dizini line_nr olarak kullanıyoruz çünkü tek bir belgeyle çalışıyoruz.

for idx, row in df_doc.iterrows(): table.put_item( Item={ 'line_nr': idx, 'orig_hdr': str(row['FormHeader']) , 'true_hdr': str(row['TrueHeader']), 'comments': str(row['Comments']), 'start_date': str(row['Start Date ']), 'end_date': str(row['End Date ']), 'emp_name': str(row['Employer Name ']), 'position_held': str(row['Position Held ']), 'reason_for_leaving': str(row['Reason for leaving']), 'true_start_date': str(row['TrueStartDate']), 'true_end_date': str(row['TrueEndDate']), 'true_emp_name': str(row['TrueEmpName']), 'true_position_held': str(row['TruePosHeld']), 'true_reason_for_leaving': str(row['TrueResLeave']), 'change_comments': str(row['ChangeComments']) } )

Öğelerin güncellenip güncellenmediğini kontrol etmek için, DynamoDB tablo değerini almak üzere aşağıdaki kodu çalıştırın:

response = table.get_item(
Key={ 'line_nr': 2
}
)
item = response['Item']
print(item)

Alternatif olarak, aşağıdaki ekran görüntüsünde olduğu gibi DynamoDB konsolundaki tabloyu kontrol edebilirsiniz.

Sonuç

Bu gönderi, Amazon Textract ve Amazon A2I gibi AWS AI / ML yığınının AI katmanındaki hizmetleri kullanmanın, el yazısı formlardaki tablo verilerini okuyup işleyip aşağı akış uygulamaları için bir DynamoDB tablosunda depolamanın ne kadar kolay olduğunu gösterdi. kullanmak. Ayrıca artırılmış form verilerini Amazon A2I'den bir S3 klasörüne AWS analiz uygulamalarınız tarafından kullanılmak üzere gönderebilirsiniz.

Video sunumları, örnek Jupyter not defterleri veya belge işleme, içerik denetleme, duyarlılık analizi, metin çevirisi ve daha fazlası gibi kullanım örnekleri hakkında daha fazla bilgi için bkz. Amazon Artırılmış AI Kaynakları. Bu gönderi size yardımcı oluyorsa veya bir sorunu çözmeniz için size ilham veriyorsa, bunu duymak isteriz! Bu çözümün kodu şu adreste mevcuttur: GitHub repo kullanman ve genişletmen için. Katkılara her zaman açığız!


Yazarlar Hakkında

prem ranga Atlanta, GA merkezli bir Kurumsal Çözüm Mimarıdır. Makine Öğrenimi Teknik Alan Topluluğu'nun bir parçasıdır ve makine öğrenimi ve yapay zeka yolculuklarında müşterilerle çalışmayı çok seviyor. Prem robotik konusunda tutkulu, otonom bir araç araştırmacısı ve aynı zamanda Houston ve diğer yerlerde Alexa kontrollü Beer Pours'u inşa etti.

Burası burası Arlington, VA merkezli bir AI / ML Uzman Çözüm Mimarıdır. Dünya Çapında Kamu Sektörü ekibiyle çalışıyor ve müşterilerin makine öğrenimini büyük ölçekte benimsemelerine yardımcı oluyor. AI / ML'deki NLP ve ML açıklanabilirlik alanları konusunda tutkulu.

Sriharsha MS Amazon Web Services'in Stratejik Uzman ekibinde yer alan bir AI / ML uzmanı çözüm mimarıdır. Karmaşık iş sorunlarını çözmek için AI / ML'den yararlanan stratejik AWS müşterileriyle çalışıyor. Yapay zeka / makine öğrenimi uygulamalarını geniş ölçekte uygulamak için teknik rehberlik ve tasarım tavsiyesi sağlar. Uzmanlığı, uygulama mimarisi, büyük veri, analitik ve makine öğrenimini kapsar.

Kaynak: https://aws.amazon.com/blogs/machine-learning/process-documents-containing-handwritten-tabular-content-using-amazon-textract-and-amazon-a2i/

spot_img

En Son İstihbarat

spot_img

Bizimle sohbet

Merhaba! Size nasıl yardım edebilirim?