Extracción de pares clave-valor de un documento de formulario - Amazon Textract

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 pares clave-valor de un documento de formulario

El siguiente ejemplo de Python muestra cómo extraer pares clave-valor en documentos de formulario deBlockobjetos que se almacenan en un mapa. Los objetos de bloque se devuelven de una llamada aAnalyzeDocument. Para obtener más información, consulte Datos de formulario (pares clave-valor).

Utiliza las siguientes funciones:

  • get_kv_map— LlamadasAnalyzeDocumenty almacena los objetos KEY y VALUE BLOCK en un mapa.

  • get_kv_relationshipyfind_value_block: construye las relaciones clave-valor desde el mapa.

Para extraer pares clave-valor de un documento de formulario
  1. Configure el entorno. Para obtener más información, consulte Requisitos previos.

  2. Copie el siguiente código de ejemplo en un archivo llamadotextract_python_kv_parser.py que es.

    import boto3 import sys import re import json 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 client = boto3.client('textract') 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 = {} 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] = 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. En el símbolo del sistema, escriba el siguiente comando. Reemplazarfilecon el archivo de imagen del documento que desea analizar.

    textract_python_kv_parser.py file
  4. Cuando se te solicite, introduce una clave que se encuentra en el documento de entrada. Si el código detecta la clave, muestra el valor de la clave.