import re import fitz # PyMuPDF def extract_pdf_text(file_bytes: bytes) -> str: """يستخرج النص من ملف PDF مرفوع""" try: doc = fitz.open(stream=file_bytes, filetype="pdf") text = "" for page in doc: text += page.get_text() + "\n" return text.strip() except Exception as e: return f"خطأ في قراءة ملف PDF: {e}" def normalize_arabic(text: str) -> str: """ يقوم بتنظيف النص العربي لتوحيد حركات البحث وتحسين النتائج. مثال: توحيد (أ، إ، آ) إلى (ا)، و (ة) إلى (ه). """ if not isinstance(text, str): return "" # توحيد الألف text = re.sub(r'[أإآ]', 'ا', text) # توحيد التاء المربوطة والهاء text = re.sub(r'ة', 'ه', text) # توحيد الياء text = re.sub(r'ى', 'ي', text) # إزالة التشكيل (الحركات) text = re.sub(r'[\u064B-\u065F]', '', text) return text.strip() def detect_lang(text: str) -> str: """ يتعرف على لغة السؤال (عربي أو فرنسي) بناءً على الحروف. """ if not isinstance(text, str): return "ar" # إذا كان يحتوي على حروف عربية if re.search(r'[\u0600-\u06FF]', text): return "ar" return "fr" def format_latency(ms: int) -> str: """ تنسيق الوقت المستغرق لعرضه في الواجهة بـ (ms أو s). """ try: ms = float(ms) if ms < 1000: return f"{int(ms)}ms" return f"{ms / 1000:.2f}s" except (ValueError, TypeError): return "0ms"