Fryxis
ajout de l'application de l'autre bg de connard
d814fb3
# app_streamlit_fakenews.py
import streamlit as st
from transformers import pipeline
import pandas as pd
import matplotlib.pyplot as plt
import time
from datetime import datetime
# --- Configuration Thème Streamlit ---
current_hour = datetime.now().hour
if 6 <= current_hour < 18:
theme = "light"
else:
theme = "dark"
st.set_page_config(
page_title="Détection de Fake News",
page_icon="",
layout="wide",
initial_sidebar_state="expanded"
)
# --- Chargement du modèle ---
@st.cache_resource
def load_model():
time.sleep(1)
return pipeline(
"text-classification",
model="mrm8488/bert-tiny-finetuned-fake-news-detection"
)
with st.spinner("Chargement du modèle..."):
classifier = load_model()
# --- Fonctions ---
def detect_fake_news(texts):
if isinstance(texts, str):
texts = [texts]
results = classifier(texts)
df = pd.DataFrame({
"Texte": texts,
"Prédiction": [res['label'] for res in results],
"Score de Confiance": [res['score'] for res in results]
})
return df
def show_fake_news_graph(df):
prediction_counts = df["Prédiction"].value_counts()
fig, ax = plt.subplots(figsize=(6,4))
prediction_counts.plot(kind="bar", ax=ax)
ax.set_ylabel("Nombre de textes")
ax.set_xlabel("Classe")
ax.set_title("Répartition des prédictions")
st.pyplot(fig)
def animate_scores(df):
st.write("Scores de Confiance Individuels")
for idx, row in df.iterrows():
st.write(f"Texte {idx + 1} : {row['Texte']}")
st.progress(row['Score de Confiance'])
# --- UI ---
if theme == "light":
st.title("Détection de Fake News - Mode Jour")
else:
st.title("Détection de Fake News - Mode Nuit")
st.subheader("Outil de détection automatique des fausses informations")
st.markdown("""
Bienvenue dans cet outil de détection de fake news.
Analysez si un texte est vraisemblablement **réel** ou **faux**.
""")
# Sidebar pour options
with st.sidebar:
st.header("Paramètres")
mode = st.radio("Mode d'analyse", ["Texte Unique", "Batch de Textes (.txt)"])
threshold = st.slider("Filtrer par score de confiance", 0.0, 1.0, 0.5, 0.01)
show_graphs = st.checkbox("Afficher le graphique des résultats", value=True)
show_animations = st.checkbox("Afficher l'animation de score", value=True)
st.markdown("---")
st.caption(f"Mode actuel : {theme.capitalize()}")
# Corps principal
if mode == "Texte Unique":
st.write("Entrez votre texte à analyser")
user_input = st.text_area("Tapez ou copiez un article, une déclaration ou une actualité :", height=150)
analyze_button = st.button("Analyser")
if analyze_button:
if not user_input.strip():
st.warning("Veuillez entrer du texte avant d'analyser.")
else:
with st.spinner("Analyse en cours..."):
df_result = detect_fake_news(user_input)
df_result = df_result[df_result["Score de Confiance"] >= threshold]
st.success("Analyse terminée. Voici les résultats :")
st.dataframe(df_result, use_container_width=True)
if show_graphs and not df_result.empty:
st.write("Visualisation")
show_fake_news_graph(df_result)
if show_animations and not df_result.empty:
animate_scores(df_result)
else:
st.write("Uploadez votre fichier .txt")
uploaded_file = st.file_uploader("Chaque ligne doit contenir une information à vérifier", type=["txt"])
if uploaded_file is not None:
content = uploaded_file.read().decode("utf-8")
lines = [line.strip() for line in content.splitlines() if line.strip()]
if lines:
if st.button("Analyser le fichier"):
with st.spinner("Analyse en batch..."):
df_result = detect_fake_news(lines)
df_result = df_result[df_result["Score de Confiance"] >= threshold]
st.success(f"{len(df_result)} textes analysés avec succès.")
st.dataframe(df_result, use_container_width=True)
if show_graphs and not df_result.empty:
st.write("Visualisation")
show_fake_news_graph(df_result)
if show_animations and not df_result.empty:
animate_scores(df_result)
else:
st.warning("Le fichier est vide ou mal formaté.")
# Footer
st.markdown("""---""")
st.caption("Projet de détection automatique de fake news réalisé avec Python et Streamlit")