помогите реализовать

  • Автор темы Автор темы Riv3ro
  • Дата начала Дата начала

Riv3ro

Новичок
Добрый день

Есть данные tov.jpg , так как они вводились операторами как попало, то получилась проблема с полем Товар он описан как только можно, и структурировать его как либо очень тяжело, а с этой колонки товар надо вытаскивать всяческие параметры название, старана-изготовитель, цвет, и т.д.

помогите структурировать данные.

Не могу сообразить как лучше это реализовать, опыт в php не очень большой. Так что за реализацию камнями прошу не закидывать.
PHP:
///////////// справочники //////////////////


$man = array ("Мужская","Мужск","мужская","м","М");

$woman = array ("Ж","ж","женские","Женские","жен","Жен","жен.","Женский","женский");

$teenager = array ("подр.","ПОДРОСТОК","Подросток","Подростковая");

$color = array ("Черный","черный","черн/сер","черн","чер/бел","чер","цветн.","Синий","Серый","пестрый","оранж","беж","Корич","Джинс","джинс","голубой","Бел.","крас/рыжие","Бордо","сер/бронз","фуксия","Фиолетовый","розовый","Малиновый","крас.","Коричневый","жолтый","голуой","рыжие","Белый","Бел/син","Бежевый","ч","кр","крас","сирень","сер/бел","чер/бел","розов","серебро","беж/чер","ч/сер","зеленый","б","роз","перс"); 

$material = array ("кожа","велюр","Кожа","Замш","Текст","Лак","джинс","Текс.","Текстить","Текстиль","кожа/замш","лак-замш","нубук","и/кожа","кожа/замш");




////////////////////////////////////////////

$items  = "Обувь Мужская Корич нубук 886п Бровары ТМ'ESTE' 41(р) ";


$a = explode(" ", $items);



