Сопоставление наименований (привести название к определенному виду )

1. VladimirB 16 02.11.08 18:52 Сейчас в теме
Постараюсь объяснить суть задачи
есть несколько прайсов от поставщиков
у каждого допустим есть один и тот же товар, но написан по-разному

АНАЛЬГИН 0.5 МГ №10 (ХФ)
АНАЛЬГИН 0.5 ТАБЛ. №10
АНАЛЬГИН 0.5 №10 ТАБЛ.
АНАЛЬГИН 0,5 № 10 ТАБЛ.
АНАЛЬГИН 0,5 N 10 ТАБ
АНАЛЬГИН № 10 ТАБЛ. 0,5 МГ

и т.д.
есть и похожие позиции, но это может быть другой товар
например
АНАЛЬГИН 50% 1.0 №10

в справочнике номенклатура есть позиция
АНАЛЬГИН 0.5 МГ №10

если бы во всех прайсах был бы артикул, то было бы все гораздо проще

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

например

Шаблон -> меняем на

№[Space(1)] -> № // по этому шаблону после знака № убирается пробел
[Space(1)]N[Space(1)] -> [Space(1)]№ // по этому одиночно стоящая буква N Преобразуется в № и убирается пробел справа


( -> [Space(1)](
) -> )[Space(1)]
([Space(1)] -> (
[Space(1)]) -> )

И Т.Д.

здесь [Space(1)] это пробел

перестановка слов:
АНАЛЬГИН 0.5 ТАБЛ. №10
АНАЛЬГИН 0.5 №10 ТАБЛ.
тоже решается сравнением слов

Проблемка пока в том, чтобы создавать такие шаблоны
[Цифра][Space(1)]МГ[Space(1)] [Цифра]МГ[Space(1)]

после него товары
АНАЛЬГИН 0.5 МГ №10
АНАЛЬГИН 0.7 МГ №10
должны принять вид
АНАЛЬГИН 0.5МГ №10
АНАЛЬГИН 0.7МГ №10

или для
АНАЛЬГИН 0,5 МГ №10
АНАЛЬГИН 3,7 МГ №10
после применения
[Цифра],[Цифра] -> [Цифра].[Цифра]
получится
АНАЛЬГИН 0.5 МГ №10
АНАЛЬГИН 3.7 МГ №10

пока такие шаблоны делаю в цикле так для шаблона
[Цифра][Space(1)]МГ[Space(1)]
создается 10 шаблонов
0[Space(1)]МГ[Space(1)]
1[Space(1)]МГ[Space(1)]
...
9[Space(1)]МГ[Space(1)]

это совершенно не рационально . список шаблонов растет очень быстро. соответственно, чтобы привести название к более

правильному уходит больше времени

а если еще использовать что-то типа
[Буква][Цифра] в [Буква][Space(1)][Цифра]
букв латинских+русских = 26+33=59
а еще 10 цифр
получается уже 59*10=590 вариантов шаблонов (это для того чтобы отделить букву от цифры пробелом !)
а если еще и обратно, т.е.
[Цифра][Буква] в [Цифра][Space(1)][Буква]
еще 590 вариантов

еще раз повторюсь, что ищу какое-то универсальное решение для этого (чтобы можно было написать только шаблон, а не писать на каждый случай проверку
шаблоны типа [Буква][Цифра] пока у меня исследуются подпрограммами
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. CheBurator 3122 03.11.08 01:32 Сейчас в теме
при этом надо учесть, что пишут по всякому:
10 мг
10мг
10 мг.
10 мгр
0.01 гр.
ну и т.д.

Данная задача у мну решена (тоже работал по лекарствам) Следующим образом. Аналоги поставщиков закачиваем в справочник "аналоги", для закачки используем нечеткое сравнение строк, сравниваются строки "Товар+Производитель", с использованием нечеткого сравнения 1-2 оператора прайс в 10 тыс наименований "раскидыыают" в неторопливом режиме дня за 4-ре..., после этого становится возможным автообнаружение новых позиций в прасе поставщика, + процедура автосопоставления с методикой и обработками последующего "сквозного" контроля, при автосопоставлении используются как уже ранее сделанные привязки (если у тебя 3-4 основных поставщика уже в базе - то все отсальные - производные), так и нечеткое сравнение.. при достаточной "базе" новый прайс тысячи в 4-5 наименований минут за 20 процентов на 80 "автопривязывается" сам... потом только быстро проверяется... на этом у меня работал целый "комплекс" "Прайс-аналит"... полуавтоподгрузка ежедневная (а можно и несколько раз в день) прайсов поставщиков, определение предпочтительных цен, формирование собственной "продажной" цены, ее верификация по рыночным показателям торговых площадок...
мелкие наметки смотреть здесь:
http://www.infostart.ru/profile/174/projects/393/
http://www.infostart.ru/profile/174/projects/1595/ (недоделано)
http://www.infostart.ru/profile/174/projects/2146/
смотреть здесь
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот