Ниспадающий список мне лично не удобен, с клавиатуры им не попользуешься, но раз уж вставлен, пусть будет. За подсчет строк отдельный плюс, получилось более изящно, чем у меня. Думаю, если никто ничего больше не придумает, можно считать прикрепленный файл окончательным вариантом.
Ниспадающий список мне лично не удобен, с клавиатуры им не попользуешься, но раз уж вставлен, пусть будет. За подсчет строк отдельный плюс, получилось более изящно, чем у меня. Думаю, если никто ничего больше не придумает, можно считать прикрепленный файл окончательным вариантом.n158
Дата: Понедельник, 11.03.2013, 12:43 |
Сообщение № 142
Группа: Гости
Спасибо за ваши труды, очень выручили при сведении 250-ти значений с эталонным списком. Ну а теперь немного дегтя. Сильно раздражает прыгание курсора. Старайтесь не использовать подобные методы. Да и Copy/paste сдесь ни к чему, в буфере обмена у пользователя может хранится полезная для него информация. Вообщем, событие селекта стоит привести к виду:
[vba]
Код
Sub Worksheet_SelectionChange(ByVal Target As Range) 'если выбрана одна ячейка и она из колонки с данными, то устанаваливаем значение ячейки поиска равным значению выделенной ячейки If (Target.Cells.Count = 1) And (Not Intersect(Target, Range("B:B")) Is Nothing) Then: _ Range("C2").Value = Selection.Value End Sub
[/vba]
По поводу коммента:
[vba]
Код
' тут я пытался изменять свойства активной ячейки, ' но не знаю как вернуть все обратно после выделения другой ячейки.
[/vba] Можно сбрасывать/устанавливать в дефолт свойства всех ячеек в колонке (Range("B:B") ...), затем менять свойства нужной. Реализовывать не стал, ИМХО, не к чему.
Спасибо за ваши труды, очень выручили при сведении 250-ти значений с эталонным списком. Ну а теперь немного дегтя. Сильно раздражает прыгание курсора. Старайтесь не использовать подобные методы. Да и Copy/paste сдесь ни к чему, в буфере обмена у пользователя может хранится полезная для него информация. Вообщем, событие селекта стоит привести к виду:
[vba]
Код
Sub Worksheet_SelectionChange(ByVal Target As Range) 'если выбрана одна ячейка и она из колонки с данными, то устанаваливаем значение ячейки поиска равным значению выделенной ячейки If (Target.Cells.Count = 1) And (Not Intersect(Target, Range("B:B")) Is Nothing) Then: _ Range("C2").Value = Selection.Value End Sub
[/vba]
По поводу коммента:
[vba]
Код
' тут я пытался изменять свойства активной ячейки, ' но не знаю как вернуть все обратно после выделения другой ячейки.
[/vba] Можно сбрасывать/устанавливать в дефолт свойства всех ячеек в колонке (Range("B:B") ...), затем менять свойства нужной. Реализовывать не стал, ИМХО, не к чему.Vitalts
Дата: Понедельник, 11.03.2013, 12:59 |
Сообщение № 144
Группа: Гости
Alex_ST, ко всем, кто приложил силы к разработке обсуждаемого и выложенного в данной ветке макроса. Насчет регистрации, первым делом ее и прошел, но что-то код пока не срабатывает. Возможно, необходимо активировать регистрацию через и-мейл (после регистрации сайт ничего не сообщил), но ячик пока пуст. Поэтому пишу под гостем (но под совим ником). PS: Капча на сайте "жесть". Далеко не с первого раза проходит. ББ коды, похоже, тоже не стандартные.
Alex_ST, ко всем, кто приложил силы к разработке обсуждаемого и выложенного в данной ветке макроса. Насчет регистрации, первым делом ее и прошел, но что-то код пока не срабатывает. Возможно, необходимо активировать регистрацию через и-мейл (после регистрации сайт ничего не сообщил), но ячик пока пуст. Поэтому пишу под гостем (но под совим ником). PS: Капча на сайте "жесть". Далеко не с первого раза проходит. ББ коды, похоже, тоже не стандартные.Vitalts
Добрый день! Скачал на Планета Эксел. Макрос FuzzyVLOOKUР. Шикарная вещь!!! Хотелось бы узнать, можно ли сделать что бы функция работала так: нашла 5% совпадения, ищет 10%, нашла 10% ищет 15%. Не нашла 15% выводит результат 10%. Заранее Благодарю. P.S: Не ругайте если похожее уже есть Просто запутался в вариантах!!!
Добрый день! Скачал на Планета Эксел. Макрос FuzzyVLOOKUР. Шикарная вещь!!! Хотелось бы узнать, можно ли сделать что бы функция работала так: нашла 5% совпадения, ищет 10%, нашла 10% ищет 15%. Не нашла 15% выводит результат 10%. Заранее Благодарю. P.S: Не ругайте если похожее уже есть Просто запутался в вариантах!!!Kinder
Ну так там и спрашивайте у его автора. Я честно не помню, кто его создал. А основные творцы нечёткого поиска здесь - nerv , Формуляр и v__step. К ним в личку ткнитесь со ссылкой на этот топик (после обновления форума у всех съехали подписки на топики и они о Вашем вопросе здесь могут просто не узнать). А я сам эти алгоритмы в своё время пытался понять, но так и не въехал и просто тупо полировал чужие. Но тема для меня уже не очень интересна (поезд ушёл).
Цитата (Kinder)
Скачал на Планета Эксел. Макрос FuzzyVLOOKUР
Ну так там и спрашивайте у его автора. Я честно не помню, кто его создал. А основные творцы нечёткого поиска здесь - nerv , Формуляр и v__step. К ним в личку ткнитесь со ссылкой на этот топик (после обновления форума у всех съехали подписки на топики и они о Вашем вопросе здесь могут просто не узнать). А я сам эти алгоритмы в своё время пытался понять, но так и не въехал и просто тупо полировал чужие. Но тема для меня уже не очень интересна (поезд ушёл).Alex_ST
С уважением, Алексей MS Excel 2003 - the best!!!
Сообщение отредактировал Alex_ST - Среда, 13.03.2013, 22:07
Извиняюсь если задел чем то. Даже и в мыслях не было!!! Скачал последний файл от Формуляр. По этой функции все 1 в 1. Насчет лички спасибо))). Но не буду. Увидят так увидят!
Цитата (Alex_ST)
Ну так там и спрашивайте у его автора
Извиняюсь если задел чем то. Даже и в мыслях не было!!! Скачал последний файл от Формуляр. По этой функции все 1 в 1. Насчет лички спасибо))). Но не буду. Увидят так увидят! Kinder
По этой функции все 1 в 1. Насчет лички спасибо))). Но не буду. Увидят так увидят!
Чего увидят-то?
Цитата (Kinder)
Хотелось бы узнать, можно ли сделать что бы функция работала так: нашла 5% совпадения, ищет 10%, нашла 10% ищет 15%. Не нашла 15% выводит результат 10%.
FindBestMatchTxt() и так ищет максимальное совпадение с учётом заданного порога. Или нужно, чтоб наоборот - c минимального искало? Тогда - найти все > 0, а потом - обратной сортировкой по степени сходства.
Цитата (Kinder)
По этой функции все 1 в 1. Насчет лички спасибо))). Но не буду. Увидят так увидят!
Чего увидят-то?
Цитата (Kinder)
Хотелось бы узнать, можно ли сделать что бы функция работала так: нашла 5% совпадения, ищет 10%, нашла 10% ищет 15%. Не нашла 15% выводит результат 10%.
FindBestMatchTxt() и так ищет максимальное совпадение с учётом заданного порога. Или нужно, чтоб наоборот - c минимального искало? Тогда - найти все > 0, а потом - обратной сортировкой по степени сходства.Формуляр
Excel 2003 EN, 2013 EN
Сообщение отредактировал Формуляр - Четверг, 14.03.2013, 10:34
Судя по описанию, Kinder все же нужен максимум (FindBestMatchTxt()), только отчего-то с реализацией через ж Формуляр, напрягает скорость работы. На сравнение 344000 записей уходит 31 сек. От скриптового языка сложно большего добится, перенес textSimilarity в DLL. На тот же объем уходит 17 сек, в данном случае имеем большие потери на вызовах функции из DLL. Сравнение в лоб 2-х строк довольно редкое явление, гораздо чаще нужен FindBestMatchTxt() двух списков. Вот он должен будет сильно ускорится. Пока мись перенос застопорился из-за нехватки времени. Как закончу, скину, авось, кому пригодится. Serge_007, спасибо за разъяснения, уже повторно заполнил форму регистрации и вот я здесь. С BB кодами тоже разобрался, mozilla подглючивает, первый релоад при добавлении поста не отображает BB форматирование.
Судя по описанию, Kinder все же нужен максимум (FindBestMatchTxt()), только отчего-то с реализацией через ж Формуляр, напрягает скорость работы. На сравнение 344000 записей уходит 31 сек. От скриптового языка сложно большего добится, перенес textSimilarity в DLL. На тот же объем уходит 17 сек, в данном случае имеем большие потери на вызовах функции из DLL. Сравнение в лоб 2-х строк довольно редкое явление, гораздо чаще нужен FindBestMatchTxt() двух списков. Вот он должен будет сильно ускорится. Пока мись перенос застопорился из-за нехватки времени. Как закончу, скину, авось, кому пригодится. Serge_007, спасибо за разъяснения, уже повторно заполнил форму регистрации и вот я здесь. С BB кодами тоже разобрался, mozilla подглючивает, первый релоад при добавлении поста не отображает BB форматирование.Vitalts
n158, в файле dupkoeff3.1.rar(58Kb) удален столбец D (номер строки), который был в предыдущем dupkoeff3.rar(54Kb). Подскажите, как все-таки оставить его там.
n158, в файле dupkoeff3.1.rar(58Kb) удален столбец D (номер строки), который был в предыдущем dupkoeff3.rar(54Kb). Подскажите, как все-таки оставить его там.Yuzhniy
Для случая, заявленного denis-ом, когда требуется упрощённый поиск по большому массиву, слепил на базе старой метрики облегчённую версию, которая сравнивает текст не диадами-триадами, а тупо словами целиком (от пробела до пробела). Соответственно, любые морфологические вариации воспринимаются как несовпадение. Ну, для поиска ключевых слов да к тому ж английских, пожалуй, проканает. Зато, заметно быстрее.
Метрика вычисляется по длине найденных и ненайденных слов. Предварительную очистку массива поиска от всякого небуквенного мусора нужно выполнять вручную. Это по-любому быстрее, чем очистка, встроенная в сравнение.
Для случая, заявленного denis-ом, когда требуется упрощённый поиск по большому массиву, слепил на базе старой метрики облегчённую версию, которая сравнивает текст не диадами-триадами, а тупо словами целиком (от пробела до пробела). Соответственно, любые морфологические вариации воспринимаются как несовпадение. Ну, для поиска ключевых слов да к тому ж английских, пожалуй, проканает. Зато, заметно быстрее.
Метрика вычисляется по длине найденных и ненайденных слов. Предварительную очистку массива поиска от всякого небуквенного мусора нужно выполнять вручную. Это по-любому быстрее, чем очистка, встроенная в сравнение.Формуляр
Долго не мог как следует разобраться со встроенной в цикл проверкой пороговых параметров, при которых минимальный уровень сходства становится недостижим и дальнейшее сравнение по диадам бессмысленно. Теперь вот разобрался, вроде. Дописал ещё коментариев, на сколько был способен.
Предварительные настройки прежние: длина Q-граммы Q=2 и балансировочный коэффициент F=0.5
Долго не мог как следует разобраться со встроенной в цикл проверкой пороговых параметров, при которых минимальный уровень сходства становится недостижим и дальнейшее сравнение по диадам бессмысленно. Теперь вот разобрался, вроде. Дописал ещё коментариев, на сколько был способен.
Предварительные настройки прежние: длина Q-граммы Q=2 и балансировочный коэффициент F=0.5Формуляр
Эх, довести бы нечёткий фильтр до юзабилити... Но тогда надо чтобы проводился нечёткий поиск по каждому из слов фразы шаблона в словах фраз фильтруемого массива... Грубо говоря, сначала оценивается сходство первого слова шаблона с каждым из слов каждой из фраз. Потом - второго, .... В итоге получаем некую матрицу с количеством строк = кол-ву фраз фильтруемого массива а количество столбцов = кол-ву слов фразы шаблона. В каждой ячейке матрицы - "похожесть" слова шаблона на слова фразы массива. Потом по этим данным нужно как-то вычислять общую похожесть каждой из фраз массива на фразу шаблона.
Это ж надо было подгадать - ровно 2 года прошло. Алексей, по случаю 2ой годовщины твоего предложения (которое и для меня тоже выглядело весьма заманчиво) выкладываю модернизированную версию SimText() и других её производных.
Теперь подсчёт совпадающих диад происходит с учётом попарного пересечения всех слов. Оказалось, это не требует многократного увеличения вычислительных затрат. Что это реально даёт на практике, пока не ясно, но появляется принципиальная возможность применения более изощрённых способов вычисления метрики сходства. Приглашаю желающих поэкспериментировать в этом направлении. Лист Sheet3 представляет своего рода испытательный стенд с внутренностями наружу, чтобы можно было посчитать разные варианты метрик на формулах. Ради этого пришлось использовать некоторые неоптимальные с точки зрения быстродействия средства, тем не менее и для практического применения скорость вполне достаточная.
Помимо формул можно также подкрутить 2 старых константы F и Q (текущие значения F = 1, Q = 2), и 1 новую: WORD_SMLRTY_LIM - минимально допустимый уровень сходства пары слов (текущее значение WORD_SMLRTY_LIM = 0)
Эх, довести бы нечёткий фильтр до юзабилити... Но тогда надо чтобы проводился нечёткий поиск по каждому из слов фразы шаблона в словах фраз фильтруемого массива... Грубо говоря, сначала оценивается сходство первого слова шаблона с каждым из слов каждой из фраз. Потом - второго, .... В итоге получаем некую матрицу с количеством строк = кол-ву фраз фильтруемого массива а количество столбцов = кол-ву слов фразы шаблона. В каждой ячейке матрицы - "похожесть" слова шаблона на слова фразы массива. Потом по этим данным нужно как-то вычислять общую похожесть каждой из фраз массива на фразу шаблона.
Это ж надо было подгадать - ровно 2 года прошло. Алексей, по случаю 2ой годовщины твоего предложения (которое и для меня тоже выглядело весьма заманчиво) выкладываю модернизированную версию SimText() и других её производных.
Теперь подсчёт совпадающих диад происходит с учётом попарного пересечения всех слов. Оказалось, это не требует многократного увеличения вычислительных затрат. Что это реально даёт на практике, пока не ясно, но появляется принципиальная возможность применения более изощрённых способов вычисления метрики сходства. Приглашаю желающих поэкспериментировать в этом направлении. Лист Sheet3 представляет своего рода испытательный стенд с внутренностями наружу, чтобы можно было посчитать разные варианты метрик на формулах. Ради этого пришлось использовать некоторые неоптимальные с точки зрения быстродействия средства, тем не менее и для практического применения скорость вполне достаточная.
Помимо формул можно также подкрутить 2 старых константы F и Q (текущие значения F = 1, Q = 2), и 1 новую: WORD_SMLRTY_LIM - минимально допустимый уровень сходства пары слов (текущее значение WORD_SMLRTY_LIM = 0)Формуляр
Спасибо, Саш, что не забил болт на эту тему. У меня последние пол-года непрерывный завал на работе. На форумах почти совсем появляться перестал... Уж не говоря о том, чтобы что-то потестировать, самому написАть... Очень хочется посмотреть, что ты там такого наваял, пощупать "в разных позах" А мало того, что нет свободного времени, так ещё и гады-сисадмины на работе закрыли скачивание почти всего, что движется. А все массивы, на которых можно было бы потренироваться, у меня на работе. Да и дома я совсем не программирую - других дел хватает. Сейчас скину твой крайний пример на флэшку, притащу на работу. Попробую в свободную минутку вспомнить, что на флэшке у меня пример, который надо бы покрутить...
Спасибо, Саш, что не забил болт на эту тему. У меня последние пол-года непрерывный завал на работе. На форумах почти совсем появляться перестал... Уж не говоря о том, чтобы что-то потестировать, самому написАть... Очень хочется посмотреть, что ты там такого наваял, пощупать "в разных позах" А мало того, что нет свободного времени, так ещё и гады-сисадмины на работе закрыли скачивание почти всего, что движется. А все массивы, на которых можно было бы потренироваться, у меня на работе. Да и дома я совсем не программирую - других дел хватает. Сейчас скину твой крайний пример на флэшку, притащу на работу. Попробую в свободную минутку вспомнить, что на флэшке у меня пример, который надо бы покрутить...Alex_ST
С уважением, Алексей MS Excel 2003 - the best!!!
Сообщение отредактировал Alex_ST - Воскресенье, 25.08.2013, 22:57
Добавил к "продвинутой" процедуре сравнения/поиска опцию подбора аббревиатур по 1ым буквам слов. Флажок симметричного/асимметричного сравнения убрал из параметров в глобальные константы. При активной опции подбора аббревиатур не работает раннее прерывание цикла сравнения по прогнозируемой недостижимости минимального сходства. Т.е. установка высокого уровня MinLev не даёт ускорения поиска.
Добавил к "продвинутой" процедуре сравнения/поиска опцию подбора аббревиатур по 1ым буквам слов. Флажок симметричного/асимметричного сравнения убрал из параметров в глобальные константы. При активной опции подбора аббревиатур не работает раннее прерывание цикла сравнения по прогнозируемой недостижимости минимального сходства. Т.е. установка высокого уровня MinLev не даёт ускорения поиска.Формуляр
Спасибо, Саш, что не забил болт на эту тему. У меня последние пол-года непрерывный завал на работе. На форумах почти совсем появляться перестал... Уж не говоря о том, чтобы что-то потестировать, самому написАть...
И завал уже вошёл в привычку, и сисадмины всё те же, но с ещё бОльшими загибами, и … В общем, когда будет очень нужно по работе, только тогда и смогу потестить твою прогу. А так... Со всем нашим уважением, но к сожалению...
Спасибо, Саш, что не забил болт на эту тему. У меня последние пол-года непрерывный завал на работе. На форумах почти совсем появляться перестал... Уж не говоря о том, чтобы что-то потестировать, самому написАть...
И завал уже вошёл в привычку, и сисадмины всё те же, но с ещё бОльшими загибами, и … В общем, когда будет очень нужно по работе, только тогда и смогу потестить твою прогу. А так... Со всем нашим уважением, но к сожалению... Alex_ST