Files
trueconf_bot/search_bot/parse_pdf.py

70 lines
3.3 KiB
Python

import os
import requests
import json
# Адрес вашего сервера с поднятым Docker-контейнером Unstructured
API_URL = "http://172.16.80.250:9000/general/v0/general"
def main():
# 1. Ищем все файлы .pdf и .docx в текущей директории
target_files = [f for f in os.listdir('.') if f.lower().endswith(('.pdf', '.docx'))]
target_files.sort() # Для порядка
if not target_files:
print("❌ В текущей папке не найдено ни одного PDF или DOCX файла.")
return
print(f"📂 Найдено файлов для обработки: {len(target_files)}")
# 2. Проходимся по всем найденным файлам
for target_file in target_files:
print(f"\n📄 Обрабатывается файл: {target_file}")
print(f"⏳ Отправляем на сервер {API_URL}... (это может занять время)")
# Настройки запроса (параметры PDF просто игнорируются сервером для DOCX)
payload_data = {
"strategy": "hi_res",
"languages": ["rus"],
"pdf_infer_table_structure": "true"
}
# Определяем правильный MIME-тип для файла
ext = target_file.lower().split('.')[-1]
if ext == 'pdf':
mime_type = "application/pdf"
else:
mime_type = "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
# 3. Открываем файл и делаем POST-запрос
try:
with open(target_file, "rb") as f:
files = {
"files": (target_file, f, mime_type)
}
# Таймаут 300 секунд
response = requests.post(API_URL, files=files, data=payload_data, timeout=300)
response.raise_for_status()
# 4. Получаем JSON и сохраняем его в файл
parsed_data = response.json()
output_filename = f"{os.path.splitext(target_file)[0]}_parsed.json"
with open(output_filename, "w", encoding="utf-8") as out_f:
json.dump(parsed_data, out_f, ensure_ascii=False, indent=4)
print(f"✅ Готово! Результат успешно сохранен в файл: {output_filename}")
except requests.exceptions.ConnectionError:
print(f"❌ Ошибка соединения! Проверьте доступность {API_URL}")
except requests.exceptions.Timeout:
print("❌ Сервер слишком долго не отвечал.")
except requests.exceptions.HTTPError as e:
print(f"❌ Сервер вернул ошибку: {e}")
if response.text:
print(f"Детали ошибки от сервера: {response.text}")
except Exception as e:
print(f"❌ Произошла непредвиденная ошибка при обработке {target_file}: {e}")
if __name__ == "__main__":
main()