

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.

# Extraire des Key-Value paires à partir d'un formulaire
<a name="examples-extract-kvp"></a>

L'exemple Python suivant montre comment extraire des paires clé-valeur dans des documents de formulaire à partir d'objets [Block](https://docs.aws.amazon.com/textract/latest/APIReference/API_Block.html) stockés sur une carte. Les objets du bloc sont renvoyés par un appel à [AnalyzeDocument](https://docs.aws.amazon.com/textract/latest/APIReference/API_AnalyzeDocument.html). Pour de plus amples informations, veuillez consulter [Données du formulaire (Key-Value paires)](how-it-works-kvp.md).

Vous utilisez les fonctions suivantes : 
+ `get_kv_map`— Appelle [AnalyzeDocument](https://docs.aws.amazon.com/textract/latest/APIReference/API_AnalyzeDocument.html)et stocke les objets KEY et VALUE BLOCK sur une carte.
+ `get_kv_relationship`et `find_value_block` — Construit les relations clé-valeur à partir de la carte.

**Pour extraire des paires clé-valeur d'un formulaire**

1. Configurez votre environnement. Pour de plus amples informations, veuillez consulter [Conditions préalables](examples-blocks.md#examples-prerequisites).

1. Enregistrez l'exemple de code suivant dans un fichier nommé *textract\_python\_kv\_parser.py*. Dans la fonction`get_kv_map`, remplacez-le `profile-name` par le nom d'un profil qui peut assumer le rôle et `region` par la région dans laquelle vous souhaitez exécuter le code.

   ```
   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)
   ```

1. À l'invite de commande, entrez la commande suivante. `file`Remplacez-le par le fichier image du document que vous souhaitez analyser.

   ```
   python textract_python_kv_parser.py {{file}}
   ```

1. 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é. 