Normalizzazione delle stringhe

Pulizia dei dati in Java

Dennis Lee

Software Engineer

Dataset inventario alimentare

  • Usi un dataset di inventario alimentare per tutto il capitolo
  • Modifica colonne come il nome prodotto per mostrare trasformazioni

 

Nome prodotto Categoria Stato Data ricezione Quantità
Eggplant Frutta e Verdura Fuori produzione 3/1/25 46
VEGETABLE OIL Oli e Grassi In arretrato 4/1/25 51
Cheese Latticini Attivo 6/1/25 78
Fresh (Organic) *Carrots* Frutta e Verdura Fuori produzione 5/1/25 51
Bell Pepper Fresh Frutta e Verdura Attivo 5/2/25 67
Pulizia dei dati in Java

Perché la normalizzazione delle stringhe è importante

  • Stringhe disordinate: i computer non riconoscono il testo
  • Esempio: inventario di un negozio di alimentari
  • Soluzione: normalizzare le stringhe

 

String[] messyProducts = {
    "Eggplant ",              // Spazio extra alla fine
    "VEGETABLE OIL",             // Maiuscole/minuscole incoerenti
    "Fresh (Organic) *Carrots*", // Caratteri speciali
    "Bell   Pepper    Fresh",    // Spazi extra tra le parole
};
Pulizia dei dati in Java

Rimuovere spazi iniziali e finali

String[] products = {"Eggplant ", "  Vegetable Oil", " Cheese "};
for (String product : products) {
    String cleaned = product.trim(); // Rimuove spazi iniziali/finali
    System.out.println(cleaned);
}
Eggplant
Vegetable Oil
Cheese
Pulizia dei dati in Java

Uniformare il formato del testo

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

products.stream()
.map(String::toLowerCase) // Converti tutto in minuscolo
.forEach(System.out::println); // Stampa ogni prodotto
eggplant
vegetable oil
cheese
Pulizia dei dati in Java

Pattern regex

  • Espressioni regolari (regex): pattern speciali che trovano testo$^1$
  • [^a-zA-Z\\s]: trova qualsiasi carattere che non sia lettera o spazio
// Questo pattern corrisponde a qualsiasi carattere che NON è:
[       // Inizio set di caratteri
^       // NON - corrisponde a ciò che non è nel set
a-z     // qualsiasi lettera minuscola
A-Z     // qualsiasi lettera maiuscola
\\s     // qualsiasi spazio bianco (serve una \ extra per far interpretare \s a Java)
]       // Fine set di caratteri

1 https://www.datacamp.com/cheat-sheet/regular-expresso
Pulizia dei dati in Java

Pulire i caratteri speciali

String dirtyName = "Fresh (Organic) *Carrots*"; // Caratteri speciali: (, ), *

String cleaned = dirtyName.replaceAll("[^a-zA-Z\\s]", ""); // Rimuovi non lettere
System.out.println(cleaned); // Output: "Fresh Organic Carrots"
Fresh Organic Carrots
Pulizia dei dati in Java

Pulire spazi multipli

import java.util.regex.Pattern;
Pattern pattern = Pattern.compile("\\s+"); // Trova spazi multipli

String messyProduct = "Bell Pepper Fresh"; // Contiene spazi extra // Sostituisci spazi multipli con uno singolo String cleanedProduct = pattern.matcher(messyProduct).replaceAll(" ");
System.out.println(cleanedProduct);
Bell Pepper Fresh
Pulizia dei dati in Java

Mettere tutto insieme

List<String> messyProducts = Arrays.asList(
        "Eggplant ", "VEGETABLE OIL",
        "Fresh (Organic) *Carrots*", "Bell   Pepper    Fresh"
); // Nomi prodotto estratti dal nostro dataset di inventario alimentare

messyProducts.stream()
        .map(s -> s.trim()                       // Sistema spazi esterni
                .replaceAll("[^a-zA-Z\\s]", "")  // Rimuovi caratteri speciali
                .replaceAll("\\s+", " ")         // Sistema spazi interni
                .toLowerCase())                  // Uniforma il case
        .forEach(System.out::println);
Pulizia dei dati in Java

Mettere tutto insieme: output

eggplant
vegetable oil
fresh organic carrots
bell pepper fresh
Pulizia dei dati in Java

Passiamo alla pratica !

Pulizia dei dati in Java

Preparing Video For Download...