Нормалізація рядків

Очищення даних у Java

Dennis Lee

Software Engineer

Набір даних інвентарю продуктів

  • Упродовж розділу працюватимете з набором даних інвентарю продуктового магазину
  • Змінюватимете окремі стовпці, як-от назву товару, щоб показати перетворення даних

 

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
Очищення даних у Java

Чому важлива нормалізація рядків

  • Неохайні рядки: комп'ютери не розпізнають текст
  • Приклад: інвентар продуктового магазину
  • Рішення: нормалізуйте рядки

 

String[] messyProducts = {
    "Eggplant ",              // Extra whitespace at the end
    "VEGETABLE OIL",             // Inconsistent case
    "Fresh (Organic) *Carrots*", // Special characters
    "Bell   Pepper    Fresh",    // Extra whitespace between words
};
Очищення даних у Java

Вилучення пробілів на початку та в кінці

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
Очищення даних у Java

Уніфікація регістру тексту

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
Очищення даних у Java

Шаблони regex

  • Регулярні вирази (regex): спеціальні шаблони для пошуку в тексті$^1$
  • [^a-zA-Z\\s]: знаходить будь-який символ, який не є літерою або пробілом
// Цей шаблон відповідає будь-якому символу, ЯКИЙ НЕ є:
[       // Початок набору символів
^       // НЕ — збіг з усім, чого немає в наборі
a-z     // будь-яка мала літера
A-Z     // будь-яка велика літера
\\s     // будь-який пробільний символ (потрібен додатковий \ для Java, щоб інтерпретувати \s)
]       // Кінець набору символів

1 https://www.datacamp.com/cheat-sheet/regular-expresso
Очищення даних у Java

Очищення спеціальних символів

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
Очищення даних у Java

Прибирання зайвих пробілів

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
Очищення даних у Java

Об'єднуємо все разом

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);
Очищення даних у Java

Об'єднуємо все разом: результати

eggplant
vegetable oil
fresh organic carrots
bell pepper fresh
Очищення даних у Java

Давайте потренуємось!

Очищення даних у Java

Preparing Video For Download...