suprimedev commited on
Commit
da8d102
·
verified ·
1 Parent(s): 4f46d61

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +27 -25
app.py CHANGED
@@ -1,11 +1,13 @@
1
  import gradio as gr
2
- import fitz # همان PyMuPDF
3
  import arabic_reshaper
 
 
4
 
5
 
6
  def extract_text_from_pdf(pdf_file):
7
  """
8
- استخراج متن از فایل PDF با پشتیبانی از زبان‌های راست به چپ
9
  """
10
  if pdf_file is None:
11
  return "لطفاً یک فایل PDF آپلود کنید.", None
@@ -16,7 +18,15 @@ def extract_text_from_pdf(pdf_file):
16
 
17
  for page_num in range(len(pdf_document)):
18
  page = pdf_document[page_num]
19
- text = page.get_text()
 
 
 
 
 
 
 
 
20
 
21
  # پردازش متن فارسی/عربی
22
  if any('\u0600' <= char <= '\u06FF' or '\u0750' <= char <= '\u077F' for char in text):
@@ -27,7 +37,7 @@ def extract_text_from_pdf(pdf_file):
27
  pdf_document.close()
28
  extracted_text = "\n".join(all_text)
29
 
30
- # ذخیره در فایل txt موقت
31
  output_file = "extracted_text.txt"
32
  with open(output_file, "w", encoding="utf-8") as f:
33
  f.write(extracted_text)
@@ -40,26 +50,28 @@ def extract_text_from_pdf(pdf_file):
40
 
41
  def create_interface():
42
  """
43
- ایجاد رابط کاربری Gradio
44
  """
45
  with gr.Blocks(theme=gr.themes.Soft()) as interface:
46
  gr.Markdown(
47
  """
48
- # 📄 استخراج متن از PDF
49
 
50
- این برنامه متن را از فایل‌های PDF استخراج می‌کند و از زبان‌های فارسی، عربی و انگلیسی پشتیبانی می‌کند.
 
 
51
 
52
  ### نحوه استفاده:
53
- 1. فایل PDF خود را آپلود کنید
54
- 2. روی دکمه "استخراج متن" کلیک کنید
55
- 3. متن استخراج شده را مشاهده و در صورت نیاز دانلود کنید
56
  """
57
  )
58
 
59
  with gr.Row():
60
  with gr.Column(scale=1):
61
  pdf_input = gr.File(
62
- label="فایل PDF را آپلود کنید",
63
  file_types=[".pdf"],
64
  type="filepath"
65
  )
@@ -67,29 +79,19 @@ def create_interface():
67
  "🔍 استخراج متن",
68
  variant="primary"
69
  )
70
-
71
- gr.Markdown(
72
- """
73
- ### ویژگی‌ها:
74
- - ✅ پشتیبانی از زبان فارسی
75
- - ✅ پشتیبانی از زبان عربی
76
- - ✅ پشتیبانی از زبان انگلیسی
77
- - ✅ امکان دانلود خروجی به صورت txt
78
- """
79
- )
80
 
81
  with gr.Column(scale=2):
82
  text_output = gr.Textbox(
83
- label="متن استخراج شده",
84
- placeholder="متن استخراج شده در اینجا نمایش داده می‌شود...",
85
  lines=20,
86
  max_lines=30
87
  )
88
  download_output = gr.File(
89
- label="دانلود خروجی به صورت txt"
90
  )
91
 
92
- # اتصال تابع به دکمه
93
  extract_btn.click(
94
  fn=extract_text_from_pdf,
95
  inputs=pdf_input,
 
1
  import gradio as gr
2
+ import fitz # PyMuPDF
3
  import arabic_reshaper
4
+ import pytesseract
5
+ from PIL import Image
6
 
7
 
8
  def extract_text_from_pdf(pdf_file):
9
  """
10
+ استخراج متن از PDF با پشتیبانی از OCR برای فایل‌های اسکن‌شده یا غیرقابل‌خواندن
11
  """
12
  if pdf_file is None:
13
  return "لطفاً یک فایل PDF آپلود کنید.", None
 
18
 
19
  for page_num in range(len(pdf_document)):
20
  page = pdf_document[page_num]
21
+
22
+ # تلاش اول: استخراج متن مستقیم
23
+ text = page.get_text("text")
24
+
25
+ # اگر متن خالی یا بی‌معنی بود → OCR
26
+ if not text.strip() or len(set(text)) < 10:
27
+ pix = page.get_pixmap(dpi=200) # صفحه به تصویر
28
+ img = Image.frombytes("RGB", [pix.width, pix.height], pix.samples)
29
+ text = pytesseract.image_to_string(img, lang="fas+ara+eng")
30
 
31
  # پردازش متن فارسی/عربی
32
  if any('\u0600' <= char <= '\u06FF' or '\u0750' <= char <= '\u077F' for char in text):
 
37
  pdf_document.close()
38
  extracted_text = "\n".join(all_text)
39
 
40
+ # ذخیره در فایل txt
41
  output_file = "extracted_text.txt"
42
  with open(output_file, "w", encoding="utf-8") as f:
43
  f.write(extracted_text)
 
50
 
51
  def create_interface():
52
  """
53
+ رابط کاربری Gradio
54
  """
55
  with gr.Blocks(theme=gr.themes.Soft()) as interface:
56
  gr.Markdown(
57
  """
58
+ # 📄 استخراج متن از PDF با OCR
59
 
60
+ این برنامه متن را از فایل‌های PDF استخراج می‌کند.
61
+ - ابتدا سعی می‌کند متن را مستقیماً بخواند.
62
+ - اگر PDF اسکن‌شده یا رمزگذاری‌شده باشد، از OCR (تشخیص متن از تصویر) استفاده می‌کند.
63
 
64
  ### نحوه استفاده:
65
+ 1. فایل PDF خود را آپلود کنید
66
+ 2. روی دکمه "استخراج متن" کلیک کنید
67
+ 3. متن استخراج‌شده را ببینید یا فایل txt را دانلود کنید
68
  """
69
  )
70
 
71
  with gr.Row():
72
  with gr.Column(scale=1):
73
  pdf_input = gr.File(
74
+ label="📂 فایل PDF را آپلود کنید",
75
  file_types=[".pdf"],
76
  type="filepath"
77
  )
 
79
  "🔍 استخراج متن",
80
  variant="primary"
81
  )
 
 
 
 
 
 
 
 
 
 
82
 
83
  with gr.Column(scale=2):
84
  text_output = gr.Textbox(
85
+ label="📝 متن استخراج شده",
86
+ placeholder="اینجا متن PDF نمایش داده می‌شود...",
87
  lines=20,
88
  max_lines=30
89
  )
90
  download_output = gr.File(
91
+ label="⬇️ دانلود خروجی به صورت txt"
92
  )
93
 
94
+ # اتصال دکمه
95
  extract_btn.click(
96
  fn=extract_text_from_pdf,
97
  inputs=pdf_input,