arabicPhilo5 / app.py
methodya's picture
Create app.py
229e772 verified
raw
history blame
2.74 kB
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)