Spaces:
Sleeping
Sleeping
File size: 1,744 Bytes
5890ee8 974648b 5890ee8 | 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 | 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"
|