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à.
Estrazione di Key-Value coppie da un documento di modulo
Il seguente esempio di Python mostra come estrarre coppie chiave-valore nei documenti del modulo da oggetti Block archiviati in una mappa. Gli oggetti a blocchi vengono restituiti da una chiamata a. AnalyzeDocument Per ulteriori informazioni, consulta Dati del modulo (Key-Value coppie).
Si utilizzano le seguenti funzioni:
get_kv_map— Richiama AnalyzeDocumente memorizza gli oggetti KEY e VALUE BLOCK in una mappa.get_kv_relationshipefind_value_block— Costruisce le relazioni chiave-valore a partire dalla mappa.
Per estrarre coppie chiave-valore da un documento di modulo
Configura il tuo ambiente. Per ulteriori informazioni, consulta Prerequisiti.
-
Salva il seguente codice di esempio in un file denominato textract_python_kv_parser.py. Nella funzione
get_kv_map,profile-namesostituitela con il nome di un profilo che può assumere il ruolo eregioncon la regione in cui desiderate eseguire il codice.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) Al prompt dei comandi, immettere il seguente comando.
fileSostituitelo con il file di immagine del documento che desiderate analizzare.python textract_python_kv_parser.pyfileQuando richiesto, inserisci una chiave presente nel documento di input. Se il codice rileva la chiave, ne visualizza il valore.