View a markdown version of this page

Mengekstrak Key-Value Pasangan dari Dokumen Formulir - Amazon Textract

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Mengekstrak Key-Value Pasangan dari Dokumen Formulir

Contoh Python berikut menunjukkan cara mengekstrak pasangan kunci-nilai dalam dokumen formulir dari objek Block yang disimpan dalam peta. Objek blok dikembalikan dari panggilan ke AnalyzeDocument. Untuk informasi selengkapnya, lihat Data Formulir (Key-Value Pasangan).

Anda menggunakan fungsi-fungsi berikut:

  • get_kv_map— Panggilan AnalyzeDocument, dan menyimpan objek KEY dan VALUE BLOCK di peta.

  • get_kv_relationshipdan find_value_block — Membangun hubungan kunci-nilai dari peta.

Untuk mengekstrak pasangan kunci-nilai dari dokumen formulir
  1. Konfigurasikan lingkungan Anda. Untuk informasi selengkapnya, lihat Prasyarat.

  2. Simpan kode contoh berikut ke file bernama textract_python_kv_parser.py. Dalam fungsinyaget_kv_map, ganti profile-name dengan nama profil yang dapat mengambil peran dan region dengan wilayah tempat Anda ingin menjalankan kode.

    import boto3 import sys import re import json from collections import defaultdict def get_kv_map(file_name): with open(file_name, 'rb') as file: img_test = file.read() bytes_test = bytearray(img_test) print('Image loaded', file_name) # process using image bytes session = boto3.Session(profile_name='profile-name') client = session.client('textract', region_name='region') response = client.analyze_document(Document={'Bytes': bytes_test}, FeatureTypes=['FORMS']) # Get the text blocks blocks = response['Blocks'] # get key and value maps key_map = {} value_map = {} block_map = {} for block in blocks: block_id = block['Id'] block_map[block_id] = block if block['BlockType'] == "KEY_VALUE_SET": if 'KEY' in block['EntityTypes']: key_map[block_id] = block else: value_map[block_id] = block return key_map, value_map, block_map def get_kv_relationship(key_map, value_map, block_map): kvs = defaultdict(list) for block_id, key_block in key_map.items(): value_block = find_value_block(key_block, value_map) key = get_text(key_block, block_map) val = get_text(value_block, block_map) kvs[key].append(val) return kvs def find_value_block(key_block, value_map): for relationship in key_block['Relationships']: if relationship['Type'] == 'VALUE': for value_id in relationship['Ids']: value_block = value_map[value_id] return value_block def get_text(result, blocks_map): text = '' if 'Relationships' in result: for relationship in result['Relationships']: if relationship['Type'] == 'CHILD': for child_id in relationship['Ids']: word = blocks_map[child_id] if word['BlockType'] == 'WORD': text += word['Text'] + ' ' if word['BlockType'] == 'SELECTION_ELEMENT': if word['SelectionStatus'] == 'SELECTED': text += 'X ' return text def print_kvs(kvs): for key, value in kvs.items(): print(key, ":", value) def search_value(kvs, search_key): for key, value in kvs.items(): if re.search(search_key, key, re.IGNORECASE): return value def main(file_name): key_map, value_map, block_map = get_kv_map(file_name) # Get Key Value relationship kvs = get_kv_relationship(key_map, value_map, block_map) print("\n\n== FOUND KEY : VALUE pairs ===\n") print_kvs(kvs) # Start searching a key value while input('\n Do you want to search a value for a key? (enter "n" for exit) ') != 'n': search_key = input('\n Enter a search key:') print('The value is:', search_value(kvs, search_key)) if __name__ == "__main__": file_name = sys.argv[1] main(file_name)
  3. Pada prompt perintah, masukkan perintah berikut. Ganti file dengan file gambar dokumen yang ingin Anda analisis.

    python textract_python_kv_parser.py file
  4. Saat Anda diminta, masukkan kunci yang ada di dokumen input. Jika kode mendeteksi kunci, itu akan menampilkan nilai kunci.