Как прочитать исходный PDF-файл в источнике данных индексатора в пользовательском WebApiSkill после включения «РазрешитьPython

Программы на Python
Anonymous
Как прочитать исходный PDF-файл в источнике данных индексатора в пользовательском WebApiSkill после включения «Разрешить

Сообщение Anonymous »

В настройках индексатора я вижу следующее:
Изображение

При наведении на него курсора я читаю следующее:

True означает, что исходные данные файла получены из вашего BLOB-объекта. источник данных
сохраняется. Это позволяет передать исходный файл пользовательскому навыку
или навыку «Извлечение документов».

Как прочитать исходный PDF-файл в связанный источник данных большого двоичного объекта в пользовательском WebApiSkill?

Код: Выделить всё

file_data_base64 = value.get('data', {}).get('file_data', '')
...

РЕДАКТИРОВАТЬ

Я включил Разрешить набору навыков читать данные файла в индексаторе. Моя полная настройка:
  • Входные данные WebApiSkill

Код: Выделить всё

inputs=[
InputFieldMappingEntry(name="file_data", source="/document/file_data")
],
  • Чтение входных данных WebApiSkill

Код: Выделить всё

import azure.functions as func
import datetime
import json
import logging
import base64
import fitz
from io import BytesIO

app = func.FunctionApp()
logging.basicConfig(level=logging.INFO)

@app.route(route="CustomSplitSkill", auth_level=func.AuthLevel.FUNCTION)
def CustomSplitSkill(req: func.HttpRequest) -> func.HttpResponse:
logging.info('Python HTTP trigger function processed a request.')

try:
req_body = req.get_json()
logging.info('Request body parsed successfully.')
except ValueError:
logging.error(f"Invalid input: {e}")
return func.HttpResponse("Invalid input", status_code=400)

# 'values' expected top-level key in the request body
response_body = {"values": []}
for value in req_body.get('values', []):
recordId = value.get('recordId')
file_data_base64 = value.get('data', {}).get('file_data', '').get('data', '')
if not file_data_base64:
logging.error("No file_data found in the request.")
return func.HttpResponse("Invalid input: No file_data found", status_code=400)

try:
file_data = base64.b64decode(file_data_base64)

try:
pdf_document = fitz.open(stream=BytesIO(file_data), filetype='pdf')
except fitz.FileDataError as e:
logging.error(f"Failed to open PDF document: {e}")
return func.HttpResponse("Failed to open PDF document", status_code=400)
except Exception as e:
logging.error(f"An unexpected error occurred while opening the PDF document: {e}")
return func.HttpResponse("An unexpected error occurred", status_code=500)

if pdf_document.page_count == 0:
logging.error("No pages found in the PDF document.")
return func.HttpResponse("Invalid PDF: No pages found", status_code=400)

extracted_text = ""
for page_num in range(pdf_document.page_count):
page = pdf_document.load_page(page_num)
extracted_text += page.get_text()

combined_list = [{'textItems': ['text1', 'text2'], 'numberItems': [0, 1]}]  # i deleted the chunking and associated page extraction for simplicity

response_record = {
"recordId": recordId,
"data": {
"subdata": combined_list
}
}
response_body['values'].append(response_record)
except Exception as e:
logging.error(f"Error processing file_data: {e}")
return func.HttpResponse("Error processing file_data", status_code=500)

logging.info('Function executed successfully.')
return func.HttpResponse(json.dumps(response_body), mimetype="application/json")
Ошибка:

Код: Выделить всё

Message:
Could not execute skill because the Web Api request failed.

Details:
Web Api response status: 'NotFound', Web Api response details: ''
Учитывая, что у меня есть проекции, я не могу правильно отладить это, поскольку отладка проекций не поддерживается. Похоже, что при ведении журнала не регистрируется конкретная ошибка, несмотря на обработку ошибок и проверки.


Подробнее здесь: https://stackoverflow.com/questions/786 ... tom-webapi

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