|
Приведение таблицы строк к единому виду, помогите плиз
|
|||
---|---|---|---|
#18+
Hell'0 W0RLD! :) Есть таблица с кучей строк - наименования препаратов от разных поставщиков , Сводный прайс поставщиков(СПП). 35000 строк И есть таблицы - номенклатурный справочник предприятия(НСП). 5 000 строк Необходимо для каждой позиции из НСП найти все аналоги из СПП, если они есть. Проблема заключается в том, что каждый поставщик использует свой стиль написания наименований. Вот пример из СПП, где один препара имеет несколько написаний: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Т.о. приходится решать задачу унификации написания наименований. Если сокращения я еще могу исправить - напишу запрос для каждого поставщика, где буду исправлять "таб", "табл", "тб." на "таблетка"(или ампула, флакон, крем, гель и т.п.), то с цифрами ГОРАЗДО сложнее - как видно из примера, даже Номер все пишут по-разному (Х50, N50, №50), не говоря уже о разделителе дробной части (, или . ) и дозировке ( 50 МГ, 0,05 Г) И еще есть проблема порядкового следования - у одного идет 0,05 и потом ТАБ, а у другого наоборот. --- Сначала мне казалось, что replace, patindex, charindex меня спасут... Но когда я накорябал 200 строк одних реплейсов и кол-во уникальных записей упало с 35 до 32 тыс, я понял - неправильным путем иду. Может кто-то решал подобную задачу, мож у кого есть свежие идеи или ссылки на свежие идеи... Хелп... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2004, 15:07 |
|
Приведение таблицы строк к единому виду, помогите плиз
|
|||
---|---|---|---|
#18+
Только вручную. Или потребуйте от поставщиков критерий - пусть шлют артикул какой-нибуть. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2004, 15:57 |
|
Приведение таблицы строк к единому виду, помогите плиз
|
|||
---|---|---|---|
#18+
первое уточнение - поставщики плевать хотели на мои требования - "мы не станем менять справочники из-за такой мелочи". второе уточнение- сейчас я решаю задачу именно ручным методом. Но если мне удасться автоматически уменьшить кол-во неидентичных записей до меньшего, чем в НСП, то это уже успех, т.к. можно уже выставлять соответсвия в обратную сторону, а это много быстрее... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2004, 16:32 |
|
Приведение таблицы строк к единому виду, помогите плиз
|
|||
---|---|---|---|
#18+
У каждого поставщика свой справочник? Так составьте таблицу соответствия. А вообще на лекарства (я правильно понял, это лекартсва) существует вполне едиообраный способ написания - так как они внесены в реестр Минздрава. Всё остальное - от лукавого. ___________________ Всё вышеизложенное есть моё частное мнение и не претендует на полноту изложения. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2004, 16:38 |
|
Приведение таблицы строк к единому виду, помогите плиз
|
|||
---|---|---|---|
#18+
Можно попробовать функцию нечеткого сравнения, в инете где-то болтается. на входе две строки на выходе степень схождения если ну очень надо, а искать лень - могу скинуть ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2004, 16:53 |
|
Приведение таблицы строк к единому виду, помогите плиз
|
|||
---|---|---|---|
#18+
Ваша проблема очень хорошо рассмотрена в топике "Убей двойника". Там речь немного о другом, но смысл тот же. Если вкратце -- человеческие ошибки придется исправлять человекам, вы можете лишь ускорить этот процесс с помощью крутых алгоритмов подбора вероятных двойников. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2004, 16:54 |
|
Приведение таблицы строк к единому виду, помогите плиз
|
|||
---|---|---|---|
#18+
Еще можете попробовать функцию DIFFERENCE, она только для латинских букв, но не в этом проблема. Она очень грубая, толку никакого... Если решитесь попробовать, могу Вам кинуть свою функцию замены русских букв на латинские. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2004, 17:02 |
|
Приведение таблицы строк к единому виду, помогите плиз
|
|||
---|---|---|---|
#18+
Отвечу всем по порядку. 1. Chuveljov AndrewУ каждого поставщика свой справочник? Так составьте таблицу соответствия. А вообще на лекарства (я правильно понял, это лекартсва) существует вполне едиообраный способ написания - так как они внесены в реестр Минздрава. Всё остальное - от лукавого. Представляете себе 35 000 раз выставлять соответсвия? Я почти так и делаю, но это же гемор невообразимый! А насчет реестра Минздрава - да, я тоже эту мантру знаю и повторяю ее. Но реальность такова, какой ее чувствует орган, а не какой изображает фотография :)) 2. r2d2Можно попробовать функцию нечеткого сравнения, в инете где-то болтается. на входе две строки на выходе степень схождения если ну очень надо, а искать лень - могу скинуть Это дело я долго изучал - не годится. Дело в том, что для этой функции разница в номере (№10, №20) равнозначна разнице в написании номера (№10, Х10) Что не есть гут. Николай МВВаша проблема очень хорошо рассмотрена в топике "Убей двойника". Там речь немного о другом, но смысл тот же. ... Еще можете попробовать функцию DIFFERENCE, она только для латинских букв, но не в этом проблема. Она очень грубая, толку никакого... Надо посмотреть. Только это не ошибки. А Difference здесь никак. --- Мне ведь что надо? Разобрать строку, выделить из нее лексемы и занести их в другие поля. А потом собрать строку из этих полей. В итоге я просто Напишу Select Имя+ФормаВыпуска+Дозировка+Номер+Остальное From MySuperTable Вот дожить бы до "В итоге"... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2004, 17:26 |
|
Приведение таблицы строк к единому виду, помогите плиз
|
|||
---|---|---|---|
#18+
Grigoriyпервое уточнение - поставщики плевать хотели на мои требования - "мы не станем менять справочники из-за такой мелочи". Им не нужно менять справочники, у них уже есть свои идентификаторы товаров, и нужно всего-лишь попросить их прислать. Обычно это так. Разве-что поставщики ваши - челноки, везущие аспирин по таблетке. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2004, 17:37 |
|
Приведение таблицы строк к единому виду, помогите плиз
|
|||
---|---|---|---|
#18+
Ай мин, что ДАЖЕ если они будут присылать свой артикульный номер - какая мне разница? Ну придется сопоставлять артикульные номера, которые у каждого свои. Жэто еще хуже. ЕДИНЫЙ НОМЕР не используется. Такова правда жизни. Таковы программы отсылки прайсов на той стороне. wBr Grigoriy Gruben ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2004, 17:40 |
|
Приведение таблицы строк к единому виду, помогите плиз
|
|||
---|---|---|---|
#18+
GrigoriyАй мин, что ДАЖЕ если они будут присылать свой артикульный номер - какая мне разница? Ну придется сопоставлять артикульные номера, которые у каждого свои. Жэто еще хуже. ЕДИНЫЙ НОМЕР не используется. Такова правда жизни. Таковы программы отсылки прайсов на той стороне. wBr Grigoriy Gruben Разумеется, ЕДИНЫЙ НОМЕР не используется. Нужно сделать таблицу соответствий НСП артикульным номерам по поставщикам. Для каждого товара - список записей артикул+код_поставщика. Далее при импорте (обновлении прайсов) они будут обновляться по этим номерам. Новые товары, для которых сопоставления нет, будете заносить вручную. Первичная привязка - тоже вручную. Других вариантов всё-равно нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2004, 18:14 |
|
Приведение таблицы строк к единому виду, помогите плиз
|
|||
---|---|---|---|
#18+
"Первичная привязка - вручную." В этом то и проблема... Т.е. механизмов, позволяющих? к примеру, вырезать из строки цифры между % и стоящей ранее ^ нет? Только средствами дельфей смогу? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2004, 09:21 |
|
Приведение таблицы строк к единому виду, помогите плиз
|
|||
---|---|---|---|
#18+
Вот уже обсуждали подобное: http://www.sql.ru/forum/actualthread.aspx?tid=89526&hl=%e0%f1%ef%e8%f0%e8%ed ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2004, 09:58 |
|
Приведение таблицы строк к единому виду, помогите плиз
|
|||
---|---|---|---|
#18+
Grigoriy"Первичная привязка - вручную." В этом то и проблема... Т.е. механизмов, позволяющих? к примеру, вырезать из строки цифры между % и стоящей ранее ^ нет? Только средствами дельфей смогу? Почему, кое-какие есть, хотя на дельфях проще. А ещё проще с регулярными выражениями, если вы с ними работали. Можно сделать предварительную обработку, 80-90 % обработается правильно. Но всё-равно нужно будет вручную всё проверить. В MSSQL для работы со строками см. PATINDEX и SUBSTRING. Кстати, для этой обработки можно создать правила лдя каждого поставщика отдельно, если их немного и если каждый поставщик использует строго определённое написание, скажем, если у одного всегда 50МГ, а у другого всегда 0.05Г. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2004, 11:19 |
|
Приведение таблицы строк к единому виду, помогите плиз
|
|||
---|---|---|---|
#18+
насчет patindex и т.д. - см первый постинг темы :) Насчет раздельного форматирования- именно так я и поступлю 10 постащиков - не проблема ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2004, 12:23 |
|
Приведение таблицы строк к единому виду, помогите плиз
|
|||
---|---|---|---|
#18+
по поводу регулярных выражений... есть в серваке механизмы, позволяющие мне вместо реплейса Х1 Х2 Х3 использовать более короткую форму типа replace(ИМЯ, 'Х[0-9]','№[0-9]') ? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2004, 13:44 |
|
Приведение таблицы строк к единому виду, помогите плиз
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
для спящего время бодрствования равносильно сну ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2004, 14:11 |
|
Приведение таблицы строк к единому виду, помогите плиз
|
|||
---|---|---|---|
#18+
patindex не работает в этой функции ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2004, 15:19 |
|
Приведение таблицы строк к единому виду, помогите плиз
|
|||
---|---|---|---|
#18+
у меня "Х" англицкая для спящего время бодрствования равносильно сну ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2004, 15:23 |
|
Приведение таблицы строк к единому виду, помогите плиз
|
|||
---|---|---|---|
#18+
...Что неудивительно при Ха напечатанном буквой Икс :) wBr Grigoriy Gruben ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2004, 15:23 |
|
Приведение таблицы строк к единому виду, помогите плиз
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
Вот что я сделал из вашей функции - с учетом номера в конце строки и другими неожиданностями :) Нормально? Неудобно то, что в Where я тоже юзаю эту функцию - это неверно наверное? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2004, 15:49 |
|
Приведение таблицы строк к единому виду, помогите плиз
|
|||
---|---|---|---|
#18+
И еще вопрос можно ли переделать функцию так, чтобы вторым парметром шел не просто символ (Х или N), а набор символов, который может означать номер? Например, [Х, N, №] wBr Grigoriy Gruben ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2004, 15:59 |
|
Приведение таблицы строк к единому виду, помогите плиз
|
|||
---|---|---|---|
#18+
patindex не работает в этой функции Не все что угодно можно использовать в качестве параметров для функций и процедур Например, [Х, N, №] Собственно и [ХN№] ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2004, 16:02 |
|
Приведение таблицы строк к единому виду, помогите плиз
|
|||
---|---|---|---|
#18+
с Patindex разобрались, всё ОК А вот с [NХ№] не совсем... set @Symb='[NХ№]' set @p1=patindex('% '+@Symb+'[0-9]%',@s) дает 0 всегда. т.е. [NХ№][0-9] недопустимая конструкция? wBr Grigoriy Gruben ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2004, 16:14 |
|
|
start [/forum/topic.php?fid=46&tid=1796987]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
29ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
106ms |
get tp. blocked users: |
2ms |
others: | 252ms |
total: | 435ms |
0 / 0 |