Dhom1 commited on
Commit
cb0139c
·
verified ·
1 Parent(s): bfb7595

Update src/streamlit_app.py

Browse files
Files changed (1) hide show
  1. src/streamlit_app.py +16 -26
src/streamlit_app.py CHANGED
@@ -5,6 +5,9 @@ from transformers import pipeline
5
  import joblib
6
  from offensive_keywords import offensive_keywords
7
 
 
 
 
8
  st.write(f"🔎 تم تحميل {len(offensive_keywords)} عبارة من الملف.")
9
 
10
  # ✅ إعداد التخزين المؤقت للنماذج
@@ -75,56 +78,43 @@ with col2:
75
  # ✅ إدخال الإعلان
76
  uploaded_text = st.text_area("✍️ أدخل نص الإعلان هنا:", height=150)
77
 
78
- # ✅ تصنيف الإعلان + فحص العبارات الكاملة والجزئية
79
  if uploaded_text:
80
  try:
81
- # تصنيف النموذج ML
82
  pred = classifier.predict([uploaded_text])[0]
83
 
84
- # كلمات مفتاحية جزئية (مرنة)
85
- flag_keywords = [
86
- "للنساء", "للرجال", "النساء فقط", "الرجال فقط", "فقط", "جنسية", "شرط العمر",
87
- "بدون عقد", "بدون تأمين", "مظهر لائق", "تحمل ضغط", "الوظيفة للذكور", "مطلوب نساء",
88
- "يفضل سعودية", "دوام جزئي", "دوام مسائي", "راتب", "مغري", "جاذب", "الزي الرسمي"
89
- ]
90
-
91
- # تطابق حرفي كامل
92
- phrase_matches = [kw for kw in offensive_keywords if kw in uploaded_text]
93
- # تطابق جزئي بالكلمات
94
- keyword_matches = [k for k in flag_keywords if k in uploaded_text]
95
-
96
- # الدمج النهائي
97
- violations = list(set(phrase_matches + keyword_matches))
98
- has_violations = len(violations) > 0
99
 
100
- # منطق التصنيف النهائي
101
- if has_violations:
102
  final_label = "❌ إعلان مخالف"
103
  elif pred == 1:
104
  final_label = "✅ إعلان سليم"
105
  else:
106
  final_label = "❌ إعلان مخالف"
107
 
108
- # عرض النتيجة النهائية فقط
109
  st.markdown(f'<div class="metric-container"><h4>{final_label}</h4></div>', unsafe_allow_html=True)
110
 
111
  except Exception as e:
112
  st.error(f"حدث خطأ في التنبؤ: {str(e)}")
113
 
114
- # ✅ تحليل العبارات (تفصيل المخالفات + نسبة)
115
  if st.button("🔍 تحليل العبارات"):
116
  if uploaded_text:
117
- violations = list(set(phrase_matches + keyword_matches))
 
 
 
118
  if violations:
119
  st.error("❌ الإعلان يحتوي على عبارات مخالفة:")
120
  for v in violations:
121
  st.markdown(f"<li style='color:#b00020'>{v}</li>", unsafe_allow_html=True)
122
- violation_score = min(5 + len(violations) * 20, 95)
123
  else:
124
  st.success("✅ لا توجد عبارات مخالفة.")
125
- violation_score = 5
126
-
127
- st.metric(label="نسبة المخالفة المتوقعة", value=f"{violation_score}%")
128
 
129
  # ✅ توصيات GPT-2
130
  st.subheader("💡 توصيات الذكاء الاصطناعي")
 
5
  import joblib
6
  from offensive_keywords import offensive_keywords
7
 
8
+ # ✅ كلمات جزئية مهمة مثل "امرأة" و"نساء" إلخ
9
+ flag_keywords = ["امرأة", "نساء", "أنثى", "بنت", "للنساء", "للرجال", "سعودية", "جنسية", "العمر", "مظهر", "عقد", "ضغط العمل"]
10
+
11
  st.write(f"🔎 تم تحميل {len(offensive_keywords)} عبارة من الملف.")
12
 
13
  # ✅ إعداد التخزين المؤقت للنماذج
 
78
  # ✅ إدخال الإعلان
79
  uploaded_text = st.text_area("✍️ أدخل نص الإعلان هنا:", height=150)
80
 
81
+ # ✅ تصنيف الإعلان + فحص العبارات
82
  if uploaded_text:
83
  try:
 
84
  pred = classifier.predict([uploaded_text])[0]
85
 
86
+ # فحص مطابقة العبارات بالكامل أو جزئياً
87
+ violations = list(set(
88
+ [kw for kw in offensive_keywords if kw in uploaded_text] +
89
+ [kw for kw in flag_keywords if kw in uploaded_text]
90
+ ))
 
 
 
 
 
 
 
 
 
 
91
 
92
+ if violations:
 
93
  final_label = "❌ إعلان مخالف"
94
  elif pred == 1:
95
  final_label = "✅ إعلان سليم"
96
  else:
97
  final_label = "❌ إعلان مخالف"
98
 
99
+ # عرض النتيجة
100
  st.markdown(f'<div class="metric-container"><h4>{final_label}</h4></div>', unsafe_allow_html=True)
101
 
102
  except Exception as e:
103
  st.error(f"حدث خطأ في التنبؤ: {str(e)}")
104
 
105
+ # ✅ زر تحليل العبارات
106
  if st.button("🔍 تحليل العبارات"):
107
  if uploaded_text:
108
+ violations = list(set(
109
+ [kw for kw in offensive_keywords if kw in uploaded_text] +
110
+ [kw for kw in flag_keywords if kw in uploaded_text]
111
+ ))
112
  if violations:
113
  st.error("❌ الإعلان يحتوي على عبارات مخالفة:")
114
  for v in violations:
115
  st.markdown(f"<li style='color:#b00020'>{v}</li>", unsafe_allow_html=True)
 
116
  else:
117
  st.success("✅ لا توجد عبارات مخالفة.")
 
 
 
118
 
119
  # ✅ توصيات GPT-2
120
  st.subheader("💡 توصيات الذكاء الاصطناعي")