Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Extracción de Key-Value pares de un documento de formulario
El siguiente ejemplo de Python muestra cómo extraer pares clave-valor en documentos de formulario a partir de objetos Block almacenados en un mapa. Los objetos de bloque se devuelven de una llamada a. AnalyzeDocument Para obtener más información, consulte Datos del formulario (Key-Value pares).
Se utilizan las siguientes funciones:
get_kv_map— Llama AnalyzeDocumenty almacena los objetos KEY y VALUE BLOCK en un mapa.get_kv_relationshipyfind_value_block— Construye las relaciones clave-valor a partir del mapa.
Para extraer pares clave-valor de un documento modelo
Configure su entorno. Para obtener más información, consulte Requisitos previos.
-
Guarde el siguiente código de ejemplo en un archivo denominado textract_python_kv_parser.py. En la función
get_kv_map,profile-namesustitúyalo por el nombre de un perfil que pueda asumir la función yregionpor la región en la que desee ejecutar el código.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) En la línea de comandos, escriba el siguiente comando.
fileSustitúyalo por el archivo de imagen del documento que desee analizar.python textract_python_kv_parser.pyfileCuando se te pida, ingresa una clave que esté en el documento de entrada. Si el código detecta la clave, muestra su valor.