Extraction de paires clé-valeur à partir d'un document de formulaire - Amazon Textract

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Extraction de paires clé-valeur à partir d'un document de formulaire

L'exemple Python suivant montre comment extraire des paires clé-valeur dans des documents de formulaire à partir deBlockobjets stockés dans une carte. Les objets Block sont renvoyés à partir d'un appel àAnalyzeDocument. Pour plus d'informations, consultez Données de formulaire (paires clé-valeur).

Vous utilisez les fonctions suivantes :

  • get_kv_map— AppelsAnalyzeDocument, et stocke les objets KEY et VALUE BLOCK dans une carte.

  • get_kv_relationshipetfind_value_block: construit les relations clé-valeur à partir de la carte.

Pour extraire les paires clé-valeur d'un document de formulaire
  1. Configurez votre environnement. Pour plus d'informations, consultez Prérequis.

  2. Enregistrez l'exemple de code suivant dans un fichier nommétextract_python_kv_parser.py.

    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. A partir d'une invite de commande, entrez la commande suivante. Remplacezfileavec le fichier image du document que vous souhaitez analyser.

    textract_python_kv_parser.py file
  4. Lorsque vous y êtes invité, entrez une clé qui se trouve dans le document d'entrée. Si le code détecte la clé, il affiche la valeur de la clé.