مخزن باز · Python · FastAPI

لوگوی PDF Text Extractor

PDF Text Extractor

سرویس REST برای استخراج متن از فایل‌های PDF: اگر PDF متن داشته باشد، مستقیم استخراج می‌کند؛ اگر تصویر-محور باشد، صفحات را به تصویر تبدیل کرده و OCR انجام می‌دهد.

  • Python
  • FastAPI
  • OCR
  • PyMuPDF
  • Tesseract
  • Docker

این پروژه چه مشکلی را حل می‌کند؟

خیلی از PDFها متن واقعی ندارند (اسکن/عکس هستند). `PDF Text Extractor` با تشخیص نوع PDF، بین استخراج متنی و OCR یکی را انتخاب می‌کند تا نتیجه قابل استفاده باشد.

خروجی سرویس ساختاریافته است: متن هر صفحه همراه با `combined_text` (همه متن‌ها به هم چسبیده) برمی‌گردد تا در موتورهای جستجو، RAG، یا پردازش‌های خودکار استفاده کنید.

این سرویس فقط استخراج می‌کند؛ تصمیم‌گیری درباره «بعدش چه کنیم» با اپلیکیشن شماست (مثلاً ذخیره در دیتابیس، ایندکس کردن، یا ارسال به مدل‌های زبانی).

امکانات اصلی

مناسب استفاده به عنوان یک ماژول API در پروژه‌های نرم‌افزاری.

پشتیبانی دو حالته

برای PDFهای متن‌محور از استخراج متنی و برای PDFهای تصویرمحور از OCR استفاده می‌کند.

خروجی صفحه‌به‌صفحه

متن هر صفحه با `page_number` برمی‌گردد تا بتوانید ساختار سند را حفظ کنید.

Combined text

همه متن‌ها در `combined_text` جمع می‌شوند تا سریع وارد pipelineهای دیگر شوید.

API تمیز و ساده

دو endpoint اصلی: `GET /health` و `POST /extract-text` با `multipart/form-data`.

استقرار با Docker

قابل اجرا به شکل کانتینر (با راهنمای Docker در README) برای production و محیط‌های توسعه.

وابستگی‌های OCR

برای OCR از Tesseract و برای تبدیل PDF به تصویر از Poppler استفاده می‌شود (طبق README).

نحوه استفاده (عمومی)

از نصب تا اولین استخراج متن

  1. نصب پیش‌نیازها

    روی سیستم یا کانتینر، Tesseract OCR و Poppler نصب شود (طبق README). سپس Python dependencies را با `pip install -r requirements.txt` آماده کنید.

  2. اجرای سرویس

    سرویس را با `uvicorn main_alternative:app --host 0.0.0.0 --port 8000` (یا نسخه اصلی) اجرا کنید. قبل از ترافیک واقعی با `GET /health` مطمئن شوید بالا آمده است.

  3. ارسال PDF

    با HTTP client خود فایل PDF را در قالب `multipart/form-data` به `POST /extract-text` ارسال کنید. در README نمونه `curl` هم وجود دارد.

  4. استفاده از خروجی

    در پاسخ، متن صفحه‌به‌صفحه و `combined_text` دریافت می‌کنید؛ سپس می‌توانید آن را برای جستجو/نمایش/تحلیل یا ارسال به پروژه‌های هوش مصنوعی استفاده کنید.

  5. یکپارچه‌سازی در محصول

    این سرویس را به عنوان یک ماژول API پشت reverse proxy یا در شبکه داخلی deploy کنید، و در سیستم خودتان cache/retry مناسب اضافه نمایید.

مرجع endpointها

آنچه باید برای کال کردن سرویس بدانید

Health و استخراج متن

پورت پیش‌فرض در README: 8000

GET /health
بررسی وضعیت سرویس. برای healthcheck و مانیتورینگ مفید است.
POST /extract-text
آپلود PDF با `multipart/form-data` (فیلد `file`). خروجی: `pages` + `combined_text` + `total_pages`.

پاسخ JSON (خلاصه)

ساختار پاسخ برای استفاده در pipeline شما

{ pages: [{ page_number, text }], combined_text, total_pages }
می‌توانید متن هر صفحه را جداگانه ایندکس کنید یا کل متن را یکپارچه برای پردازش‌های بعدی استفاده کنید.

استقرار

مطابق راهنمای Docker در README مخزن

docker-compose up --build
اجرای سرویس با Compose برای توسعه و تست سریع.

لینک‌ها

مخزن و مستندات کامل

مخزن GitHub

سورس، Dockerfile/Compose و README با نمونه‌های API.

https://github.com/mbasirmajd/rmshub-pdf2text

همه پروژه‌های مخزن باز

مشاهده فهرست پروژه‌ها در سایت

/open-source

نکات مهم

  • اگر PDF کاملاً اسکن‌شده باشد، کیفیت OCR به کیفیت تصویر صفحات بستگی دارد.
  • برای اسناد بزرگ، زمان پاسخ و مصرف منابع می‌تواند بیشتر شود؛ در production timeout/retry در کلاینت در نظر بگیرید.
  • این سرویس خروجی ساختاریافته برمی‌گرداند و برای سناریوهای هوش مصنوعی (مثل RAG و تحلیل اسناد) مناسب است.