thomson99 commited on
Commit
0a12e82
·
verified ·
1 Parent(s): dddf74f

Upload 4 files

Browse files
Files changed (2) hide show
  1. app.py +130 -51
  2. requirements.txt +3 -2
app.py CHANGED
@@ -1,83 +1,162 @@
1
  import gradio as gr
2
  from transformers import pipeline, AutoModelForCausalLM, AutoTokenizer
3
  import torch
 
4
 
5
- def generate_outline(topic, article_type, length):
 
 
 
 
 
 
 
 
 
 
 
6
  """
7
- توليد هيكل المقال بناءً على الموضوع ونوع المقال وطوله
8
  """
9
- # سيتم تحسين هذه الوظيفة لاحقاً باستخدام نموذج مدرب
10
- sections = {
11
- "short": 3,
12
- "medium": 5,
13
- "long": 7
14
- }
15
 
16
- num_sections = sections.get(length, 3)
 
 
 
17
 
18
- if article_type == "أكاديمي":
19
- outline = [
20
- "مقدمة وخلفية نظرية",
21
- "مراجعة الأدبيات",
22
- "المنهجية",
23
- "النتائج والمناقشة",
24
- "الخاتمة والتوصيات"
25
- ][:num_sections]
26
- else:
27
- outline = [
28
- "مقدمة جذابة",
29
- "عرض الفكرة الرئيسية",
30
- "التفاصيل والأمثلة",
31
- "وجهات النظر المختلفة",
32
- "الخاتمة"
33
- ][:num_sections]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
34
 
35
- return "\n".join([f"{i+1}. {section}" for i, section in enumerate(outline)])
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
36
 
37
  def improve_style(text):
38
  """
39
  تحسين أسلوب النص وتقديم اقتراحات
40
  """
41
- # سيتم تحسين هذه الوظيفة لاحقاً باستخدام نموذج مدرب
42
  suggestions = [
43
- "حاول استخدام جمل أقصر وأكثر وضوحاً",
44
- "تجنب تكرار الكلمات",
45
- "استخدم روابط منطقية بين الفقرات",
46
- "أضف أمثلة توضيحية",
 
 
 
47
  ]
48
 
49
  return "\n".join(suggestions)
50
 
51
  # إنشاء واجهة المستخدم
52
  with gr.Blocks(title="مساعد كتابة المقالات العربية") as demo:
53
- gr.Markdown("# مساعد كتابة المقالات العربية 📝")
 
54
 
55
- with gr.Tab("توليد هيكل المقال"):
56
  with gr.Row():
57
- topic_input = gr.Textbox(label="موضوع المقال")
58
- article_type = gr.Dropdown(
59
- choices=["أكاديمي", "صحفي", "مدونة"],
60
- label="نوع المقال",
61
- value="أكاديمي"
62
- )
63
- length = gr.Dropdown(
64
- choices=["short", "medium", "long"],
65
- label="طول المقال",
66
- value="medium"
67
- )
68
- generate_btn = gr.Button("توليد الهيكل")
69
- outline_output = gr.Textbox(label="هيكل المقال", lines=10)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
70
 
71
  with gr.Tab("تحسين الأسلوب"):
72
- text_input = gr.Textbox(label="النص المراد تحسينه", lines=5)
 
 
 
 
73
  improve_btn = gr.Button("تحسين الأسلوب")
74
- suggestions_output = gr.Textbox(label="الاقتراحات", lines=5)
 
 
 
75
 
76
  # ربط الأزرار بالوظائف
77
  generate_btn.click(
78
- generate_outline,
79
- inputs=[topic_input, article_type, length],
80
- outputs=outline_output
81
  )
82
 
