As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Extraindo Key-Value pares de um documento de formulário
O exemplo de Python a seguir mostra como extrair pares de valores-chave em documentos de formulário de objetos Block armazenados em um mapa. Objetos de bloco são retornados de uma chamada para AnalyzeDocument. Para obter mais informações, consulte Dados do formulário (Key-Value pares).
Você usa as seguintes funções:
get_kv_map— Chama AnalyzeDocumente armazena os objetos KEY e VALUE BLOCK em um mapa.get_kv_relationshipefind_value_block— Constrói as relações de valores-chave a partir do mapa.
Para extrair pares de valores-chave de um documento de formulário
Configure seu ambiente. Para obter mais informações, consulte Pré-requisitos.
-
Salve o código de exemplo a seguir em um arquivo chamado textract_python_kv_parser.py. Na função
get_kv_map,profile-namesubstitua pelo nome de um perfil que pode assumir a função eregionpela região na qual você deseja executar o 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) No prompt de comando, digite o comando a seguir.
fileSubstitua pelo arquivo de imagem do documento que você deseja analisar.python textract_python_kv_parser.pyfileQuando solicitado, insira uma chave que esteja no documento de entrada. Se o código detectar a chave, ele exibirá o valor da chave.