Spaces:
Sleeping
Sleeping
| import os | |
| import streamlit as st | |
| import pandas as pd | |
| from io import StringIO | |
| from transformers import pipeline | |
| import joblib | |
| # ✅ إعداد التخزين المؤقت للنماذج | |
| os.environ["HF_HOME"] = "/tmp" | |
| os.environ["TRANSFORMERS_CACHE"] = "/tmp" | |
| # ---- تحميل نموذج التصنيف العربي ---- | |
| def load_classifier(): | |
| return joblib.load("src/job_classifier.pkl") # تأكد من المسار الصحيح | |
| classifier = load_classifier() | |
| # ---- تحميل نموذج GPT-2 ---- | |
| def load_gpt2(): | |
| return pipeline("text-generation", model="gpt2", model_kwargs={"cache_dir": "/tmp"}) | |
| gpt2_pipeline = load_gpt2() | |
| # ---- إعداد صفحة Streamlit ---- | |
| st.set_page_config(page_title="رصد الإعلانات المخالفة") | |
| st.title("📢 نظام رصد الإعلانات المخالفة") | |
| st.markdown(""" | |
| ### 🧠 هذا النظام يستخدم الذكاء الاصطناعي لرصد الإعلانات المخالفة | |
| ارفع نص إعلان وسنقوم بتحليله واكتشاف أي محتوى مخالف بناءً على قواعد محددة. | |
| """) | |
| # ---- رفع نص الإعلان ---- | |
| uploaded_text = st.text_area("✍️ أدخل نص الإعلان هنا:", height=150) | |
| # ---- تصنيف الإعلان باستخدام النموذج ---- | |
| st.subheader("📊 تصنيف الإعلان باستخدام نموذج التعلم الآلي") | |
| if uploaded_text: | |
| try: | |
| pred = classifier.predict([uploaded_text])[0] | |
| label = "✅ إعلان سليم" if pred == 1 else "❌ إعلان مخالف" | |
| st.info(f"نتيجة النموذج: {label}") | |
| except Exception as e: | |
| st.error(f"حدث خطأ في التنبؤ بالنموذج: {str(e)}") | |
| # ---- قاعدة بيانات كلمات/عبارات مخالفة ---- | |
| offensive_keywords = [ | |
| "مطلوب سعودية", "مظهر لائق", "براتب 1500", "للرجال فقط", "بدون عقد", | |
| "يفضل سعودية", "شرط العمر", "جنسية معينة", "تحمل ضغط العمل", "الوظيفة للذكور فقط" | |
| ] | |
| # ---- تحليل النص باستخدام الكلمات المفتاحية ---- | |
| if st.button("🔍 تحليل الإعلان") and uploaded_text: | |
| violations = [kw for kw in offensive_keywords if kw in uploaded_text] | |
| if violations: | |
| st.error("❌ الإعلان يحتوي على عبارات مخالفة!") | |
| st.write("**العبارات المكتشفة:**") | |
| for v in violations: | |
| st.write(f"- {v}") | |
| violation_score = min(5 + len(violations) * 20, 95) | |
| else: | |
| st.success("✅ الإعلان لا يحتوي على عبارات مخالفة ظاهرة.") | |
| violation_score = 5 | |
| st.metric(label="نسبة المخالفة المتوقعة", value=f"{violation_score}%") | |
| # ---- توليد توصيات باستخدام GPT-2 ---- | |
| st.subheader("🧠 توصيات الذكاء الاصطناعي (GPT-2)") | |
| if uploaded_text: | |
| gpt_prompt = f""" | |
| You are an AI that checks for violations in job advertisements based on Saudi labor laws. | |
| Here is the ad: | |
| \"{uploaded_text}\" | |
| Please identify any potential violations and give recommendations to fix them. | |
| Violations: | |
| """ | |
| with st.spinner("يتم الآن تحليل الإعلان بواسطة GPT-2..."): | |
| try: | |
| result = gpt2_pipeline(gpt_prompt, max_new_tokens=150)[0]["generated_text"] | |
| st.success("✅ تم تحليل الإعلان") | |
| st.text_area("📋 مخرجات GPT-2:", result, height=300) | |
| except Exception as e: | |
| st.error(f"حدث خطأ أثناء استخدام GPT-2: {str(e)}") | |