""" 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)}")