fake-news-detector / src /streamlit_app.py
ESMATUGBA's picture
Update src/streamlit_app.py
631b301 verified
Raw
History Blame Contribute Delete
4.32 kB
import streamlit as st
import pickle
import re
import string
# 1. Sayfa Ayarları / Page Settings
st.set_page_config(page_title="Fake-News-Detection | Sahte Haber Tespiti", page_icon="🔍", layout="wide")
# 2. Model ve Vektörleştiriciyi Güvenli Yükle / Load Assets Safely
@st.cache_resource
def load_assets():
try:
with open('vectorizer.pkl', 'rb') as f:
vectorizer = pickle.load(f)
with open('model_nb.pkl', 'rb') as f:
model = pickle.load(f)
return vectorizer, model
except Exception as e:
return None, None
tfidf, nb_model = load_assets()
# 3. Güçlendirilmiş Metin Temizleme / Robust Text Cleaning
def clean_text(text):
try:
text = str(text).lower()
# Reuters imzasını temizle
text = re.sub(r'^.*?\(reuters\)\s*-', '', text)
# Linkleri ve parantez içlerini sil
text = re.sub(r'https?://\S+|www\.\S+', '', text)
text = re.sub(r'\[.*?\]', '', text)
# Sadece harf ve boşlukları tut (Hataları önlemek için en güvenli yol)
text = re.sub(r'[^a-z\s]', '', text)
# Fazla boşlukları temizle
text = re.sub(r'\s+', ' ', text)
return text.strip()
except:
return ""
# --- SOL PANEL (SIDEBAR) ---
st.sidebar.title("⚙️ Kontrol Paneli / Control Panel")
st.sidebar.warning("⚠️ **NOT / NOTE:** Bu model sadece İngilizce metinlere duyarlıdır. / Only English supported.")
st.sidebar.subheader("📌 Kopyalanabilir Örnekler / Examples")
# İstediğin yeni örnekleri buraya ekledim
st.sidebar.info("**Ekonomi (Gerçek):**\n\nWASHINGTON (Reuters) - The Federal Reserve maintained its interest rate target on Wednesday, signaling the economy is expanding at a solid pace and inflation is stable.")
st.sidebar.success("**Uzay & Teknoloji (Gerçek):**\n\nA private space company successfully launched its latest satellite into orbit on Tuesday. The mission aims to provide high-speed internet access to rural areas across the globe, according to official statements.")
st.sidebar.error("**Sosyal Medya (Sahte):**\n\nURGENT: Your smartphone is secretly recording all your family photos and sending them to a hidden server. The government is forcing tech companies to hide this truth. Share now!")
st.sidebar.error("**Sağlık (Sahte):**\n\nDrinking five cups of salted water every hour is proven to cure every single virus instantly. Doctors are being paid to stay silent about this miracle cure!")
st.sidebar.markdown("---")
st.sidebar.write("**Model:** Multinomial NB\n**Accuracy:** %94")
# --- ANA SAYFA ---
st.title("🔍 Fake-News-Detection | Sahte Haber Tespiti")
st.markdown("Haberin gerçek mi yoksa sahte mi olduğunu analiz edin. / Analyze news veracity.")
if tfidf is None or nb_model is None:
st.error("Model dosyaları bulunamadı! Lütfen vectorizer.pkl ve model_nb.pkl dosyalarını kontrol edin.")
# 4. Kullanıcı Girişi
user_input = st.text_area("Analiz edilecek haber metnini girin / Enter news text:", height=250)
if st.button("Analiz Et / Analyze"):
if user_input.strip() != "":
try:
# Ön İşlem
cleaned = clean_text(user_input)
if len(cleaned) < 5:
st.warning("Metin analiz için çok kısa! / Text is too short for analysis!")
else:
# Vektörleştirme
vec = tfidf.transform([cleaned])
# Tahmin
pred = nb_model.predict(vec)[0]
prob = nb_model.predict_proba(vec)
st.subheader("Analiz Sonucu / Result:")
# Etiket Mantığı: 1 = GERÇEK, 0 = SAHTE
if pred == 1:
st.success(f"✅ GERÇEK GÖRÜNÜYOR / LOOKS REAL (Güven/Confidence: %{prob[0][1]*100:.2f})")
st.balloons()
else:
st.error(f"🚨 SAHTE OLABİLİR / MIGHT BE FAKE (Olasılık/Probability: %{prob[0][0]*100:.2f})")
with st.expander("Temizlenmiş Metin Detayı / View Cleaned Text"):
st.write(cleaned)
except Exception as e:
st.error(f"Beklenmedik bir hata oluştu: {e}")
else:
st.warning("Lütfen bir metin girin. / Please enter a text.")