GDM-Aide-RUN-V2 / test_text_cleaning.py
Elkristobal59's picture
feat: optimize model loading, clean imports, run V4 training and fix tests
187f074
Raw
History Blame Contribute Delete
8.05 kB
"""
Tests de régression pour la fonction nettoyer_texte_francais
"""
import sys
import os
sys.path.insert(0, os.path.dirname(__file__))
# Import des fonctions à tester depuis train_V4.py
from train_V4 import nettoyer_texte_francais
def test_nettoyage_basique():
"""Tests de nettoyage de base"""
# Texte simple
assert nettoyer_texte_francais("Bonjour le monde") == "Bonjour le monde"
# Espaces multiples
assert nettoyer_texte_francais("Bonjour le monde") == "Bonjour le monde"
# Espaces en début/fin
assert nettoyer_texte_francais(" Bonjour le monde ") == "Bonjour le monde"
# Texte vide
assert nettoyer_texte_francais("") == ""
assert nettoyer_texte_francais(" ") == ""
def test_suppression_html():
"""Test de suppression des tags HTML"""
assert nettoyer_texte_francais("<b>Bonjour</b>") == "Bonjour"
assert nettoyer_texte_francais("<p>Bonjour <i>le</i> monde</p>") == "Bonjour le monde"
assert nettoyer_texte_francais("Texte <div>au milieu</div> et apr\u00e8s") == "Texte au milieu et apres"
assert nettoyer_texte_francais("<script>alert('test');</script>Bonjour") == "alert test ; Bonjour"
def test_suppression_emails():
"""Test de suppression des emails"""
assert nettoyer_texte_francais("Contact: test@example.com") == "Contact:"
assert nettoyer_texte_francais("Email: user.name@domain.co.uk pour info") == "Email: pour info"
assert nettoyer_texte_francais("test@test.fr et another@test.com") == "et"
def test_suppression_urls():
"""Test de suppression des URLs"""
assert nettoyer_texte_francais("Visitez http://example.com aujourd'hui") == "Visitez aujourd hui"
assert nettoyer_texte_francais("Site: https://secure.site.org/path?param=value") == "Site:"
assert nettoyer_texte_francais("WWW.WEBSITE.COM et ftp://site.com") == "WWW.WEBSITE.COM et TECHNO : site.com"
def test_normalisation_accents():
"""Test de normalisation des accents français"""
assert nettoyer_texte_francais("fran\u00e7ais") == "francais"
assert nettoyer_texte_francais("\u00eatre") == "etre"
assert nettoyer_texte_francais("\u00e0\u00e2\u00e4\u00e8\u00ea\u00eb\u00ee\u00ef\u00f4\u00f6\u00f9\u00fb\u00fc\u00e7") == "aaaeeeiioouuuc"
assert nettoyer_texte_francais("\u00c0\u00c2\u00c4\u00c8\u00ca\u00cb\u00ce\u00cf\u00d4\u00d6\u00d9\u00db\u00dc\u00c7") == "AAAEEEIIOOUUUC"
assert nettoyer_texte_francais("\u0153\u00e6\u00f8") == "oeaeo"
assert nettoyer_texte_francais("\u0152\u00c6\u00d8") == "OEAEO"
def test_suppression_caracteres_speciaux():
"""Test de suppression des caractères spéciaux"""
assert nettoyer_texte_francais("Bonjour! Comment \u00e7a va?") == "Bonjour! Comment ca va?"
assert nettoyer_texte_francais("Test@#$%^&*()_+Fin") == "Test _ Fin"
assert nettoyer_texte_francais("Prix: 10\u20ac & 5$") == "Prix: 10 5"
# Garder la ponctuation de base
assert nettoyer_texte_francais("Bonjour, comment allez-vous? Bien!") == "Bonjour, comment allez-vous? Bien!"
def test_suppression_signatures():
"""Test de suppression des signatures professionnelles"""
texte = "Bonjour,\n\nJe vous envoie les documents.\n\nCordialement,\n"
resultat = nettoyer_texte_francais(texte)
assert "Cordialement" not in resultat
assert "Bonjour" in resultat
assert "documents" in resultat
texte = "Merci pour votre aide\n\nBien cordialement,\n\n"
resultat = nettoyer_texte_francais(texte)
assert "Bien cordialement" not in resultat
assert "Merci pour votre aide" in resultat
# Test avec signature écrite en majuscules
texte = "Voici les informations\n\nMEILLEURES SALUTATIONS\n\n"
resultat = nettoyer_texte_francais(texte)
assert "MEILLEURES SALUTATIONS" not in resultat
assert "Voici les informations" in resultat
def test_normalisation_it():
"""Test de normalisation du vocabulaire IT spécifique"""
# Incidents
assert nettoyer_texte_francais("Incident INC123456 en cours") == "Incident ID_TICKET en cours"
assert nettoyer_texte_francais("Probl\u00e8me avec INC999 et INC888") == "ID_PROBLEME avec ID_TICKET et ID_TICKET"
# Requests
assert nettoyer_texte_francais("Demande REQ789 pour nouveau mat\u00e9riel") == "Demande ID_DEMANDE pour nouveau materiel"
# Changes
assert nettoyer_texte_francais("Planning du CHG456 cette semaine") == "Planning du ID_CHANGE cette semaine"
assert nettoyer_texte_francais("CRQ123 en attente de validation") == "ID_CHANGE en attente de validation"
# Versions
assert nettoyer_texte_francais("D\u00e9ploiement de la version v2.1.0") == "Deploiement de la version VERSION"
assert nettoyer_texte_francais("Patch v10.5.3 appliqu\u00e9") == "Patch VERSION applique"
# Systèmes
assert nettoyer_texte_francais("Probl\u00e8me sur le serveur WINDOWS") == "ID_PROBLEME sur le serveur SYSTEME"
assert nettoyer_texte_francais("Migration LINUX vers SAP termin\u00e9e") == "Migration SYSTEME vers SYSTEME terminee"
# Technologies
assert nettoyer_texte_francais("Erreur dans l'API REST") == "Erreur dans l TECHNO TECHNO"
assert nettoyer_texte_francais("\u00c9change de donn\u00e9es en JSON via HTTP") == "Echange de donnees en TECHNO via TECHNO"
# Adresses IP
assert nettoyer_texte_francais("Connexion \u00e0 192.168.1.1 \u00e9chou\u00e9e") == "Connexion a IP_ADDRESS echouee"
assert nettoyer_texte_francais("Plage 10.0.0.1 \u00e0 10.0.0.254") == "Plage IP_ADDRESS a IP_ADDRESS"
# UUIDs
assert nettoyer_texte_francais("ID de session: 550e8400-e29b-41d4-a716-446655440000") == "ID de session: UUID"
def test_retour_stats():
"""Test du retour de statistiques quand demandé"""
texte, stats = nettoyer_texte_francais("<b>Bonjour test@example.com</b> !", retour_stats=True)
# Vérifier que le texte nettoyé est correct
assert "Bonjour" in texte
assert "<b>" not in texte
assert "test@example.com" not in texte
assert "!" in texte # La ponctuation de base est conservée
# Vérifier les statistiques
assert isinstance(stats, dict)
assert "longueur_originale" in stats
assert "longueur_nettoye" in stats
assert "taux_suppression" in stats
assert "operations" in stats
# Vérifier que des opérations ont été appliquées
assert len(stats["operations"]) > 0
assert "suppression_html" in stats["operations"]
assert "suppression_emails" in stats["operations"]
# Vérifier que le taux de suppression est raisonnable
assert 0 <= stats["taux_suppression"] <= 100
def test_chaine_non_string():
"""Test avec des entrées non-chaînes"""
assert nettoyer_texte_francais(None) == ""
assert nettoyer_texte_francais(123) == ""
assert nettoyer_texte_francais([]) == ""
assert nettoyer_texte_francais({}) == ""
# Avec retour de stats
texte, stats = nettoyer_texte_francais(123, retour_stats=True)
assert texte == ""
assert stats["taux_suppression"] == 0 # Pas de suppression sur un entier
if __name__ == "__main__":
print("Lancement des tests de régression pour le nettoyage de texte...")
test_functions = [
test_nettoyage_basique,
test_suppression_html,
test_suppression_emails,
test_suppression_urls,
test_normalisation_accents,
test_suppression_caracteres_speciaux,
test_suppression_signatures,
test_normalisation_it,
test_retour_stats,
test_chaine_non_string
]
passed = 0
failed = 0
for test_func in test_functions:
try:
test_func()
print(f"✓ {test_func.__name__}")
passed += 1
except Exception as e:
import traceback
print(f"✗ {test_func.__name__}: {e}")
traceback.print_exc()
failed += 1
print(f"\nRésultats: {passed} réussis, {failed} échoués")
if failed == 0:
print("Tous les tests sont passés! ✓")
sys.exit(0)
else:
print("Certains tests ont échoué ✗")
sys.exit(1)