methodya commited on
Commit
229e772
·
verified ·
1 Parent(s): 50ec9f1

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +79 -0
app.py ADDED
@@ -0,0 +1,79 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ from huggingface_hub import hf_hub_download
3
+ from llama_cpp import Llama
4
+ import os
5
+ import time
6
+
7
+ # تحميل النموذج من Hugging Face
8
+ model_path = hf_hub_download(
9
+ repo_id="methodya/arabic-summarizer-philosophy-v3",
10
+ filename="sambalingo-arabic-chat.Q5_K_M.gguf"
11
+ )
12
+
13
+ # إعداد النموذج
14
+ llm = Llama(
15
+ model_path=model_path,
16
+ n_ctx=2048,
17
+ n_threads=4
18
+ )
19
+
20
+ # دالة لتقسيم النصوص إلى فقرات
21
+ def split_text(text: str, max_length: int = 500):
22
+ # تقسيم النص إلى فقرات باستخدام النقاط أو الفواصل
23
+ paragraphs = text.split("\n")
24
+ chunks = []
25
+ current_chunk = ""
26
+
27
+ for paragraph in paragraphs:
28
+ if len(current_chunk) + len(paragraph) < max_length:
29
+ current_chunk += paragraph + "\n"
30
+ else:
31
+ chunks.append(current_chunk)
32
+ current_chunk = paragraph + "\n"
33
+
34
+ if current_chunk:
35
+ chunks.append(current_chunk) # إضافة الفقرة المتبقية
36
+ return chunks
37
+
38
+ # دالة تلخيص النصوص
39
+ def summarize(text: str) -> str:
40
+ if not text:
41
+ return "يرجى إدخال نص للتلخيص"
42
+
43
+ # تقسيم النص الطويل إلى أجزاء أصغر
44
+ text_chunks = split_text(text, max_length=500)
45
+
46
+ summarized_text = ""
47
+
48
+ for chunk in text_chunks:
49
+ prompt = f"""أنت مساعد عربي متخصص في تلخيص النصوص الفلسفية. قم بتلخيص النص التالي:
50
+ {chunk}
51
+ """
52
+
53
+ try:
54
+ output = llm(
55
+ prompt,
56
+ max_tokens=500, # تقليل عدد الرموز في كل جزء
57
+ temperature=0.7,
58
+ stop=["User:", "\n\n"]
59
+ )
60
+ summarized_text += output['choices'][0]['text'] + "\n" # دمج التلخيصات
61
+ except Exception as e:
62
+ return f"حدث خطأ: {str(e)}"
63
+
64
+ return summarized_text
65
+
66
+ # واجهة المستخدم باستخدام Streamlit
67
+ st.title("ملخص النصوص الفلسفية")
68
+ st.markdown("أداة لتلخيص النصوص الفلسفية باللغة العربية")
69
+
70
+ # إنشاء واجهة الإدخال والإخراج
71
+ text_input = st.text_area("النص الفلسفي", height=200)
72
+
73
+ if st.button("تلخيص"):
74
+ with st.spinner('Processing...'):
75
+ # محاكاة لعملية المعالجة التي تستغرق وقتًا طويلاً
76
+ time.sleep(3) # استبدال هذا بـ عملية النموذج
77
+ summary = summarize(text_input)
78
+ st.success('تم التلخيص بنجاح!')
79
+ st.text_area("الملخص", value=summary, height=150, disabled=True)