![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу. Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста". Название темы слишком короткое или не отражает сути вашего вопроса. Тема исчерпала себя, помните, один вопрос - одна тема Прочитайте правила и заново правильно создайте тему. |
|
Опции темы
![]() |
Поиск в этой теме
![]() |
![]() |
#1 |
Пользователь
Регистрация: 22.08.2008
Сообщений: 65
|
![]()
Наверняка Вам (тем, кто много работает с данными в Эксель, а особенно в торговле) приходилось сталкиваться с проблемой, когда один и тот же товар называют несколькими разными способами. Каждый по разному выходить из ситуации. Кто присваивает коды, кто составляет т.н. таблицы соответствий. Я вот, в силу определенных причин избрал второй вариант.
То есть у меня существует эталонное название, а также "синонимы" этого названия. Так вот, для того, чтобы определить является ли то или иное слово синонимом для выбранного я придумал нечто, что обозвал "коэффициент похожести". вот формула: =МИН(СУММПРОИЗВ(КОДСИМВ(ПСТР(ПРОПИС Н(C68);СТРОКА(ДВССЫЛ("1:"&ДЛСТР(C68 )));1)))*КОДСИМВ(ПРОПИСН(ЛЕВСИМВ(C6 8)));СУММПРОИЗВ(КОДСИМВ(ПСТР(ПРОПИС Н(D68);СТРОКА(ДВССЫЛ("1:"&ДЛСТР(D68 )));1)))*КОДСИМВ(ПРОПИСН(ЛЕВСИМВ(D6 8))))/МАКС(СУММПРОИЗВ(КОДСИМВ(ПСТР(ПРОПИС Н(C68);СТРОКА(ДВССЫЛ("1:"&ДЛСТР(C68 )));1)))*КОДСИМВ(ПРОПИСН(ЛЕВСИМВ(C6 8)));СУММПРОИЗВ(КОДСИМВ(ПСТР(ПРОПИС Н(D68);СТРОКА(ДВССЫЛ("1:"&ДЛСТР(D68 )));1)))*КОДСИМВ(ПРОПИСН(ЛЕВСИМВ(D6 8)))) понятно, что сравниваемые тексты, в данном случае находятся в C68 и D68. Формула делает следующее: 1. суммирует все коды символов первой ячейки 2. то что получилось умножается на код первого символа то же для второй ячейки Далее находиться отношения минимума к максимуму. Хотелось бы услышать конструктивную критику экспертов по: 1. усовершенствованию формулы 2. упрощению формулы |
![]() |
![]() |
#2 |
Пользователь
Регистрация: 22.08.2008
Сообщений: 65
|
![]()
для простоты все символы делаются прописными, т.е. формула, как говориться "не чувствительна к регистру"
|
![]() |
![]() |
#3 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
извините, Константин, но разобрать такую формулу нет времени и сил.
Поэтому просто выскажу пару мыслей вслух.. :-) 1) ну, насчёт регистра - это беспорно обязательно приводить к единому "знаменателю" 2) очень неплохо при сравнении выбрасывать все пробелы (или, если задача такое не позволяет и, например, "из ада" и "и зада" разные названия, то хотя бы несколько подряд идущих пробелов заменять на один) 3) для английского языка действует функция SOUNDEX (почитать можно - тут - Soundex — Википедия - там же есть ссылки на попытки это сделать для русского языка) но, имхо, это всё это не решение проблемы. Только строжайший контроль + выбор значений из справочников на этапе ввода данных могут помочь избавиться от подобной проблемы... и позвольте небольшое лирическое отступление - как-то занимался автоматизацией - понадобилось реструктуризировать БД потребителей - из адреса, написанного "ручками" выделить название улицы (переулка/бульвара и т.д.), номер дома, строение, индекс, квартиру... Это потребовало около двух (подчёркиваю ДВУХ) недель на обработку 100 тыс. записей. 90% работы было ручное. Например, название улицы "Дзержинского" было написано 14 (четырнадцатью) различными вариантами... Поэтому, как гласит один из законов Мерфи: "Защиту от дурака можно сделать, но только от дурака неизобретательного!" |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 22.08.2008
Сообщений: 65
|
![]()
формула то простая
тем более, что я написал, что она делает Спасибо, Serge_Bliznykov, Ваше мнение, как несомненного профи, для меня очень важно. |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 22.08.2008
Сообщений: 65
|
![]()
Приглашаю высказаться и других экспертов
|
![]() |
![]() |
#6 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
![]()
тема древняя. всплывает тут раз в неделю.
Я понимаю, что делает формула, но не понимаю вложенной в нее логики. написал в ячейки "WL520gc" и "Роутер WL520gc" мой мозг понимает, что это одно и то же, причем это 100% совпадение, без малейших сомнений. а формула выдает коэффициент схожести 0,109662235. Мое мнение - только ВБА, причем довольно неоднозначно. Хорошая мысль вычилять коэффициент от 0 до 1.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
![]() |
![]() |
#7 |
Пользователь
Регистрация: 22.08.2008
Сообщений: 65
|
![]()
IgorGO
Как же это так "100% совпадение" ?? Ведь во втором случае в ячейке на 1 слово и пробел больше... соответственно сумма кодов всех символов у второго варианта больше, соответственно, имеем 0,10966... |
![]() |
![]() |
#8 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
![]()
100% совпадение, это значит, что я на 100% уверен что в разных прайсах речь идет об одном и том же товаре. Вот такие 100%.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
![]() |
![]() |
#9 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
я полностью согласен с IgorGO.
Поймите, что в 99% случаев без человеческого участия просто не обойтись ;-( Ваш подход позволяет лишь помочь человеку найти похожие... А дальше ручками-глазками-мозгом оператора надо пользоваться... Без человека - никуда... ;-( вот, посмотрите: Код:
а "тройной" совпал на 46% :-) а как Вам такой казус?: Код:
Код:
удачи! |
![]() |
![]() |
#10 |
Пользователь
Регистрация: 22.08.2008
Сообщений: 65
|
![]()
я ж об этом же! как раз речь о том, что добавить/удалить/изменить в формуле "коэффициента похожести", чтобы он считался более корректно?
я ж ее и выложил для того, чтобы Вы высказывались на тему как ее улучшить. Бесспорно, что после обработки формулами (в любом случае!) придется немного покопаться руками. |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Вычислить коэффициент сопротивления ξ движущейся в воздушной среде сферической частиц | Noor | Общие вопросы C/C++ | 1 | 27.05.2007 00:34 |