Загрузка прайс-листов

Daos

Новичок
Загрузка прайс-листов

Друзья, такая проблема. Есть каталог товаров (более 10.000).
При выборе товара выводится список его продавцов с ценой.

От n кол-ва продавцов приходят прайс-листы (в основном в Excel) совершенно разного оформления, да плюс к тому одно и то же название товара в разных прайсах может быть написано по разному. Задача максимально автоматизировать процес загрузки любого прайса в базу (то есть привязки товара из прайса, товару каталога).

Как мне видится на данный момент эта задача:

1. Получаем все товары из базы.
2. Начинаем построчно проходится по файлу прайса (я опускаю здесь преобразование прайса к csv)
3. Сравниваем имя товара в прайсе с именем из базы, при чём вхождение одного в другое и наоборот, так как в прайсе может быть неполное название товара, так и наоборот.
4. Если совпадение чёткое, товар тот, заносим цену в базу, если не полное но есть вхождение, выносим оператору для подтверждения. Если совпадения и вхождения не найдено, новый товар, что с ним делать щас не важно. Положим что 99% товаров уже есть в каталоге.
5. И так по всему прайсу.

Это мега ресурсоёмко и неоптимизировано, то есть надо на каждую строку прайса натянуть всю базу товаров. Как вариант можно на каждую строку прайса делать запрос в базу по LIKE, но это тоже не менее ресурсоёмко.

Других мыслей организации этой процедуры пока в голову не пришло. Помогите идеей?
 

Demiurg

Guest
заставить продавцов присылать унифицированую информацию.
 

Daos

Новичок
Это было бы круто, как сделал яндекс, но он может себе это позволить, а многие нет!
 

Daos

Новичок
Ну представь что это такое, один прайс содержит положим 2000 позиций, этих прайсов может быть 10ок и более

не будеш же каждуюю позицию в прайсе править, и так каждый раз при обновлении цены

-~{}~ 26.03.05 18:48:

Или что ты имел ввиду под ручной подготовкой?
 

Daos

Новичок
Не я всё понимаю конечно, но вручную исправлять каждую позицию в каждом прайсе это нереально обсолютно. Тогда уж придётся идти по своему пути если других идей нет.
 

betik

Новичок
Как вариант:
Вытащить из МуСКЛ данные в массив:

offer['id']=offers_name;

А потом array_search.. Если полное совпадение найдено - то ок, получил id... Если нет - то mysql_query...Like '%offfers_name_from_csv%' .. Если что-то нашлось - получил список ID для оператора. Если нет - новый товар.

Далее ещё одна табличка создаётся, когда оператор вносит соответствие разных названий одному и тому же (уже существующему) ID - в таблицу заносится название и ID... В дальнейшем искать соответствия и в той таблице - после парсинга всех прайсов, если новых позиций добавляться не будет - получишь полную таблицу соответствий.

-~{}~ 27.03.05 11:27:

PS шмелось ввиду offer[id]='offers_name';
 

Demiurg

Guest
like тет вряд ли подойдет. ближе всего к решению задачи будет , наверно, морфологический поиск.
 

Daos

Новичок
К сожалению тут нельзя применить LIKE так как имя из прайса может быть длиннее имени из базы и нужно смотерть вхождение не только в базу но и из базы в строку прайса. По этому как я написал остаётся пока один вариант. Вытаскивать всю базу в масив и сравнивать всё со всем в самом худшем варианте.

Может будут ещё какие идеи?

-~{}~ 27.03.05 14:35:

У меня как варинт появилась такая идея. У меня ведь есть внешний поисковый индекс. То есть таблица слов и таблица соответствий слово/товар/раздел
1. Бъём каждую строку прайса на слова и смотрим по индексу те товары для которых есть наибольшее кол-во слов из строки прайса.
2. Выводим эти товары оператору для определения точности

Это вариант уже значительно лучше первого.
 

botan

Новичок
Схожие задачи решают целые отделы в немаленьких конторах.
Как варианты:
1. Можешь написать на том же VBA "унифицированый прайс" который будешь рассылать своим клиентам.
При этом когда появляется новый клиент - ты в ручную (ну или тем же VBA) стандартизируешь прайс. Далее ты отправляешь клиенту уже стандартизированый прайс и просишь изменения вносить в него, и затем тебе его отсылать.
2. XML, як у яндекса.
3. Написать на aciveX cредства управления. Т.е. позволить им "вгружать" инфу на сайт. Кажется brutto.ru такое бесплатно показывает в своей brutto-CMS. Осталось написать недостающие интерфейсы -)

А вообще не существует тут решений подходящих для приведения "нестандартного" к каким-либо общим станадртам. Я бы преложил твоим "поставщикам" НЕСКОЛЬКО альтернативных способов - пусть каждый сам выбирает что ему проще.
Люди должны понимать что любая работа стоит денег и приводить каждый раз их бред к общим стандартам - тож, весьма и весьма кропотливая работа...
 

Long

Новичок
как показыает практика заставить привести прайсы к единому виду задача не выполнимая. даже в рамках одной конторы (6 магазинов+оптовый отдел) у меня заняло примерно полгода чтобы устранить все несоответствия. при этом использовался и административный ресурс. так что единственный выход - составить свой список товаров - словарь - и приводить импортируемый прайс к этому словарю. этот процесс можно конечно чуть-чуть автоматизировать (поиск по полному соответствию, поиск по вхождению ключевых слов с выводом списка оператору) но полностью исключить оператора - не получится.
 

botan

Новичок
Это как бы немного разные задачи
1. Приведение прайсов к единому стандарту
2. Исключение оператора.
2-ю, насколько я понял, тут решать никто и не собирается.
2 Long.
Твой метод стандартизации мне не до конца понятен. Разъясни попродробней плиз :)
О том что такая стандартизация возможна и в больших масштабах - на совершенно "разнотипных" товарах можно прочесть на econtent.ru
 

Daos

Новичок
botan

long прав, он описывает то что я и описал выше в своих постах. Практически невозможно заставить фирмы унифицировать прайсы, особенно это касается известных уже устоявщихся фирм. Это, как я уже писал, может себе позволить Yandex. По этому вариант с унификацией прайса для всех, отпадает сразу и однозначно в любом виде. Фирма платит деньги за то, что отдает свой прайс в том виде в котором ей удобно. По этому все усилия правелнее сосредоточить на максимальной оптимизации и автоматизации (на сколько это вообще возможно) разбора того что пришло на вход и сопоставление с с тем что есть в базе.

Пока наиболее оптимальная схема из тех что мне пришли в голову, это использование синонимов/индекса с цельюю нахождения полного соответствия и вхождений. С последующим уточнением оператором.
 
Сверху