Normalisation de chaînes

Nettoyer des données en Java

Dennis Lee

Software Engineer

Ensemble de données d'inventaire d'épicerie

  • Travailler avec un ensemble de données d'inventaire d'épicerie tout au long du chapitre
  • Modifier certaines colonnes comme le nom du produit pour illustrer des transformations

 

Nom du produit Catégorie Statut Date de réception Quantité
Eggplant Fruits et légumes Retiré 3/1/25 46
VEGETABLE OIL Huiles et matières grasses En rupture 4/1/25 51
Cheese Produits laitiers Actif 6/1/25 78
Fresh (Organic) *Carrots* Fruits et légumes Retiré 5/1/25 51
Bell Pepper Fresh Fruits et légumes Actif 5/2/25 67
Nettoyer des données en Java

Pourquoi la normalisation des chaînes est importante

  • Chaînes désordonnées : l'ordinateur ne reconnaît pas bien le texte
  • Exemple : inventaire d'épicerie
  • Solution : normaliser les chaînes

 

String[] messyProducts = {
    "Eggplant ",              // Extra whitespace at the end
    "VEGETABLE OIL",             // Inconsistent case
    "Fresh (Organic) *Carrots*", // Special characters
    "Bell   Pepper    Fresh",    // Extra whitespace between words
};
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(); // Removes leading/trailing whitespace
    System.out.println(cleaned);
}
Eggplant
Vegetable Oil
Cheese
Nettoyer des données en Java

Uniformiser la casse du texte

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

products.stream()
.map(String::toLowerCase) // Convert all to lowercase
.forEach(System.out::println); // Print each product
eggplant
vegetable oil
cheese
Nettoyer des données en Java

Motifs regex

  • Expressions régulières (regex) : motifs spéciaux pour repérer du texte$^1$
  • [^a-zA-Z\\s] : trouve tout caractère qui n'est ni une lettre ni un espace
// Ce motif trouve tout caractère qui N'EST PAS :
[       // Début de l'ensemble de caractères
^       // Négation : tout ce qui n'est pas dans l'ensemble
a-z     // une lettre minuscule
A-Z     // une lettre majuscule
\\s     // un caractère d'espacement (\\s en Java)
]       // 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*"; // Special characters: (, ), *

String cleaned = dirtyName.replaceAll("[^a-zA-Z\\s]", ""); // Remove non-letters
System.out.println(cleaned); // Output: "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+"); // Match multiple spaces

String messyProduct = "Bell Pepper Fresh"; // Contains extra spaces // Replace multiple spaces with single space String cleanedProduct = pattern.matcher(messyProduct).replaceAll(" ");
System.out.println(cleanedProduct);
Bell Pepper Fresh
Nettoyer des données en Java

Tout rassembler

List<String> messyProducts = Arrays.asList(
        "Eggplant ", "VEGETABLE OIL",
        "Fresh (Organic) *Carrots*", "Bell   Pepper    Fresh"
); // Product names extracted from our grocery inventory dataset

messyProducts.stream()
        .map(s -> s.trim()                       // Fix outer spaces
                .replaceAll("[^a-zA-Z\\s]", "")  // Remove special chars
                .replaceAll("\\s+", " ")         // Fix inner spaces
                .toLowerCase())                  // Standardize case
        .forEach(System.out::println);
Nettoyer des données en Java

Tout rassembler : résultats

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...