F-allahmoradi commited on
Commit
8bec47b
·
verified ·
1 Parent(s): 52268f5

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +23 -12
app.py CHANGED
@@ -36,7 +36,6 @@ def normalize_text(text: str) -> str:
36
  for wrong, correct in corrections.items():
37
  text = text.replace(wrong, correct)
38
 
39
- # حذف کلمات غیرمعنی‌دار یا عدد/حرف لاتین وسط متن
40
  text = re.sub(r'\b[0-9a-zA-Z\-]+\b', '', text)
41
  text = re.sub(r'[^\w\s\u200c\u200d\u200e\u200f\u0600-\u06FF]', ' ', text)
42
  text = re.sub(r'\s+', ' ', text).strip()
@@ -50,19 +49,18 @@ def normalize_text(text: str) -> str:
50
  # حذف نویز و اعداد وسط متن
51
  # ----------------------------------------------------------------------
52
  def remove_noise(text: str) -> str:
53
- # حذف اعداد فارسی و انگلیسی وسط متن
54
  text = re.sub(r'\b[0-9۰-۹]+\b', '', text)
55
  text = re.sub(r'\s+', ' ', text).strip()
56
  return text
57
 
58
  # ----------------------------------------------------------------------
59
- # فرمت شبیه کتاب (حذف شکست خط وسط جمله)
60
  # ----------------------------------------------------------------------
61
  def format_as_book(text: str) -> str:
62
- text = re.sub(r'\n+', '\n', text) # چند خط پشت سر هم → ۱ خط
63
- text = re.sub(r'(?<![.؟!])\n\s*', ' ', text) # خط وسط جمله → فاصله
64
- text = re.sub(r'\s+', ' ', text).strip() # حذف فاصله اضافی
65
- text = re.sub(r'([.؟!])\s+', r'\1\n', text) # بعد از پایان جمله، خط جدید
66
  return text
67
 
68
  # ----------------------------------------------------------------------
@@ -78,7 +76,7 @@ def ocr_from_image(image: Image.Image) -> str:
78
  return text
79
 
80
  # ----------------------------------------------------------------------
81
- # OCR از PDF
82
  # ----------------------------------------------------------------------
83
  def ocr_from_pdf(pdf_path: str, start_page: int, end_page: int) -> str:
84
  try:
@@ -91,13 +89,26 @@ def ocr_from_pdf(pdf_path: str, start_page: int, end_page: int) -> str:
91
  return "❌ شماره صفحه شروع از تعداد کل صفحات بیشتر است."
92
 
93
  images = convert_from_path(pdf_path, dpi=300, first_page=start_page, last_page=end_page)
94
-
95
  all_text = f"📊 استخراج صفحات {start_page} تا {end_page} از {total_pages} صفحه:\n\n"
 
 
 
 
 
 
96
  for i, img in enumerate(images):
97
  page_num = start_page + i
 
 
 
98
  text = ocr_from_image(img)
99
  all_text += f"--- صفحه {page_num} ---\n{text}\n\n"
 
 
 
 
100
 
 
101
  return all_text.strip()
102
 
103
  except Exception as e:
@@ -162,7 +173,7 @@ def main():
162
  if st.button("🚀 استخراج متن از PDF", use_container_width=True):
163
  with st.spinner("در حال پردازش..."):
164
  result = ocr_from_pdf(tmp_path, start_page, end_page)
165
- st.markdown("### 📝 متن استخراج‌شده (فرمت کتابی)")
166
  st.text_area("📘 خروجی OCR", result, height=600)
167
  st.download_button("📥 دانلود متن", result, file_name="extracted_text.txt")
168
 
@@ -172,7 +183,7 @@ def main():
172
  with st.spinner("در حال پردازش..."):
173
  image = Image.open(tmp_path)
174
  result = ocr_from_image(image)
175
- st.markdown("### 📝 متن استخراج‌شده (فرمت کتابی)")
176
  st.text_area("📘 خروجی OCR", result, height=600)
