|
![]() |
#1 |
Участник
|
Унифицированный справочник цветов
Всем привет!
В нашем справочнике цветов уже около 1200 строк. Для решения определенных задач было принято решение создать унифицированный справочник цветов, в нем будет около 100 цветов. Строки "большого" справочника будут содержать ссылку на унифицированный справочник. В "большом" справочнике очень много мусора, например темно-синий цвет там может встретится как: т-синий, тем-синий, темно-синий, темно-син и т.д. Подскажите пожалуйста методы которыми можно выявить хотя бы какую то часть цветов которые есть в унифицированном справочнике. А то вручную как то не хочется людей напрягать проставлять ![]() |
|
![]() |
#2 |
Moderator
|
Может попробовать Soundex, тем более, что в MS SQL он реализован.
Не знаю, правда, насколько качественно он реализован для русского языка. |
|
![]() |
#3 |
----------------
|
|
|
![]() |
#4 |
Moderator
|
А ведь мой же проект
![]() ![]() |
|
![]() |
#5 |
Moderator
|
Цитата:
![]() Я бы взял обычный Excel и разбил текст по столбцам (есть там такая команда). Разделитель - дефис. Получившиеся две колонки отсортировал бы возрастанию по первой-второй колонкам. Дальше бежал бы (вручную, конечно) по получившемуся списку и проставлял в третьей колонке новые названия цветов (можно организовать выбор из списка при помощи функции "Проверка", кажется). Дальше можно пробежаться, отсортировав по второй-первой колонкам и проверить. Или начинать сразу с сортировки "2-1", если основной цвет, как правило, во второй колонке. В общем, как-то так... Разработка здесь, по-моему, не оправдана абсолютно, если задачку вручную можно решить за час. Ну за два. P.S. Понятно, что для соседних отсортированных ячеек можно будет применять копирование в третьей колонке, т.е. заполнять не по одной, а группами. Последний раз редактировалось Gustav; 27.05.2010 в 21:20. |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
![]() |
#6 |
Moderator
|
Ну, насколько я понимаю, нет гарантии, что разделителем является тире, что части только две и что вообще есть разделитель.
Но если искать простой способ, то я бы исходил из предположения, что люди, в большинстве своем ленивы и в вопросе создания цветов, вряд ли вышли за пределы радуги. Значит можно попробовать сгруппировать все цвета по вхождению в них корней наиболее распространенных 7-8 цветов: "син", "красн", "зел", "черн", "бел" .. Понятно, что будут промахи, но не думаю, что их процент будет большой. Оригиналы, выдумавшие оригинальные цвета, типа морковного, охра и фуксия могут быть увековечены в системе путем сохранения выдуманных ими названий. Последний раз редактировалось Андре; 27.05.2010 в 23:02. |
|
|
За это сообщение автора поблагодарили: Gustav (2). |
![]() |
#7 |
Участник
|
Цитата:
У женщин число воспринимаемых цветов может быть значительно больше ![]() |
|
![]() |
#8 |
Модератор
|
Цитата:
![]()
__________________
-ТСЯ или -ТЬСЯ ? |
|
![]() |
#9 |
Moderator
|
Цитата:
Даже учитывая то, что активно работали всего с двумя вендорами, через полгода накопилось по паре десятков значений для каждого основного цвета радуги: Blue, Light blue, Dark blue, Navy blue, Sea blue, Sky blue и т.д., не говоря уже о сочетаниях основных цветов: Blue Red, Blue Black, Red Blue (!) и т.д.
|
|
![]() |
#10 |
Moderator
|
![]() Цитата:
Формула массива ищет 14 цветов, которые мне пришли в голову: "радуга" + еще несколько. При желании список легко расширяем. Привожу версию формулы в английской и русской версии Excel (установленный разделитель списка - запятая): Код: =CHOOSE( MIN( IF( NOT( ISERR( SEARCH( {"кра","ора","жел","зел","гол","син","фио","бел","сер","чер","кор","беж","роз","сир"}, A1))),{1,2,3,4,5,6,7,8,9,10,11,12,13,14},9999)), "красный","оранжевый","желтый","зеленый","голубой","синий","фиолетовый","белый","серый","черный","коричневый","бежевый","розовый","сиреневый") =ВЫБОР( МИН( ЕСЛИ( НЕ( ЕОШ( ПОИСК( {"кра";"ора";"жел";"зел";"гол";"син";"фио";"бел";"сер";"чер";"кор";"беж";"роз";"сир"}, A1))),{1;2;3;4;5;6;7;8;9;10;11;12;13;14},9999)), "красный","оранжевый","желтый","зеленый","голубой","синий","фиолетовый","белый","серый","черный","коричневый","бежевый","розовый","сиреневый") Чтобы не париться с ручным вводом (а также с выяснением региональных настроек), прилагаю файл, в котором эта формула уже введена (см. ячейки колонки B). Обратите внимание, что 4 последних строки - по желанию заказчика ![]() P.S. А для ситуации, когда в одной ячейке встречаются два базовых цвета ("син" и "кра" - в синекрасном), предлагается сигнальная формула в ячейке C1, подсчитывающая кол-во базовых цветов. В подавляющем большинстве значением будет 1. А на значения больше 1 надо будет обратить повышенное внимание (файл Excel обновил). Код: =СУММ( ЕСЛИ( НЕ( ЕОШ( ПОИСК( {"кра";"ора";"жел";"зел";"гол";"син";"фио";"бел";"сер";"чер";"кор";"беж";"роз";"сир"}, A1))),1,0)) ![]() Последний раз редактировалось Gustav; 28.05.2010 в 12:13. |
|
|
За это сообщение автора поблагодарили: Андре (2), Just_smile (1). |
![]() |
#11 |
----------------
|
в функции нечеткого поиска кода с 3 копейки, за то же время можно было ее и в виде макроса в Ёкселе сделать
![]() Базовых цветов у них планируется, не 7, не 14 и даже не 49, а около 100, что ручную обработку значительно усложняет. |
|
![]() |
#12 |
Moderator
|
Цитата:
![]() Цитата:
P.S. А впрочем соглашусь, что попробовать нечеткий поиск было бы интересно. Получается, что нужно будет в цикле перебрать 1200 "мусорных" цветов, сопоставляя их в другом цикле с 100 "правильными" цветами. У какого "правильного" цвета релевантность будет самая высокая, тот и считать сопоставленным для данного "мусорного" цвета. Конечно, возможны "проблемы" в результатах и их все равно придется отсмотреть. Под проблемами я понимаю, в первую очередь, несколько одинаковых максимальных релевантностей, для которых нужно будет определиться со стратегией выбора одного цвета, а также различные неожиданные результаты. Но интересно, интересно! Код VBA (Access) для нечеткого поиска, который можно поместить в Excel, приводится в сообщении Андре про "источник идеи": Функция нечеткого сравнения строк. Т.е. собственно "поисковый" код имеется, осталось оформить циклы. Последний раз редактировалось Gustav; 28.05.2010 в 12:17. |
|