Парсинг характеристик

Парсинг характеристик позволяет извлекать из прайс-листа дополнительные параметры товаров (вес, размеры, мощность, цвет, материал и т.д.) и сохранять их в структурированном виде. Эти характеристики потом можно использовать для фильтрации, поиска и отображения на сайте.
Типы парсинга характеристик
Тип 1. Диапазон столбцов
Используется когда характеристики идут подряд в определенных столбцах. Например, в столбцах с 7 по 15 находятся различные характеристики товара: вес, размеры, материал, цвет и т.д. Настройки: тип парсинга = columns_range, start_column = 7, end_column = 15. Система возьмет все столбцы с 7 по 15 и создаст характеристики с именами "Характеристика_7", "Характеристика_8" и т.д.
Тип 2. Выбранные столбцы
Используется когда характеристики находятся в определенных столбцах вразнобой. Например, вес в столбце 7, размеры в столбце 9, материал в столбце 12. Настройки: тип парсинга = выбранные столбцы, выбранные столбцы = [7, 9, 12]. Система обработает только указанные столбцы.
Тип 3. Одна ячейка с разделителями
Используется когда все характеристики находятся в одной ячейке с разделителями. Например, ячейка содержит: "Мощность: 650 Вт; Вес: 1.8 кг; Цвет: синий; Материал: пластик". Настройки: тип парсинга = одна ячейка, выбранная ячейка = 5, разделитель = ";", ключ_значение_разделитель = ":". Система разделит текст по точке с запятой на отдельные характеристики, а затем каждую разделит двоеточием на название и значение.
Тип 4. Regex парсинг
Используется для сложных форматов, когда простые разделители не работают. Например, ячейка содержит: "Производитель: E[Salini]; Глубина: O[690]; Мощность: P[1500]". Настройки: тип парсинга = одна ячейка, выбранная ячейка = 5, использовать регулярные выражения = да, паттерн = r'(\w+):\s\w([^]+)]\s;'. Система применит регулярное выражение для извлечения пар ключ-значение.
Настройка имен характеристик
Вариант 1. Использовать первую строку как названия
Если в первой строке файла (после пропуска) находятся заголовки столбцов, можно использовать их как названия характеристик. Настройка: использовать первую строку как названия = да. Система возьмет значения из первой строки и использует их как имена характеристик для соответствующих столбцов.
Вариант 2. Пользовательские названия
Можно задать свои названия для каждого столбца в формате JSON: custom_names = {"7": "Вес", "8": "Длина", "9": "Ширина", "10": "Высота", "11": "Материал"}. Система будет использовать эти названия вместо стандартных "Характеристика_N".
Вариант 3. Автоматические названия
Если ничего не указано, система создает названия вида "Характеристика_7", "Характеристика_8" и т.д.
Примеры для разных типов
Пример для CSV/Excel (диапазон столбцов)
Файл: Артикул, Название, Цена, Вес, Длина, Ширина, Высота, Материал, Цвет
Строка: 12345, Дрель Bosch, 4500, 1.8 кг, 280 мм, 200 мм, 150 мм, пластик, синий
Настройки: тип парсинга = columns_range, start_column = 4, end_column = 9, use_first_row_as_names = true
Результат: {"Вес": "1.8 кг", "Длина": "280 мм", "Ширина": "200 мм", "Высота": "150 мм", "Материал": "пластик", "Цвет": "синий"}
Пример для CSV/Excel (выбранные столбцы)
Файл: Артикул, Название, Цена, Склад, Вес, Размеры, Материал, Страна
Строка: 12345, Дрель Bosch, 4500, 15, 1.8 кг, 280x200x150, пластик, Китай
Настройки: тип парсинга = выбранные столбцы, выбранные столбцы = [5, 6, 7, 8], custom_names = {"5": "Вес", "6": "Размеры", "7": "Материал", "8": "Страна"}
Результат: {"Вес": "1.8 кг", "Размеры": "280x200x150", "Материал": "пластик", "Страна": "Китай"}
Пример для CSV/Excel (одна ячейка с разделителями)
Файл: Артикул, Название, Цена, Характеристики
Строка: 12345, Дрель Bosch, 4500, "Мощность: 650 Вт; Обороты: 2800 об/мин; Вес: 1.8 кг; Кейс: есть"
Настройки: тип парсинга = одна ячейка, выбранная ячейка = 4, разделитель = ";", ключ_значение_разделитель = ":"
Результат: {"Мощность": "650 Вт", "Обороты": "2800 об/мин", "Вес": "1.8 кг", "Кейс": "есть"}
Пример для CSV/Excel (regex парсинг)
Файл: Артикул, Название, Цена, Характеристики
Строка: 12345, Дрель Bosch, 4500, "Производитель: E[Salini]; Мощность: P[650]; Вес: W[1.8]; Цвет: C[Blue]"
Настройки: тип парсинга = одна ячейка, выбранная ячейка = 4, use_regex = true, regex_pattern = r'(\w+):\s\w([^]+)]\s;'
Результат: {"Производитель": "Salini", "Мощность": "650", "Вес": "1.8", "Цвет": "Blue"}
Пример для YML (извлечение из param)
Файл: <offer id="12345"><name>Дрель Bosch</name><price>4500</price><param name="Мощность">650 Вт</param><param name="Вес" unit="кг">1.8</param><param name="Обороты">2800</param></offer>
Настройки: характеристик из YML не требуют отдельной настройки парсинга, они извлекаются автоматически из тегов param. Результат: {"Мощность": "650 Вт", "Вес": "1.8 кг", "Обороты": "2800"}
Пример для XML (извлечение из дочерних тегов)
Файл: <Товар><Артикул>12345</Артикул><Наименование>Дрель Bosch</Наименование><Цена>4500</Цена><Характеристики><Мощность>650 Вт</Мощность><Вес ЕдИзм="кг">1.8</Вес><Размеры><Длина>280</Длина><Ширина>200</Ширина></Размеры></Характеристики></Товар>
Настройки: для XML характеристики извлекаются автоматически из всех тегов, не входящих в основной маппинг. Результат: {"Мощность": "650 Вт", "Вес": "1.8", "Длина": "280", "Ширина": "200"}
Пример для JSON (извлечение из вложенных объектов)
Файл: {"id": "12345", "name": "Дрель Bosch", "price": 4500, "specifications": {"power": 650, "weight": 1.8, "dimensions": {"length": 280, "width": 200}}, "params": [{"name": "Материал", "value": "пластик"}]}
Настройки: для JSON характеристики извлекаются автоматически из всех полей кроме основных. Результат: {"power": "650", "weight": "1.8", "length": "280", "width": "200", "Материал": "пластик"}
Сложные примеры регулярных выражений
Пример 1. Извлечение чисел из текста
Паттерн: r'(\d+[.,]?\d*)'
Текст: "Вес: 1.8 кг, Мощность: 650 Вт"
Извлекает: ["1.8", "650"]
Пример 2. Извлечение пар ключ-значение в формате "ключ: значение"
Паттерн: r'(\w+[а-яА-Я\s]+?):\s*([^;]+)'
Текст: "Мощность: 650 Вт; Вес: 1.8 кг; Цвет: синий"
Извлекает: [("Мощность", "650 Вт"), ("Вес", "1.8 кг"), ("Цвет", "синий")]
Пример 3. Извлечение из квадратных скобок
Паттерн: r'([^]+)]'
Текст: "Размеры [280x200x150] мм, Вес [1.8] кг"
Извлекает: ["280x200x150", "1.8"]
Пример 4. Извлечение значений с единицами измерения
Паттерн: r'(\d+[.,]?\d)\s(кг|г|м|см|мм|Вт|А)'
Текст: "Вес 1.8 кг, Мощность 650 Вт, Ток 10 А"
Извлекает: [("1.8", "кг"), ("650", "Вт"), ("10", "А")]
Пример 5. Сложный формат с префиксами
Паттерн: r'([A-Z]+):\s*([^;]]+)'
Текст: "PWR:650W; WGT:1.8kg; COL:BLUE; DIM:280x200mm"
Извлекает: [("PWR", "650W"), ("WGT", "1.8kg"), ("COL", "BLUE"), ("DIM", "280x200mm")]
Примеры комбинирования с другими настройками
Совместно с правилами замены текста
Правило замены текста: в столбце с характеристиками заменить "кг" на "kg" перед парсингом. Настройка: TextReplacementRule с выбранная ячейка = 5, pattern = "кг", replacement = "kg". Затем характеристик парсинг обработает уже нормализованные значения.
Совместно с правилами извлечения
Правило извлечения: из столбца с характеристиками извлечь вес в поле weight_kg. Настройка: ColumnExtractionRule с выбранная ячейка = 5, pattern = r'(\d+[.,]?\d)\sкг', extraction_type = regex_extract, target_field = weight_kg. При этом характеристики все равно сохранятся в raw_characteristics.
В целом все эти настройки касаются csv, xls\xlsx файлов, из остальных форматов характеристики извлекаются автоматически, нужно только установить настройку извлекать характеристики и выбрать любой вариант, например, из одной ячейки.