Spaces:
Sleeping
Sleeping
""" | |
خدمة استخراج النصوص من المستندات | |
""" | |
import os | |
import PyPDF2 | |
import docx | |
import pandas as pd | |
from pathlib import Path | |
import config | |
class TextExtractor: | |
"""استخراج النصوص من المستندات المختلفة""" | |
def __init__(self): | |
pass | |
def extract_from_pdf(self, file_path): | |
"""استخراج النص من ملف PDF""" | |
text = "" | |
try: | |
with open(file_path, 'rb') as file: | |
pdf_reader = PyPDF2.PdfReader(file) | |
for page_num in range(len(pdf_reader.pages)): | |
page = pdf_reader.pages[page_num] | |
text += page.extract_text() + "\n\n" | |
except Exception as e: | |
print(f"خطأ في استخراج النص من PDF: {str(e)}") | |
return "" | |
return text | |
def extract_from_docx(self, file_path): | |
"""استخراج النص من ملف Word""" | |
text = "" | |
try: | |
doc = docx.Document(file_path) | |
for para in doc.paragraphs: | |
text += para.text + "\n" | |
except Exception as e: | |
print(f"خطأ في استخراج النص من DOCX: {str(e)}") | |
return "" | |
return text | |
def extract_from_excel(self, file_path): | |
"""استخراج البيانات من ملف Excel""" | |
try: | |
# قراءة جميع الصفحات | |
excel_data = pd.read_excel(file_path, sheet_name=None) | |
# تجميع البيانات من جميع الصفحات | |
text = "" | |
for sheet_name, sheet_data in excel_data.items(): | |
text += f"صفحة: {sheet_name}\n" | |
text += sheet_data.to_string(index=False) + "\n\n" | |
except Exception as e: | |
print(f"خطأ في استخراج النص من Excel: {str(e)}") | |
return "" | |
return text | |
def extract_from_text(self, file_path): | |
"""استخراج النص من ملف نصي""" | |
try: | |
with open(file_path, 'r', encoding='utf-8') as file: | |
text = file.read() | |
except Exception as e: | |
print(f"خطأ في استخراج النص من الملف النصي: {str(e)}") | |
return "" | |
return text | |
def extract_text(self, file_path): | |
"""استخراج النص من أي نوع ملف مدعوم""" | |
file_ext = Path(file_path).suffix.lower() | |
if file_ext == '.pdf': | |
return self.extract_from_pdf(file_path) | |
elif file_ext in ['.docx', '.doc']: | |
return self.extract_from_docx(file_path) | |
elif file_ext in ['.xlsx', '.xls']: | |
return self.extract_from_excel(file_path) | |
elif file_ext == '.txt': | |
return self.extract_from_text(file_path) | |
else: | |
print(f"نوع الملف غير مدعوم: {file_ext}") | |
return "" |