v3 / modules /services /text_extractor.py
EGYADMIN's picture
Upload 115 files
82676b8 verified
"""
خدمة استخراج النصوص من المستندات
"""
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 ""