Spaces:
Paused
Paused
| import streamlit as st | |
| from huggingface_hub import hf_hub_download | |
| from llama_cpp import Llama | |
| import os | |
| import time | |
| # تحميل النموذج من Hugging Face | |
| model_path = hf_hub_download( | |
| repo_id="methodya/arabic-summarizer-philosophy-v3", | |
| filename="sambalingo-arabic-chat.Q5_K_M.gguf" | |
| ) | |
| # إعداد النموذج | |
| llm = Llama( | |
| model_path=model_path, | |
| n_ctx=2048, | |
| n_threads=4 | |
| ) | |
| # دالة لتقسيم النصوص إلى فقرات | |
| def split_text(text: str, max_length: int = 500): | |
| # تقسيم النص إلى فقرات باستخدام النقاط أو الفواصل | |
| paragraphs = text.split("\n") | |
| chunks = [] | |
| current_chunk = "" | |
| for paragraph in paragraphs: | |
| if len(current_chunk) + len(paragraph) < max_length: | |
| current_chunk += paragraph + "\n" | |
| else: | |
| chunks.append(current_chunk) | |
| current_chunk = paragraph + "\n" | |
| if current_chunk: | |
| chunks.append(current_chunk) # إضافة الفقرة المتبقية | |
| return chunks | |
| # دالة تلخيص النصوص | |
| def summarize(text: str) -> str: | |
| if not text: | |
| return "يرجى إدخال نص للتلخيص" | |
| # تقسيم النص الطويل إلى أجزاء أصغر | |
| text_chunks = split_text(text, max_length=500) | |
| summarized_text = "" | |
| for chunk in text_chunks: | |
| prompt = f"""أنت مساعد عربي متخصص في تلخيص النصوص الفلسفية. قم بتلخيص النص التالي: | |
| {chunk} | |
| """ | |
| try: | |
| output = llm( | |
| prompt, | |
| max_tokens=500, # تقليل عدد الرموز في كل جزء | |
| temperature=0.7, | |
| stop=["User:", "\n\n"] | |
| ) | |
| summarized_text += output['choices'][0]['text'] + "\n" # دمج التلخيصات | |
| except Exception as e: | |
| return f"حدث خطأ: {str(e)}" | |
| return summarized_text | |
| # واجهة المستخدم باستخدام Streamlit | |
| st.title("ملخص النصوص الفلسفية") | |
| st.markdown("أداة لتلخيص النصوص الفلسفية باللغة العربية") | |
| # إنشاء واجهة الإدخال والإخراج | |
| text_input = st.text_area("النص الفلسفي", height=200) | |
| if st.button("تلخيص"): | |
| with st.spinner('Processing...'): | |
| # محاكاة لعملية المعالجة التي تستغرق وقتًا طويلاً | |
| time.sleep(3) # استبدال هذا بـ عملية النموذج | |
| summary = summarize(text_input) | |
| st.success('تم التلخيص بنجاح!') | |
| st.text_area("الملخص", value=summary, height=150, disabled=True) | |