File size: 4,463 Bytes
25d2b3e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# -*- coding: utf-8 -*-
"""
خدمة استخراج النص من المستندات

هذا الملف يحتوي على الفئة المسؤولة عن استخراج النص من أنواع مختلفة من المستندات.
"""

import os
import logging

class TextExtractor:
    """فئة استخراج النص من المستندات"""
    
    def __init__(self, config=None):
        """
        تهيئة مستخرج النص
        
        المعلمات:
            config (dict): إعدادات مستخرج النص
        """
        self.config = config or {}
        self.logger = logging.getLogger(__name__)
    
    def extract(self, file_path):
        """
        استخراج النص من ملف بناءً على نوع الملف
        
        المعلمات:
            file_path (str): مسار الملف
            
        العوائد:
            str: النص المستخرج
        """
        _, ext = os.path.splitext(file_path)
        ext = ext.lower()
        
        if ext == '.pdf':
            return self.extract_from_pdf(file_path)
        elif ext in ('.doc', '.docx'):
            return self.extract_from_docx(file_path)
        elif ext in ('.jpg', '.jpeg', '.png'):
            return self.extract_from_image(file_path)
        else:
            self.logger.warning(f"نوع ملف غير مدعوم: {ext}")
            return f"نوع ملف غير مدعوم: {ext}"
    
    def extract_from_pdf(self, file_path):
        """
        استخراج النص من ملف PDF
        
        المعلمات:
            file_path (str): مسار ملف PDF
            
        العوائد:
            str: النص المستخرج
        """
        self.logger.info(f"جاري استخراج النص من ملف PDF: {file_path}")
        
        try:
            # في البيئة الحقيقية، استخدم مكتبة مناسبة مثل PyPDF2 أو pdfplumber
            # محاكاة الاستخراج للعرض
            return f"هذا نص مستخرج من ملف PDF: {os.path.basename(file_path)}\n\nيتم استخراج النص من الملف باستخدام مكتبة مناسبة في البيئة الحقيقية."
        except Exception as e:
            self.logger.error(f"خطأ في استخراج النص من PDF: {str(e)}")
            return f"حدث خطأ أثناء استخراج النص: {str(e)}"
    
    def extract_from_docx(self, file_path):
        """
        استخراج النص من ملف Word
        
        المعلمات:
            file_path (str): مسار ملف Word
            
        العوائد:
            str: النص المستخرج
        """
        self.logger.info(f"جاري استخراج النص من ملف Word: {file_path}")
        
        try:
            # في البيئة الحقيقية، استخدم مكتبة مناسبة مثل python-docx
            # محاكاة الاستخراج للعرض
            return f"هذا نص مستخرج من ملف Word: {os.path.basename(file_path)}\n\nيتم استخراج النص من الملف باستخدام مكتبة مناسبة في البيئة الحقيقية."
        except Exception as e:
            self.logger.error(f"خطأ في استخراج النص من Word: {str(e)}")
            return f"حدث خطأ أثناء استخراج النص: {str(e)}"
    
    def extract_from_image(self, file_path):
        """
        استخراج النص من ملف صورة باستخدام OCR
        
        المعلمات:
            file_path (str): مسار ملف الصورة
            
        العوائد:
            str: النص المستخرج
        """
        self.logger.info(f"جاري استخراج النص من ملف صورة: {file_path}")
        
        try:
            # في البيئة الحقيقية، استخدم مكتبة مناسبة مثل pytesseract
            # محاكاة الاستخراج للعرض
            return f"هذا نص مستخرج من ملف صورة: {os.path.basename(file_path)}\n\nيتم استخراج النص من الصورة باستخدام تقنية OCR في البيئة الحقيقية."
        except Exception as e:
            self.logger.error(f"خطأ في استخراج النص من الصورة: {str(e)}")
            return f"حدث خطأ أثناء استخراج النص: {str(e)}"