

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 양식 문서에서 키-값 페어 추출
<a name="examples-extract-kvp"></a>

다음 Python 예제에서는 맵에 저장된 [블록](https://docs.aws.amazon.com/textract/latest/APIReference/API_Block.html) 객체에서 양식 문서의 키-값 페어를 추출하는 방법을 보여줍니다. 블록 객체는 [AnalyzeDocument](https://docs.aws.amazon.com/textract/latest/APIReference/API_AnalyzeDocument.html)에 대한 호출에서 반환됩니다. 자세한 내용은 [양식 데이터(키-값 페어)](how-it-works-kvp.md) 단원을 참조하십시오.

다음 함수를 사용합니다.
+ `get_kv_map` - [AnalyzeDocument](https://docs.aws.amazon.com/textract/latest/APIReference/API_AnalyzeDocument.html)를 호출하고 KEY 및 VALUE BLOCK 객체를 맵에 저장합니다.
+ `get_kv_relationship` 및 `find_value_block` - 맵에서 키-값 관계를 구성합니다.

**양식 문서에서 키-값 페어를 추출하려면**

1. 환경을 구성합니다. 자세한 내용은 [사전 조건](examples-blocks.md#examples-prerequisites) 단원을 참조하십시오.

1. 다음 예제 코드를 *textract\_python\_kv\_parser.py*라는 파일에 저장합니다. 함수에서 `profile-name`를 역할을 수임할 수 있는 프로파일의 이름으로 `get_kv_map`바꾸고를 코드를 실행하려는 리전`region`으로 바꿉니다.

   ```
   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. 명령 프롬프트에 다음 명령을 입력합니다. `file`를 분석하려는 문서 이미지 파일로 바꿉니다.

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

1. 메시지가 표시되면 입력 문서에 있는 키를 입력합니다. 코드가 키를 감지하면 키의 값이 표시됩니다.