177
  st.download_button("📥 دانلود متن", result, file_name="extracted_text.txt")
178
 
@@ -183,4 +194,4 @@ def main():
183
  st.info("📁 لطفاً یک فایل آپلود کنید.")
184
 
185
  if __name__ == "__main__":
186
- main()
 
36
  for wrong, correct in corrections.items():
37
  text = text.replace(wrong, correct)
38
 
 
39
  text = re.sub(r'\b[0-9a-zA-Z\-]+\b', '', text)
40
  text = re.sub(r'[^\w\s\u200c\u200d\u200e\u200f\u0600-\u06FF]', ' ', text)
41
  text = re.sub(r'\s+', ' ', text).strip()
 
49
  # حذف نویز و اعداد وسط متن
50
  # ----------------------------------------------------------------------
51
  def remove_noise(text: str) -> str:
 
52
  text = re.sub(r'\b[0-9۰-۹]+\b', '', text)
53
  text = re.sub(r'\s+', ' ', text).strip()
54
  return text
55
 
56
  # ----------------------------------------------------------------------
57
+ # فرمت شبیه کتاب
58
  # ----------------------------------------------------------------------
59
  def format_as_book(text: str) -> str:
60
+ text = re.sub(r'\n+', '\n', text)
61
+ text = re.sub(r'(?<![.؟!])\n\s*', ' ', text)
62
+ text = re.sub(r'\s+', ' ', text).strip()
63
+ text = re.sub(r'([.؟!])\s+', r'\1\n', text)
64
  return text
65
 
66
  # ----------------------------------------------------------------------
 
76
  return text
77
 
78
  # ----------------------------------------------------------------------
79
+ # OCR از PDF (با نمایش پیشرفت)
80
  # ----------------------------------------------------------------------
81
  def ocr_from_pdf(pdf_path: str, start_page: int, end_page: int) -> str:
82
  try:
 
89
  return "❌ شماره صفحه شروع از تعداد کل صفحات بیشتر است."
90
 
91
  images = convert_from_path(pdf_path, dpi=300, first_page=start_page, last_page=end_page)
 
92
  all_text = f"📊 استخراج صفحات {start_page} تا {end_page} از {total_pages} صفحه:\n\n"
93
+
94
+ # 🟢 نوار پیشرفت و متن وضعیت
95
+ progress_bar = st.progress(0)
96
+ status_text = st.empty()
97
+
98
+ total_to_process = len(images)
99
  for i, img in enumerate(images):
100
  page_num = start_page + i
101
+ status_text.text(f"در حال پردازش صفحه {page_num} از {end_page} ...")
102
+
103
+ # OCR صفحه
104
  text = ocr_from_image(img)
105
  all_text += f"--- صفحه {page_num} ---\n{text}\n\n"
106
+
107
+ # بروزرسانی درصد
108
+ percent = int(((i + 1) / total_to_process) * 100)
109
+ progress_bar.progress(percent)
110
 
111
+ status_text.text("✅ پردازش کامل شد.")
112
  return all_text.strip()
113
 
114
  except Exception as e:
 
173
  if st.button("🚀 استخراج متن از PDF", use_container_width=True):
174
  with st.spinner("در حال پردازش..."):
175
  result = ocr_from_pdf(tmp_path, start_page, end_page)
176
+ st.markdown("### 📝 متن استخراج‌شده ")
177
  st.text_area("📘 خروجی OCR", result, height=600)
178
  st.download_button("📥 دانلود متن", result, file_name="extracted_text.txt")
179
 
 
183
  with st.spinner("در حال پردازش..."):
184
  image = Image.open(tmp_path)
185
  result = ocr_from_image(image)
186
+ st.markdown("### 📝 متن استخراج‌شده")
187
  st.text_area("📘 خروجی OCR", result, height=600)
188
  st.download_button("📥 دانلود متن", result, file_name="extracted_text.txt")
189
 
 
194
  st.info("📁 لطفاً یک فایل آپلود کنید.")
195
 
196
  if __name__ == "__main__":
197
+ main()