Normalización de strings

Limpieza de datos en Java

Dennis Lee

Software Engineer

Dataset de inventario de supermercado

  • Trabajaremos con un dataset de inventario de supermercado en todo el capítulo
  • Modificaremos columnas como el nombre del producto para mostrar transformaciones

 

Product Name Category Status Date Received Quantity
Eggplant Fruits & Vegetables Discontinued 3/1/25 46
VEGETABLE OIL Oils & Fats Backordered 4/1/25 51
Cheese Dairy Active 6/1/25 78
Fresh (Organic) *Carrots* Fruits & Vegetables Discontinued 5/1/25 51
Bell Pepper Fresh Fruits & Vegetables Active 5/2/25 67
Limpieza de datos en Java

Por qué importa normalizar strings

  • Strings desordenados: el ordenador no reconoce bien el texto
  • Ejemplo: inventario de un súper
  • Solución: normalizar strings

 

String[] messyProducts = {
    "Eggplant ",              // Espacio extra al final
    "VEGETABLE OIL",             // Mayúsculas incoherentes
    "Fresh (Organic) *Carrots*", // Caracteres especiales
    "Bell   Pepper    Fresh",    // Espacios extra entre palabras
};
Limpieza de datos en Java

Quitar espacios al inicio y al final

String[] products = {"Eggplant ", "  Vegetable Oil", " Cheese "};
for (String product : products) {
    String cleaned = product.trim(); // Quita espacios al inicio/fin
    System.out.println(cleaned);
}
Eggplant
Vegetable Oil
Cheese
Limpieza de datos en Java

Estandarizar mayúsculas/minúsculas

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

products.stream()
.map(String::toLowerCase) // Convertir todo a minúsculas
.forEach(System.out::println); // Imprimir cada producto
eggplant
vegetable oil
cheese
Limpieza de datos en Java

Patrones regex

  • Expresiones regulares (regex): patrones especiales que coinciden con texto$^1$
  • [^a-zA-Z\\s]: encuentra cualquier carácter que no sea letra o espacio
// Este patrón coincide con cualquier carácter que NO es:
[       // Inicio del conjunto de caracteres
^       // NO: coincide con lo que no está en el conjunto
a-z     // cualquier letra minúscula
A-Z     // cualquier letra mayúscula
\\s     // cualquier espacio en blanco (hace falta \ extra para que Java interprete \s)
]       // Fin del conjunto

1 https://www.datacamp.com/cheat-sheet/regular-expresso
Limpieza de datos en Java

Limpieza de caracteres especiales

String dirtyName = "Fresh (Organic) *Carrots*"; // Caracteres especiales: (, ), *

String cleaned = dirtyName.replaceAll("[^a-zA-Z\\s]", ""); // Quitar no letras
System.out.println(cleaned); // Salida: "Fresh Organic Carrots"
Fresh Organic Carrots
Limpieza de datos en Java

Limpieza de espacios múltiples

import java.util.regex.Pattern;
Pattern pattern = Pattern.compile("\\s+"); // Coincidir varios espacios

String messyProduct = "Bell Pepper Fresh"; // Tiene espacios extra // Sustituir múltiples espacios por uno String cleanedProduct = pattern.matcher(messyProduct).replaceAll(" ");
System.out.println(cleanedProduct);
Bell Pepper Fresh
Limpieza de datos en Java

Todo junto

List<String> messyProducts = Arrays.asList(
        "Eggplant ", "VEGETABLE OIL",
        "Fresh (Organic) *Carrots*", "Bell   Pepper    Fresh"
); // Nombres de productos extraídos del inventario del súper

messyProducts.stream()
        .map(s -> s.trim()                       // Quitar espacios externos
                .replaceAll("[^a-zA-Z\\s]", "")  // Quitar caracteres especiales
                .replaceAll("\\s+", " ")         // Arreglar espacios internos
                .toLowerCase())                  // Estandarizar mayúsculas/minúsculas
        .forEach(System.out::println);
Limpieza de datos en Java

Todo junto: salidas

eggplant
vegetable oil
fresh organic carrots
bell pepper fresh
Limpieza de datos en Java

¡Vamos a practicar!

Limpieza de datos en Java

Preparing Video For Download...