Программа iNETsHOP - обработка, сравнение, анализ прайс листов поставщиков, создание каталога товаров интернет магазина Форум - Программа iNETsHOP - Работа с программой - Схема импорта


http://inetshop.in.ua/index.php?p=showtopic&toid=265&fid=2&area=1&print_post=1722
25.04.2016 00:02

support


Support


Количество сообщений   1199
Зарегистрирован:   11-04-2008, 19:11:57
Автоматическое определение бренда по названию товара
В самом простом случае можно автоматически выделить бренд из названия товара путем поиска вхождения названий брендов из справочника брендов.

Например данный скрипт T-SQL используется в схемах импорта прайс-листов после чтения прайса и проверяет каждое название бренда на предмет вхождения в название товара в начале (после бренда должен быть пробел) или в середине (до и после бренда должны быть пробелы), и если такая подстрока присутствует в названии товара, то данных бренд будет записан в колонку бренда прайса.

Код

DECLARE
@ID int,
@NAME varchar(8000),
@BRAND varchar(8000),
@SID varchar(8000),
@DESCRIPTION varchar(8000),
@NOTES varchar(8000),
@PRICE varchar(8000),
@WARRANTY varchar(8000),
@URL varchar(8000),
@CATEGORY varchar(8000),
@CURRENCY varchar(8000),
@BRAND_DICT varchar(8000);


DECLARE cPrice CURSOR LOCAL FOR
Select
ID,
IsNull(LTRIM(RTRIM(CAST(NAME as varchar(8000)))), ''),
IsNull(LTRIM(RTRIM(CAST(BRAND as varchar(8000)))), ''),
IsNull(LTRIM(RTRIM(CAST(SID as varchar(8000)))), ''),
IsNull(LTRIM(RTRIM(CAST(DESCRIPTION as varchar(8000)))), ''),
IsNull(LTRIM(RTRIM(CAST(NOTES as varchar(8000)))), ''),
IsNull(LTRIM(RTRIM(CAST(PRICE as varchar(8000)))), ''),
IsNull(LTRIM(RTRIM(CAST(WARRANTY as varchar(8000)))), ''),
IsNull(LTRIM(RTRIM(CAST(URL as varchar(8000)))), ''),
IsNull(LTRIM(RTRIM(CAST(CATEGORY as varchar(8000)))), ''),
IsNull(LTRIM(RTRIM(CAST(CURRENCY as varchar(8000)))), '')
from #TMP_PRICE order by ID;

OPEN cPrice
FETCH NEXT FROM cPrice INTO @ID, @NAME, @BRAND, @SID, @DESCRIPTION, @NOTES, @PRICE, @WARRANTY, @URL, @CATEGORY, @CURRENCY;
WHILE (@@FETCH_STATUS <> -1)
BEGIN
IF (@BRAND = '')
BEGIN
DECLARE cBrands CURSOR LOCAL FOR
SELECT B_NAME
FROM TBL_BRANDS
ORDER BY LEN(B_NAME) DESC;
OPEN cBrands;
FETCH NEXT FROM cBrands INTO @BRAND_DICT;
WHILE (@@FETCH_STATUS <> -1)
BEGIN
IF CHARINDEX(@BRAND_DICT + ' ', @NAME) = 1 SET @BRAND = @BRAND_DICT;
IF CHARINDEX(' ' + @BRAND_DICT + ' ', @NAME) > 1 SET @BRAND = @BRAND_DICT;
IF (@BRAND <> '')
BEGIN
UPDATE #TMP_PRICE SET BRAND = @BRAND WHERE ID = @ID;
BREAK;
END;
FETCH NEXT FROM cBrands INTO @BRAND_DICT;
END;
CLOSE cBrands;
DEALLOCATE cBrands;
END;

FETCH NEXT FROM cPrice INTO @ID, @NAME, @BRAND, @SID, @DESCRIPTION, @NOTES, @PRICE, @WARRANTY, @URL, @CATEGORY, @CURRENCY;
END;
CLOSE cPrice;
DEALLOCATE cPrice;


Так же можно добавить поиск соответствий в дубликатах брендов, то есть когда к бренду привязаны несколько названий которые могут присутствовать в прайсах, но они отличаются от оригинального, например LG и LG Electronics, HP и Hewlett-Packard