Spaces:
Running
Running
File size: 6,405 Bytes
546c04a b811a27 e6455d3 b811a27 991ed79 546c04a d4ccf04 8085a83 d4ccf04 9449219 8085a83 546c04a d4ccf04 991ed79 d4ccf04 e6455d3 991ed79 e6455d3 991ed79 e6455d3 d4ccf04 546c04a b811a27 d4ccf04 546c04a b811a27 d4ccf04 b811a27 d4ccf04 b811a27 d4ccf04 b811a27 546c04a d4ccf04 991ed79 d4ccf04 991ed79 d4ccf04 991ed79 546c04a 991ed79 d4ccf04 991ed79 d4ccf04 991ed79 9449219 d4ccf04 9449219 e6455d3 991ed79 546c04a e6455d3 d4ccf04 991ed79 e6455d3 d4ccf04 e6455d3 b811a27 e6455d3 d4ccf04 b811a27 9449219 d4ccf04 991ed79 e6455d3 9449219 991ed79 e6455d3 d4ccf04 9449219 991ed79 9449219 991ed79 9449219 d4ccf04 57784e6 d4ccf04 9449219 d4ccf04 991ed79 d4ccf04 991ed79 d4ccf04 546c04a d4ccf04 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 |
import streamlit as st
from transformers import pipeline, AutoTokenizer, AutoModelForSequenceClassification
import pandas as pd
import torch
import io
# --- Configuration générale de la page ---
st.set_page_config(
page_title="🌍 Analyseur de Sentiment Multilingue",
page_icon="🎯",
layout="centered",
)
# --- Choix du thème (clair/sombre) par l'utilisateur ---
theme = st.sidebar.selectbox("🎨 Choisissez le thème :", ["Clair", "Sombre"])
if theme == "Clair":
background_color = "#f0f2f6"
else:
background_color = "#222222"
# --- Application du fond selon le thème choisi ---
st.markdown(
f"""
<style>
.stApp {{
background-color: {background_color};
}}
textarea {{
border: 2px solid #5DADE2 !important;
border-radius: 10px !important;
background-color: #ffffff !important;
}}
</style>
""",
unsafe_allow_html=True
)
# --- Chargement des modèles IA ---
@st.cache_resource
def load_sentiment_model():
"""Charge le modèle de détection de sentiment."""
return pipeline("text-classification", model="tabularisai/multilingual-sentiment-analysis")
@st.cache_resource
def load_language_model():
"""Charge le modèle de détection de langue."""
tokenizer = AutoTokenizer.from_pretrained("papluca/xlm-roberta-base-language-detection")
model = AutoModelForSequenceClassification.from_pretrained("papluca/xlm-roberta-base-language-detection")
return tokenizer, model
sentiment_model = load_sentiment_model()
tokenizer_lang, model_lang = load_language_model()
# --- Fonction de détection de langue avec IA ---
def detect_language(text):
"""Détecte automatiquement la langue du texte fourni."""
inputs = tokenizer_lang(text, return_tensors="pt", truncation=True, max_length=512)
outputs = model_lang(**inputs)
predicted_class = torch.argmax(outputs.logits, dim=1)
label = model_lang.config.id2label[predicted_class.item()]
return label
# --- Initialisation de l'historique si non existant ---
if 'history' not in st.session_state:
st.session_state.history = []
# --- Fonction pour calculer la couleur de la barre selon le score ---
def sentiment_color(score):
"""Retourne une couleur RGB en fonction du score de confiance."""
red = int(255 * (1 - score))
green = int(255 * score)
return f'rgb({red},{green},0)'
# --- Interface principale ---
st.title("🎯 Analyseur de Sentiment Multilingue")
st.write("Cette application utilise deux modèles d'IA pour détecter la langue et analyser le sentiment d'un texte.")
# --- Saisie utilisateur ---
user_input = st.text_area("✍️ Entrez vos phrases séparées par un point-virgule ';'", height=180)
# --- Bouton pour déclencher l'analyse ---
if st.button("🔎 Analyser"):
if not user_input.strip():
st.warning("⚠️ Merci d'entrer au moins une phrase complète.")
else:
phrases = [phrase.strip() for phrase in user_input.split(';') if phrase.strip()]
st.info(f"Nombre de phrases détectées : {len(phrases)}")
results = []
# --- Traitement de chaque phrase ---
with st.spinner("Analyse en cours... ⏳"):
for phrase in phrases:
# Détection de la langue
try:
lang = detect_language(phrase)
except Exception as e:
lang = "Erreur"
# Analyse du sentiment
analysis = sentiment_model(phrase)[0]
sentiment = analysis["label"]
score = round(analysis["score"], 2)
# Stockage des résultats
result_entry = {
"Texte": phrase,
"Langue": lang,
"Sentiment": sentiment,
"Score": score
}
results.append(result_entry)
st.session_state.history.append(result_entry)
# --- Affichage des résultats pour chaque phrase ---
if "negative" in sentiment.lower():
st.toast("🚨 Sentiment négatif détecté !", icon="⚡")
st.error(f"😞 Texte : {phrase}")
elif "positive" in sentiment.lower():
st.balloons()
st.success(f"😊 Texte : {phrase}")
else:
st.warning(f"😐 Texte : {phrase}")
# --- Explication du slider de confiance ---
st.markdown(
"""
<p style="margin-top:20px; text-align:center;">
<em>Le score de confiance indique la certitude du modèle concernant l'émotion détectée. Plus le score est élevé, plus la prédiction est fiable.</em>
</p>
""",
unsafe_allow_html=True
)
# --- Barre colorée de score ---
color = sentiment_color(score)
st.markdown(
f"""
<div style="margin:10px 0;">
<div style="height:20px;width:100%;background:linear-gradient(to right, {color} {score*100}%, #d3d3d3 {score*100}%);border-radius:10px;"></div>
<center><small><b>Score de confiance : {score:.0%}</b></small></center>
</div>
""",
unsafe_allow_html=True
)
# --- Affichage de l'historique des analyses ---
if st.session_state.history:
st.markdown("---")
st.subheader("📄 Historique des Analyses")
df_history = pd.DataFrame(st.session_state.history)
st.dataframe(df_history)
# --- Téléchargement de l'historique en CSV ---
csv = df_history.to_csv(index=False)
buffer = io.BytesIO()
buffer.write(csv.encode())
buffer.seek(0)
st.download_button(
label="📥 Télécharger l'historique en CSV",
data=buffer,
file_name="historique_sentiment.csv",
mime="text/csv"
)
# --- Footer avec crédits modèles ---
st.markdown("---")
st.markdown(
"""
🔗 [Voir le modèle de sentiment utilisé](https://huggingface.co./tabularisai/multilingual-sentiment-analysis)
🔗 [Voir le modèle de détection de langue utilisé](https://huggingface.co./papluca/xlm-roberta-base-language-detection)
"""
)
|