if ($a[0] == "Обувь")// Сравниваем Тип с Обувью, если это не обувь то в Else просто заносив в другую таблицу.
{
	
	if(isset ($a[1])) // Проверяем если существует, "второе" слово то сравниваем с справочником pol
	{
 
		if ($res = preg_match ("/(Мужская)|(Мужск)|(мужская)|(м)|(М)/", $a[1]))// Проверка на совпадение со справочником $man
			{
				echo "Совпадает ";
				$pol = "Мужская";
				echo $pol;
			}
		
		elseif($res = preg_match ("/(Ж)|(ж)|(женские)|(жен)|(Жен)|(жен.)|(Женский)|(женский)/", $a[1]))// Проверка на совпадение со справочником $woman
			{
				echo "Совпадает ";
				$pol = "Женская";
				echo $pol;
			}
		elseif($res = preg_match ("/(подр.)|(ПОДРОСТОК)|(Подросток)|(Подростковая)/", $a[1]))// Проверка на совпадение со справочником $teenager
			{
				echo "Совпадает ";
				$pol = "Подростковая";
				echo $pol;
			}
//// и тд, так же дальше сравнение по цвету, материалу, городу, поставщику и тд. Опять же есть еще размер к нему справочник не придумал еще
		else 
			{
				echo "По фильтрам совпадения не найдено, значит это артикул <br />";// Артикул по фильтрам не сравнивал так как там все что угодна, и нету смысла.
				$art = $a[1];
				echo $art;
			}


и это только для первого элемента массива, их может быть вроде максимум 10. Для каждого так писать не целесообразно. помогите придумать функцию или цикл.

Как мне кажется надо будет прогонять после этой сортировки, еще по одному виду справочника, из-за того что есть вот такие описания "муж.туф","т.муж","подр.мальч" - которые вместе с точкой. Их разбивать опять експлойтом только по "." и пропускать еще раз через справочники $man $woman и тд.
 
может быть дешевле ввести эти данные нормально вручную
 
Это торговая сеть. Основной магазин принимает и кодирует товар, потом товар расходится по точкам. База очень жирная, за каждым магазином числится более 5 тыс. наименований, магазинов 4. Чтобы перекодировать весь товар в программе понадобится не один битый час, но это пол проблемы, потом придется переклеивать все наклейки с описанием товара и это практически невозможно.
 
Если не найду "нормальное" решение данной проблемы, то буду писать уже через elseif. =\ Но думаю что есть более умное решение. Помогите написать функцию для этого дела.
 
И еще раз спрошу почему вы думаете что если вы впервый раз смотрите в сторону пхп вас это оправдывает???
 
я бы за такую задачу взялся только за очень большие деньги
(и то только для того чтобы взять предоплату и свалить)
 
И еще раз спрошу почему вы думаете что если вы впервый раз смотрите в сторону пхп вас это оправдывает???
Не понял?
я бы за такую задачу взялся только за очень большие деньги
(и то только для того чтобы взять предоплату и свалить)
Я работаю на этой фирме, и в моих интересах выполнить данную задачу.
 
а мы тут при чём?
вам сюда
Я не прошу что бы за меня писали скрипт, если лично Вам не интересно, можете вообще не отписывать.
Может кому то будет интересна сама задача, и поломать голову как ее решить. Ведь не у всех на первом месте деньги, некоторые любят еще головоломки.
 
Riv3ro, у вас получается не программа и то же самое дерево данных, которое опять придёться править после добавления очередной партии товаров. Смысл? Вобщем данные должны быть в хранилищи, а в программе обрабатывающий их код.

Если вы всё это затеяли для организации поиска по фонарно набираемым фразам, то проще изобрести свой русско английский метофон http://www.morfoedro.it/doc.php?n=222&lang=ru#Metaphone На его основе генерите из исходных данных дополнительное поле в БД и ищете по нему.

Если всё это затеяно для каталогизации, то создаёте структуру каталога ручками и ручками разбрасываете товары с привязкой к узлам каталога. Но опять же, человеческий фактор. Куда отнести шнурки? В обувь или галантерею?
 
Riv3ro, пионеры у нас злые, но обижаться не стоит
это не головоломка, это обычный синтаксический анализ, делается долго, сложно, и ненадежно, как в яндексе
выделяешь лексемы, приводишь к стандартному виду, сопоставляешь со словарем
естественно, нужно еще составление словаря
работа на месяцы или годы
вероятно, дешевле будет нанять пару обезьянок, которые будут сидеть и разбирать текст целыми днями
 
Riv3ro, у вас получается не программа и то же самое дерево данных, которое опять придёться править после добавления очередной партии товаров. Смысл? Вобщем данные должны быть в хранилищи, а в программе обрабатывающий их код.

Если вы всё это затеяли для организации поиска по фонарно набираемым фразам, то проще изобрести свой русско английский метофон http://www.morfoedro.it/doc.php?n=222&lang=ru#Metaphone На его основе генерите из исходных данных дополнительное поле в БД и ищете по нему.

Если всё это затеяно для каталогизации, то создаёте структуру каталога ручками и ручками разбрасываете товары с привязкой к узлам каталога. Но опять же, человеческий фактор. Куда отнести шнурки? В обувь или галантерею?

Вся суть, на входе есть данные в .csv парсером их загоняем , прогоняем и обрабатываем данные перед записью в БД, и после манипулируем уже так как нам надо для анализа.

По Сути надо только разбивать Обувь, а все остальное по умолчанию не интересует в реализации.

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

getType($field) // принимает строку описания товара, возвращает тип - обувь, одежда галантерея, etc. или false в случае неудачи
getColor($field) // возвращает цвет - black, red, green etc. или false в случае неудачи
getGender($field), // возвращает пол - man, woman, unisex или false если не может определить
getMaterial($field) // ...
и т.д.
все вряд-ли удастся разобрать, но какой-то процент будет
 
тоже была мысль про синтаксический анализ но в контексте разбора данных записей
которые вводились людьми похоже вполне резонно ненавидящими свою работу искать там какой-то синтаксис показалось неуместным :D
 
тоже была мысль про синтаксический анализ но в контексте разбора данных записей
которые вводились людьми похоже вполне резонно ненавидящими свою работу искать там какой-то синтаксис показалось неуместным :D
Верно подметили, что ненавидящие свою работу. :)
Теперь я ненавижу их и начальство, которому надо такой вид анализа.

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