83
  improve_btn.click(
 
1
  import gradio as gr
2
  from transformers import pipeline, AutoModelForCausalLM, AutoTokenizer
3
  import torch
4
+ import random
5
 
6
+ # تهيئة النموذج - سيتم تحميله من Hugging Face
7
+ try:
8
+ model_name = "aubmindlab/aragpt2-medium" # نموذج GPT-2 المدرب على اللغة العربية
9
+ tokenizer = AutoTokenizer.from_pretrained(model_name)
10
+ model = AutoModelForCausalLM.from_pretrained(model_name)
11
+ except Exception as e:
12
+ print(f"Error loading model: {e}")
13
+ # استخدام نموذج بسيط في حالة الفشل
14
+ model = None
15
+ tokenizer = None
16
+
17
+ def generate_article(topic, article_type, length, style):
18
  """
19
+ توليد مقال كامل بناءً على المدخلات
20
  """
21
+ # تحديد طول المقال
22
+ max_length = {
23
+ "قصير": 200,
24
+ "متوسط": 400,
25
+ "طويل": 800
26
+ }.get(length, 400)
27
 
28
+ # إنشاء المطلب للنموذج
29
+ prompt = f"""اكتب مقالاً {article_type} عن {topic}.
30
+ يجب أن يكون المقال {style} ويتضمن مقدمة وعرض وخاتمة.
31
+ """
32
 
33
+ try:
34
+ if model and tokenizer:
35
+ # توليد النص باستخدام النموذج
36
+ inputs = tokenizer.encode(prompt, return_tensors="pt", max_length=100, truncation=True)
37
+ outputs = model.generate(
38
+ inputs,
39
+ max_length=max_length,
40
+ num_return_sequences=1,
41
+ no_repeat_ngram_size=2,
42
+ do_sample=True,
43
+ top_k=50,
44
+ top_p=0.95,
45
+ temperature=0.7,
46
+ pad_token_id=tokenizer.eos_token_id
47
+ )
48
+
49
+ generated_text = tokenizer.decode(outputs[0], skip_special_tokens=True)
50
+ return generated_text
51
+ else:
52
+ # نموذج بسيط في حالة عدم توفر النموذج الرئيسي
53
+ return generate_simple_article(topic, article_type, length, style)
54
+ except Exception as e:
55
+ return f"حدث خطأ أثناء توليد المقال: {str(e)}"
56
+
57
+ def generate_simple_article(topic, article_type, length, style):
58
+ """
59
+ توليد مقال بسيط في حالة عدم توفر النموذج الرئيسي
60
+ """
61
+ # قوالب للمقدمات
62
+ intros = [
63
+ f"يعد موضوع {topic} من المواضيع الهامة التي تستحق الدراسة والبحث.",
64
+ f"في ظل التطورات المتسارعة، يبرز موضوع {topic} كقضية محورية.",
65
+ f"يثير {topic} اهتماماً متزايداً في الآونة الأخيرة."
66
+ ]
67
+
68
+ # قوالب للخاتمة
69
+ conclusions = [
70
+ f"وختاماً، يمكننا القول أن {topic} يستحق المزيد من الاهتمام والدراسة.",
71
+ f"في النهاية، نؤكد على أهمية {topic} في حياتنا المعاصرة.",
72
+ "وبناءً على ما سبق، نوصي بمزيد من البحث والدراسة في هذا المجال."
73
+ ]
74
 
75
+ # إنشاء المقال
76
+ article = f"""
77
+ {random.choice(intros)}
78
+
79
+ إن دراسة {topic} تكتسب أهمية خاصة في وقتنا الحاضر، حيث تتعدد جوانبه وتتشعب تأثيراته.
80
+ ومن الجدير بالذكر أن هناك العديد من العوامل التي تؤثر في هذا الموضوع.
81
+
82
+ يمكننا تحليل {topic} من عدة جوانب:
83
+ أولاً: الجانب النظري والمفاهيمي
84
+ ثانياً: التطبيقات العملية
85
+ ثالثاً: التحديات والفرص المستقبلية
86
+
87
+ {random.choice(conclusions)}
88
+ """
89
+
90
+ return article
91
 
92
  def improve_style(text):
93
  """
94
  تحسين أسلوب النص وتقديم اقتراحات
95
  """
 
96
  suggestions = [
97
+ "✍️ حاول استخدام جمل أقصر وأكثر وضوحاً",
98
+ "🎯 تجنب تكرار الكلمات واستخدم مرادفات",
99
+ "🔄 استخدم روابط منطقية بين الفقرات",
100
+ "💡 أضف أمثلة توضيحية لتعزيز الفكرة",
101
+ "📝 استخدم علامات الترقيم بشكل صحيح",
102
+ "🎨 نوع في الأساليب اللغوية",
103
+ "📚 استشهد بمصادر موثوقة"
104
  ]
105
 
106
  return "\n".join(suggestions)
107
 
108
  # إنشاء واجهة المستخدم
109
  with gr.Blocks(title="مساعد كتابة المقالات العربية") as demo:
110
+ gr.Markdown("# 📝 مساعد كتابة المقالات العربية")
111
+ gr.Markdown("### منصة ذكية لإنشاء وتحسين المقالات العربية")
112
 
113
+ with gr.Tab("إنشاء مقال جديد"):
114
  with gr.Row():
115
+ with gr.Column():
116
+ topic_input = gr.Textbox(
117
+ label="موضوع المقال",
118
+ placeholder="أدخل موضوع المقال هنا..."
119
+ )
120
+ article_type = gr.Dropdown(
121
+ choices=["أكاديمي", "صحفي", "مدونة", "تقني"],
122
+ label="نوع المقال",
123
+ value="أكاديمي"
124
+ )
125
+ length = gr.Radio(
126
+ choices=["قصير", "متوسط", "طويل"],
127
+ label="طول المقال",
128
+ value="متوسط"
129
+ )
130
+ style = gr.Dropdown(
131
+ choices=["رسمي", "أدبي", "تقني", "صحفي"],
132
+ label="الأسلوب",
133
+ value="رسمي"
134
+ )
135
+
136
+ generate_btn = gr.Button("إنشاء المقال", variant="primary")
137
+ article_output = gr.Textbox(
138
+ label="المقال المُنشأ",
139
+ lines=10,
140
+ placeholder="سيظهر المقال هنا..."
141
+ )
142
 
143
  with gr.Tab("تحسين الأسلوب"):
144
+ text_input = gr.Textbox(
145
+ label="النص المراد تحسينه",
146
+ lines=5,
147
+ placeholder="أدخل النص هنا..."
148
+ )
149
  improve_btn = gr.Button("تحسين الأسلوب")
150
+ suggestions_output = gr.Textbox(
151
+ label="الاقتراحات",
152
+ lines=7
153
+ )
154
 
155
  # ربط الأزرار بالوظائف
156
  generate_btn.click(
157
+ generate_article,
158
+ inputs=[topic_input, article_type, length, style],
159
+ outputs=article_output
160
  )
161
 
162
  improve_btn.click(
requirements.txt CHANGED
@@ -1,6 +1,7 @@
1
  transformers==4.35.2
2
  torch==2.1.1
3
  gradio==3.50.2
4
- uvicorn==0.24.0
5
  python-dotenv==1.0.0
6
- pydantic==2.5.2
 
 
 
1
  transformers==4.35.2
2
  torch==2.1.1
3
  gradio==3.50.2
 
4
  python-dotenv==1.0.0
5
+ sentencepiece==0.1.99
6
+ arabic-reshaper==3.0.0
7
+ python-bidi==0.4.2