기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
양식 문서에서 키-값 페어 추출
다음 Python 예제에서는 맵에 저장된 블록 객체에서 양식 문서의 키-값 페어를 추출하는 방법을 보여줍니다. 블록 객체는 AnalyzeDocument에 대한 호출에서 반환됩니다. 자세한 내용은 양식 데이터(키-값 페어) 단원을 참조하십시오.
다음 함수를 사용합니다.
get_kv_map- AnalyzeDocument를 호출하고 KEY 및 VALUE BLOCK 객체를 맵에 저장합니다.get_kv_relationship및find_value_block- 맵에서 키-값 관계를 구성합니다.
양식 문서에서 키-값 페어를 추출하려면
환경을 구성합니다. 자세한 내용은 사전 조건 단원을 참조하십시오.
-
다음 예제 코드를 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) 명령 프롬프트에 다음 명령을 입력합니다.
file를 분석하려는 문서 이미지 파일로 바꿉니다.python textract_python_kv_parser.pyfile메시지가 표시되면 입력 문서에 있는 키를 입력합니다. 코드가 키를 감지하면 키의 값이 표시됩니다.