101, "Аккумулятор АКБ 12V 60Ah BOSCH","Надежный аккумулятор для легковых авто"
102, "АКБ Bosch 60 А·ч 12 вольт","Для автомобилей, пусковой ток 540А"
103, "Bosch аккумулятор 60 ампер-час","Подходит для большинства легковых авто"
Ты — эксперт по структурированию товарных каталогов. Твоя задача — проанализировать названия товаров и для каждого из них вернуть JSON со следующими полями:
Важно: названия могут быть написаны в разном стиле — это нормально. Тебе нужно распознать смысл и корректно назначить категорию независимо от формулировки.
Верни только валидный JSON без пояснений.
import csv
import json
import os
from openai import OpenAI
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
def get_categories(names):
prompt = """
Ты — эксперт по структурированию товарных каталогов. Проанализируй названия товаров и верни JSON со следующими полями для каждого товара: brand, category, normalized_name.
Правила:
- brand: выдели бренд, нормализуй к единому написанию.
- category: выбери из списка: «Аккумуляторы», «Фильтры», «Тормозные колодки», «Разное».
- normalized_name: перепиши в стиле «Бренд Категория Характеристики».
Важно: названия могут быть написаны по-разному — это нормально. Распознавай смысл независимо от формулировки и назначай корректную категорию.
Верни только валидный JSON, без пояснений.
"""
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": prompt},
{"role": "user", "content": "\n".join(names)}
],
temperature=0
)
return json.loads(response.choices[0].message.content)
def process_csv(input_file, output_file, batch_size=50):
with open(input_file, newline='', encoding='utf-8') as f:
reader = csv.DictReader(f)
rows = list(reader)
all_results = []
for i in range(0, len(rows), batch_size):
batch = rows[i:i+batch_size]
names = [row['name'] for row in batch]
results = get_categories(names)
for j, res in enumerate(results):
row = batch[j]
row.update(res)
all_results.append(row)
with open(output_file, 'w', newline='', encoding='utf-8') as f:
fieldnames = ['id', 'name', 'description', 'brand', 'category', 'normalized_name']
writer = csv.DictWriter(f, fieldnames=fieldnames)
writer.writeheader()
writer.writerows(all_results)
if __name__ == "__main__":
process_csv('input.csv', 'output_categorized.csv')