AdIlleagal / src /streamlit_app.py
Dhom1's picture
Update src/streamlit_app.py
afefed4 verified
raw
history blame
3.71 kB
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"
# ---- تحميل نموذج التصنيف العربي ----
@st.cache_resource
def load_classifier():
return joblib.load("src/job_classifier.pkl") # تأكد من المسار الصحيح
classifier = load_classifier()
# ---- تحميل نموذج GPT-2 ----
@st.cache_resource
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)}")