amazon-sentiment-analysis-shirin / data_processing.py
Oxyb50410's picture
Upload 4 files
f825a37 verified
"""
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)}")