Spaces:
Sleeping
Sleeping
Update app.py
Browse files
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()
|