Spaces:
Running
Running
| """ | |
| 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) |