AWS Textract для извлечения информации о флажкахPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 AWS Textract для извлечения информации о флажках

Сообщение Anonymous »

Документы с флажками, которые необходимо извлечь
Я пытаюсь извлечь вышеуказанный документ в формате 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»