Normalisation des chaînes

Nettoyer des données en Java

Dennis Lee

Software Engineer

Jeu de données d’inventaire

  • Travailler avec un jeu de données d’inventaire alimentaire tout au long du chapitre
  • Modifier certaines colonnes comme le nom du produit pour illustrer les transformations

 

Nom du produit Catégorie Statut Date de réception Quantité
Eggplant Fruits et légumes Arrêté 01/03/25 46
VEGETABLE OIL Huiles et graisses En rupture 01/04/25 51
Cheese Produits laitiers Actif 01/06/25 78
Fresh (Organic) *Carrots* Fruits et légumes Arrêté 01/05/25 51
Bell Pepper Fresh Fruits et légumes Actif 02/05/25 67
Nettoyer des données en Java

Pourquoi normaliser les chaînes

  • Chaînes désordonnées : l’ordinateur ne reconnaît pas le texte
  • Exemple : inventaire d’un magasin
  • Solution : normaliser les chaînes

 

String[] messyProducts = {
    "Eggplant ",              // Espace en trop à la fin
    "VEGETABLE OIL",          // Casse incohérente
    "Fresh (Organic) *Carrots*", // Caractères spéciaux
    "Bell   Pepper    Fresh",    // Espaces en trop entre les mots
};
Nettoyer des données en Java

Supprimer les espaces en début et fin

String[] products = {"Eggplant ", "  Vegetable Oil", " Cheese "};
for (String product : products) {
    String cleaned = product.trim(); // Supprime les espaces en début/fin
    System.out.println(cleaned);
}
Eggplant
Vegetable Oil
Cheese
Nettoyer des données en Java

Standardiser la casse du texte

List<String> products = Arrays.asList("Eggplant", "VEGETABLE OIL", "cheese");

products.stream()
.map(String::toLowerCase) // Tout passer en minuscules
.forEach(System.out::println); // Afficher chaque produit
eggplant
vegetable oil
cheese
Nettoyer des données en Java

Motifs regex

  • Expressions régulières (regex) : motifs spéciaux pour faire correspondre du texte$^1$
  • [^a-zA-Z\\s] : trouve tout caractère qui n’est pas une lettre ou un espace
// Ce motif correspond à tout caractère QUI N’EST PAS :
[       // Début d’un ensemble de caractères
^       // Négation — tout ce qui n’est pas dans cet ensemble
a-z     // toute lettre minuscule
A-Z     // toute lettre majuscule
\\s     // tout caractère d’espacement (\\ supplémentaire pour que Java interprète \\s)
]       // Fin de l’ensemble

1 https://www.datacamp.com/cheat-sheet/regular-expresso
Nettoyer des données en Java

Nettoyer les caractères spéciaux

String dirtyName = "Fresh (Organic) *Carrots*"; // Caractères spéciaux : (, ), *

String cleaned = dirtyName.replaceAll("[^a-zA-Z\\s]", ""); // Supprimer les non‑lettres
System.out.println(cleaned); // Sortie : "Fresh Organic Carrots"
Fresh Organic Carrots
Nettoyer des données en Java

Nettoyer les espaces multiples

import java.util.regex.Pattern;
Pattern pattern = Pattern.compile("\\s+"); // Correspond à plusieurs espaces

String messyProduct = "Bell Pepper Fresh"; // Contient des espaces en trop // Remplacer les espaces multiples par un seul String cleanedProduct = pattern.matcher(messyProduct).replaceAll(" ");
System.out.println(cleanedProduct);
Bell Pepper Fresh
Nettoyer des données en Java

Tout combiner

List<String> messyProducts = Arrays.asList(
        "Eggplant ", "VEGETABLE OIL",
        "Fresh (Organic) *Carrots*", "Bell   Pepper    Fresh"
); // Noms produits extraits de notre jeu de données d’inventaire

messyProducts.stream()
        .map(s -> s.trim()                       // Corriger espaces externes
                .replaceAll("[^a-zA-Z\\s]", "")  // Supprimer caractères spéciaux
                .replaceAll("\\s+", " ")         // Corriger espaces internes
                .toLowerCase())                  // Standardiser la casse
        .forEach(System.out::println);
Nettoyer des données en Java

Tout combiner : sorties

eggplant
vegetable oil
fresh organic carrots
bell pepper fresh
Nettoyer des données en Java

Passons à la pratique !

Nettoyer des données en Java

Preparing Video For Download...