Shurik
Новичок
Доброго времени суток!
Есть задача:
существует каталог товаров, необходимо обрабатывать выгрузки (xml каталог товаров) и автоматически распределять их по категориям которые наиболее подходят по параметрам (название, бренд, модель и прочее.) по типу яндекс маркет, price.ru и т.п.
первое что сделал - разбил названия имеющихся товаров на слова и вставил их в таблицу products_tags. далее беру название нового товара, забиваю на слова и проверяю совпадения в таблице products_tags
$str = 'Пуловер Бежевый';
$str = explode(' ', $str);
$tags = array();
foreach($str as $w)
{
if(mb_strlen($w)>1)
{
$tags[] = mb_strtolower($w, mb_detect_encoding($w));
}
}
$tags_filter = array();
foreach($tags as $feature=>$value)
$tags_filter[] = 'pt.tag LIKE "'.$value.'"';
$tags_filter = implode(' OR ', $tags_filter);
$query = $this->db->placehold("SELECT c.name, p.category_id, pt.tag, count(p.category_id) as count FROM products_tags pt
LEFT JOIN products p ON p.id =pt.product_id
LEFT JOIN categories c ON c.id =p.category_id
WHERE $tags_filter
GROUP BY pt.tag, p.category_id
ORDER BY count DESC");
$this->db->query($query);
$tags_categories = $this->db->results();
mysql
SELECT c.name, p.category_id, pt.tag, count(p.category_id) as count
FROM c_products_tags pt
LEFT JOIN c_products p ON p.id =pt.product_id
LEFT JOIN categories c ON c.id =p.category_id
WHERE pt.tag LIKE "пуловер" OR pt.tag LIKE "бежевый"
GROUP BY pt.tag, p.category_id
ORDER BY count DESC
во многих случаях получается определить категорию по первому очевидному признаку - количество. но это не верный подсчет. к примеру есть результат:
Array
(
[0] => stdClass Object
(
[name] => Ламинат
[category_id] => 3035
[tag] => бежевый
[count] => 4
)
[1] => stdClass Object
(
[name] => Пуловеры
[category_id] => 3059
[tag] => бежевый
[count] => 1
)
[2] => stdClass Object
(
[name] => Пуловеры
[category_id] => 3059
[tag] => пуловер
[count] => 1
)
)
куда двигаться дальше и верный ли подход с тегами? подскажите! возможно есть алгоритмы?
Есть задача:
существует каталог товаров, необходимо обрабатывать выгрузки (xml каталог товаров) и автоматически распределять их по категориям которые наиболее подходят по параметрам (название, бренд, модель и прочее.) по типу яндекс маркет, price.ru и т.п.
первое что сделал - разбил названия имеющихся товаров на слова и вставил их в таблицу products_tags. далее беру название нового товара, забиваю на слова и проверяю совпадения в таблице products_tags
$str = 'Пуловер Бежевый';
$str = explode(' ', $str);
$tags = array();
foreach($str as $w)
{
if(mb_strlen($w)>1)
{
$tags[] = mb_strtolower($w, mb_detect_encoding($w));
}
}
$tags_filter = array();
foreach($tags as $feature=>$value)
$tags_filter[] = 'pt.tag LIKE "'.$value.'"';
$tags_filter = implode(' OR ', $tags_filter);
$query = $this->db->placehold("SELECT c.name, p.category_id, pt.tag, count(p.category_id) as count FROM products_tags pt
LEFT JOIN products p ON p.id =pt.product_id
LEFT JOIN categories c ON c.id =p.category_id
WHERE $tags_filter
GROUP BY pt.tag, p.category_id
ORDER BY count DESC");
$this->db->query($query);
$tags_categories = $this->db->results();
mysql
SELECT c.name, p.category_id, pt.tag, count(p.category_id) as count
FROM c_products_tags pt
LEFT JOIN c_products p ON p.id =pt.product_id
LEFT JOIN categories c ON c.id =p.category_id
WHERE pt.tag LIKE "пуловер" OR pt.tag LIKE "бежевый"
GROUP BY pt.tag, p.category_id
ORDER BY count DESC
во многих случаях получается определить категорию по первому очевидному признаку - количество. но это не верный подсчет. к примеру есть результат:
Array
(
[0] => stdClass Object
(
[name] => Ламинат
[category_id] => 3035
[tag] => бежевый
[count] => 4
)
[1] => stdClass Object
(
[name] => Пуловеры
[category_id] => 3059
[tag] => бежевый
[count] => 1
)
[2] => stdClass Object
(
[name] => Пуловеры
[category_id] => 3059
[tag] => пуловер
[count] => 1
)
)
куда двигаться дальше и верный ли подход с тегами? подскажите! возможно есть алгоритмы?
Последнее редактирование: