70 lines
3.3 KiB
Python
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() |