Spaces:
Runtime error
Runtime error
File size: 3,024 Bytes
f825a37 |
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 |
"""
Module de traitement des données pour l'analyse de sentiment
Nettoyage des textes et labellisation
"""
import re
import string
# Liste des stopwords français
FRENCH_STOPWORDS = {
"a", "à", "ai", "aie", "aient", "aies", "ait", "alors", "as", "au", "aucun", "aura",
"aurai", "auraient", "aurais", "aurait", "auve", "avec", "avez", "aviez", "avions",
"avoir", "avons", "bon", "car", "ce", "cela", "ces", "cet", "cette", "ceux", "chaque",
"comme", "d", "dans", "de", "des", "du", "elle", "en", "encore", "est", "et", "eu",
"fait", "faites", "fois", "ici", "il", "ils", "je", "la", "le", "les", "leur", "lui",
"mais", "me", "mes", "moi", "mon", "ne", "nos", "notre", "nous", "on", "ou", "par",
"pas", "pour", "plus", "qu", "que", "qui", "sa", "se", "ses", "son", "sur",
"ta", "te", "tes", "toi", "ton", "toujours", "tout", "tous", "très", "tu",
"un", "une", "vos", "votre", "vous", "y"
}
# Table de traduction pour remplacer la ponctuation par des espaces
PUNCT_TABLE = str.maketrans({c: " " for c in string.punctuation})
def clean_text(text: str) -> str:
"""
Nettoie un texte d'avis client :
- Conversion en minuscules
- Suppression de la ponctuation
- Suppression des chiffres
- Suppression des stopwords français
- Normalisation des espaces
Args:
text (str): Texte brut à nettoyer
Returns:
str: Texte nettoyé
"""
if not isinstance(text, str):
return ""
# 1. Minuscules
text = text.lower()
# 2. Suppression de la ponctuation
text = text.translate(PUNCT_TABLE)
# 3. Suppression des chiffres
text = re.sub(r"\d+", " ", text)
# 4. Normalisation des espaces
text = re.sub(r"\s+", " ", text).strip()
# 5. Suppression des stopwords
tokens = [tok for tok in text.split() if tok not in FRENCH_STOPWORDS]
return " ".join(tokens)
def label_to_sentiment(label_value: int) -> str:
"""
Convertit un label numérique (1-5 étoiles) en sentiment positif/négatif
Args:
label_value (int): Note de 1 à 5 étoiles
Returns:
str: "positif" si >= 3 étoiles, "negatif" sinon
"""
try:
v = int(label_value)
except Exception:
v = 0
return "positif" if v >= 3 else "negatif"
def make_fake_email(index: int) -> str:
"""
Génère un email factice pour un client
Args:
index (int): Numéro du client
Returns:
str: Email au format client00001@example.com
"""
return f"client{index:05d}@example.com"
if __name__ == "__main__":
# Tests
test_text = "Je suis TRÈS déçu de ce produit ! Il est arrivé cassé et le service client ne répond pas..."
print(f"Original : {test_text}")
print(f"Nettoyé : {clean_text(test_text)}")
print(f"\nLabel 1 → {label_to_sentiment(1)}")
print(f"Label 5 → {label_to_sentiment(5)}")
print(f"\nEmail test : {make_fake_email(42)}")
|