Документы с флажками, которые необходимо извлечь
Я пытаюсь извлечь вышеуказанный документ в формате json. В идеале я хочу, чтобы было указано, какой флажок в предложении установлен. Но в настоящее время то, что дает AWS Textract, приведено чуть ниже.
{
"checkbox_statuses": [
{"selected": "Not Selected"},
{"selected": "Not Selected"},
{"selected": "Not Selected"},
{"selected": "Not Selected"},
{"selected": "Not Selected"},
{"selected": "Not Selected"},
{"selected": "Not Selected"},
{"selected": "Not Selected"},
{"selected": "Not Selected"},
{"selected": "Selected"},
{"selected": "Not Selected"},
{"selected": "Selected"}
]
}
Для этой задачи я использую AWS Lambda, и ниже приведены основные функции, которые я для этого использовал. Я хочу, чтобы вывод json показывал, какая информация в основном была проверена. После поиска я смог найти только то, что если в Textract не обнаружено никаких связей, мне нужно будет использовать географическое местоположение, чтобы сопоставить их вручную. Но я просто надеюсь, что есть лучший способ.
def start_document_analysis(bucket, document_key):
try:
response = textract_client.start_document_analysis(
DocumentLocation={
'S3Object': {'Bucket': bucket, 'Name': document_key}
},
FeatureTypes=['FORMS'] # Enable form analysis for checkbox detection
)
return response['JobId']
except Exception as e:
print(f"Error starting document analysis for {document_key}: {str(e)}")
return None
def check_job_status(job_id):
while True:
response = textract_client.get_document_analysis(JobId=job_id)
status = response['JobStatus']
if status in ['SUCCEEDED', 'FAILED']:
return status
print("Waiting for Textract job to complete...")
time.sleep(5)
def get_textract_results(job_id):
blocks = []
next_token = None
while True:
if next_token:
response = textract_client.get_document_analysis(JobId=job_id, NextToken=next_token)
else:
response = textract_client.get_document_analysis(JobId=job_id)
blocks.extend(response['Blocks'])
next_token = response.get('NextToken')
if not next_token:
break
return blocks
def extract_checkbox_status(blocks):
checkbox_results = []
text_blocks = {block['Id']: block for block in blocks if block['BlockType'] == 'WORD' or block['BlockType'] == 'LINE'}
for block in blocks:
if block['BlockType'] == 'SELECTION_ELEMENT':
selection_status = 'Selected' if block['SelectionStatus'] == 'SELECTED' else 'Not Selected'
associated_text = []
# Check if the checkbox has relationships with other blocks
if 'Relationships' in block:
for relationship in block['Relationships']:
if relationship['Type'] == 'CHILD':
for related_id in relationship['Ids']:
related_text_block = text_blocks.get(related_id)
if related_text_block:
associated_text.append(related_text_block['Text'])
# Compile the text related to the checkbox
full_text = ' '.join(associated_text)
checkbox_results.append({'selected': selection_status, 'text': full_text})
return checkbox_results
Из моих исследований выяснилось, что если Textract не может установить связь между флажками и соответствующим им текстом, мне, возможно, придется сопоставить их вручную, используя их географическое положение. Прежде чем я пойду по этому пути, есть ли лучший способ добиться этого или метод повышения точности Textract при связывании флажков с соответствующим текстом?
Вот пример журналов CloudWatch для одного флажок и соответствующий текст:
{
"BlockType": "LINE",
"Confidence": 99.96,
"Text": "Choose one of the following:",
"Geometry": {...},
"Id": "3849c56d-4b77-480f-881a-400ea17943c2",
"Relationships": [{"Type": "CHILD", "Ids": ["461dc39b-80a1-430e-865a-866381a45fde", ...]}],
"Page": 1
}
{
"BlockType": "SELECTION_ELEMENT",
"Confidence": 91.21,
"Geometry": {...},
"Id": "bda2125c-1379-4632-8a15-922d0728d390",
"SelectionStatus": "NOT_SELECTED",
"Page": 1
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... nformation
AWS Textract для извлечения информации о флажках ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как извлечь и объединить текст и таблицы из PDF с помощью AWS Textract
Anonymous » » в форуме Python - 0 Ответы
- 33 Просмотры
-
Последнее сообщение Anonymous
-