Ребята поправьте меня, если я не прав. С самого начала не мог понять идею. Зачем изобретать велосипед, если он уже изобретен, надо только научиться на нем ездить. Этот велосипед называется Регулярные выражения. Посредством регулярных выражений осуществляется поиск практически всех браузеров интернета. Регулярные выражения с умелым использованием можно с успехом использовать в VBA. Самую большую сложность представляет корректное составление строки поиска на регулярных выражениях, а процент совпадения - ну для какой задачи он нужен? Жду жесткой критики ...
Ребята поправьте меня, если я не прав. С самого начала не мог понять идею. Зачем изобретать велосипед, если он уже изобретен, надо только научиться на нем ездить. Этот велосипед называется Регулярные выражения. Посредством регулярных выражений осуществляется поиск практически всех браузеров интернета. Регулярные выражения с умелым использованием можно с успехом использовать в VBA. Самую большую сложность представляет корректное составление строки поиска на регулярных выражениях, а процент совпадения - ну для какой задачи он нужен? Жду жесткой критики ...VovaK
Всем удачи. У нас все получится. С уважением, Владимир.
VovaK, лично мне он нужен для автоматического поиска в списке названий наиболее похожих по содержанию. Нечёткий поиск, конечно, синонимы не находит, но, по крайней мере, устойчив к перестановке слов и (в меньшей степени) вариациям грамматических форм. Регулярные выражения, во-первых, составлять надо вручную, а во-вторых, не позволяют упорядочить рейтинг по степени сходства - и, соответственно, визуально анализировать, наиболее подходящие строки. Я уж не говорю об ошибка и опечатках, которые отсеиваютя like'ом на корню.
VovaK, лично мне он нужен для автоматического поиска в списке названий наиболее похожих по содержанию. Нечёткий поиск, конечно, синонимы не находит, но, по крайней мере, устойчив к перестановке слов и (в меньшей степени) вариациям грамматических форм. Регулярные выражения, во-первых, составлять надо вручную, а во-вторых, не позволяют упорядочить рейтинг по степени сходства - и, соответственно, визуально анализировать, наиболее подходящие строки. Я уж не говорю об ошибка и опечатках, которые отсеиваютя like'ом на корню.Формуляр
Excel 2003 EN, 2013 EN
Сообщение отредактировал Формуляр - Вторник, 27.09.2011, 10:31
Формуляр, насчет вручную - думаю Вы ошибаетесь. Все интернет браузеры формируют строку поиска программно, к примеру рядовой пользователь понятия не имеет, что длиннющая строка, следующая за адресом yandex.ru не что иное как строка поиска, изложенная регулярными выражениями. Все, что вы перечислили доступно этими средствами.
Формуляр, поймите меня правильно. На данный момент Вы тратите силы и время в основном для прописывания алгоритма сравнения. Я же предлагаю, используя движок регулярных выражений изготовить инструмент создания строк поиска с различной степенью схожести. Согласитесь, что это будет инструмент уже для широкого использования.
Формуляр, насчет вручную - думаю Вы ошибаетесь. Все интернет браузеры формируют строку поиска программно, к примеру рядовой пользователь понятия не имеет, что длиннющая строка, следующая за адресом yandex.ru не что иное как строка поиска, изложенная регулярными выражениями. Все, что вы перечислили доступно этими средствами.
Формуляр, поймите меня правильно. На данный момент Вы тратите силы и время в основном для прописывания алгоритма сравнения. Я же предлагаю, используя движок регулярных выражений изготовить инструмент создания строк поиска с различной степенью схожести. Согласитесь, что это будет инструмент уже для широкого использования. VovaK
Всем удачи. У нас все получится. С уважением, Владимир.
VovaK, обсуждать преимущества и недостатки того или иного метода лучше на конкретном примере (и не интернет-поисковиков, а нашего дорогого Ёкселя :)). Предложите свой вариант решения для FUZZY_SEARCHING, который у нас вроде полигона стал - тогда можно будет говорить предметно.
VovaK, обсуждать преимущества и недостатки того или иного метода лучше на конкретном примере (и не интернет-поисковиков, а нашего дорогого Ёкселя :)). Предложите свой вариант решения для FUZZY_SEARCHING, который у нас вроде полигона стал - тогда можно будет говорить предметно.Формуляр
Excel 2003 EN, 2013 EN
Сообщение отредактировал Формуляр - Вторник, 27.09.2011, 12:11
Очевидно, Володе не приходилось выбирать информацию из большого объёма данных, забитых в таблицы кривыми ручками нескольких очень далёких от компьютера человек за несколько лет. Типичный пример - таблица складского учёта, заполняемая нашими кладовщиками. Они же все "умные" и считают, что если буквы выглядят на распечатке одинаково, то это одни и те же буквы, а кроме того - что перестановка слов в полном названии изделия обычно не меняет смысла записи... Ну а уж про совершенно произвольные сокращения длинных (и не очень) слов я вообще не говорю. На все попытки навести порядок у них один ответ: "Ну, неужели тебе, тупому, не понятно, что Кабель волоконно-оптический - это то же самое, что Опт.кабель или ВОК?" Мне-то понятно, а вот как найти в таблице этот кабель если не знаешь, как он туда внесён?
Очевидно, Володе не приходилось выбирать информацию из большого объёма данных, забитых в таблицы кривыми ручками нескольких очень далёких от компьютера человек за несколько лет. Типичный пример - таблица складского учёта, заполняемая нашими кладовщиками. Они же все "умные" и считают, что если буквы выглядят на распечатке одинаково, то это одни и те же буквы, а кроме того - что перестановка слов в полном названии изделия обычно не меняет смысла записи... Ну а уж про совершенно произвольные сокращения длинных (и не очень) слов я вообще не говорю. На все попытки навести порядок у них один ответ: "Ну, неужели тебе, тупому, не понятно, что Кабель волоконно-оптический - это то же самое, что Опт.кабель или ВОК?" Мне-то понятно, а вот как найти в таблице этот кабель если не знаешь, как он туда внесён?Alex_ST
С уважением, Алексей MS Excel 2003 - the best!!!
Сообщение отредактировал Alex_ST - Вторник, 27.09.2011, 13:03
Алекс, ну это сверхзадача, научить поисковик воспринимать ВОК и Кабель волоконно-оптический за одно и то же. Для такой задачи необходимы дополнительные поля в базе, сужающие область поиска. В SAP R3 это группы и класификаторы.
Если кладовщиков заставить правильно ставить группы (в цифрах трудно заплутать) и характеристики продукции, поиск будет намного предметнее.
И потом, что вы ждете от такого поисковика, соберет он в кучу все что не попадя, в любом случае без участия человечека не обойтись. Не проще сразу ручками, но с использованием VBA, как здесь http://www.planetaexcel.ru/forum.php?thread_id=25514
Алекс, ну это сверхзадача, научить поисковик воспринимать ВОК и Кабель волоконно-оптический за одно и то же. Для такой задачи необходимы дополнительные поля в базе, сужающие область поиска. В SAP R3 это группы и класификаторы.
Если кладовщиков заставить правильно ставить группы (в цифрах трудно заплутать) и характеристики продукции, поиск будет намного предметнее.
И потом, что вы ждете от такого поисковика, соберет он в кучу все что не попадя, в любом случае без участия человечека не обойтись. Не проще сразу ручками, но с использованием VBA, как здесь http://www.planetaexcel.ru/forum.php?thread_id=25514VovaK
Всем удачи. У нас все получится. С уважением, Владимир.
Сообщение отредактировал VovaK - Вторник, 27.09.2011, 20:54
Хотел бы поинтересоваться у Формуляра, почему (как) в примере ниже получается результат 33% при Q=3? маня 33% ваня ' ??? ман+аня = ван+аня ' мне сравнение видится так. По логике 50%
Такая метрика выглядит, пожалуй, более естественно. Получить её из метрики TextSimilarity() можно простым преобразованием: [vba]
Код
= 2 / (1 + 1/TextSimilarity())
[/vba]
Цитата (nerv)
Хотел бы поинтересоваться у Формуляра, почему (как) в примере ниже получается результат 33% при Q=3? маня 33% ваня ' ??? ман+аня = ван+аня ' мне сравнение видится так. По логике 50%
Такая метрика выглядит, пожалуй, более естественно. Получить её из метрики TextSimilarity() можно простым преобразованием: [vba]
Разрешите предложить вариант RegExp-вариант одной из функций, задействованных в Вашей книге FuzzyMatch Мои вдохновители - Alex_ST и Nerv (Саша высказал близкие мысли по поводу метода, а ещё усомнился в его эффективности, и не зря )
Код не стал существенно более наглядным и лаконичным, а функция не очень-то прибавила в скорости Быстродействие старой и новой функций находится за "интерфейсным порогом" (т.е. их скорость такая же, как и у самой простой UDF-функции, возвращающей единицу), поэтому для ускорения обработки данных на листе, скорее всего, надо использовать другие инструменты (не функции)
Новая функция, бесспорно, выигрывает при сравнении очень длинных строк, лучше ведет себя в Win-98 и Win-7 Имеются дополнительные возможности предварительной очистки от пробелов и знаков препинания Скорее всего, возможна утонченная обработка сравниваемых строк, учет каких-то общих правил и т.д. Общий вывод: пока ничего особенного
Разрешите предложить вариант RegExp-вариант одной из функций, задействованных в Вашей книге FuzzyMatch Мои вдохновители - Alex_ST и Nerv (Саша высказал близкие мысли по поводу метода, а ещё усомнился в его эффективности, и не зря )
Код не стал существенно более наглядным и лаконичным, а функция не очень-то прибавила в скорости Быстродействие старой и новой функций находится за "интерфейсным порогом" (т.е. их скорость такая же, как и у самой простой UDF-функции, возвращающей единицу), поэтому для ускорения обработки данных на листе, скорее всего, надо использовать другие инструменты (не функции)
Новая функция, бесспорно, выигрывает при сравнении очень длинных строк, лучше ведет себя в Win-98 и Win-7 Имеются дополнительные возможности предварительной очистки от пробелов и знаков препинания Скорее всего, возможна утонченная обработка сравниваемых строк, учет каких-то общих правил и т.д. Общий вывод: пока ничего особенногоv__step
Володя, вот что мне в тебе очень нравится (кроме твоей продвинутости и приятности общения, естественно ) - это аккуратность в оформлении решений! Огромное спасибо тебе, что не поленился тратить время на описание алгоритма. На досуге надо будет попытать твою новую функцию, попытаться прикрутить её к фильтру (как я делал в своих постах (ну, например, ЗДЕСЬ )
Володя, вот что мне в тебе очень нравится (кроме твоей продвинутости и приятности общения, естественно ) - это аккуратность в оформлении решений! Огромное спасибо тебе, что не поленился тратить время на описание алгоритма. На досуге надо будет попытать твою новую функцию, попытаться прикрутить её к фильтру (как я делал в своих постах (ну, например, ЗДЕСЬ )Alex_ST
Владимир, спасибо, что поднял столь интересную тему! Несмотря на то, что топик называется "Готовые решения", я хотел бы Вас призвать немного порассуждать, попытаться собрать все самые лучше мысли на этот счет в кучу. Начну с того, что могу вспомнить:
Мысль 1. Предварительная обработка сравниваемых строк. - Предлагаю очищать сравниваемые строки от всего, кроме букв английского и русского алфавитов и цифр. - Вероятно, еще потребуется заменять английские буквы в русских словах на русские [и на оборот] - Ув. Формуляр высказывался о целесообразности отсечения суффиксов и окончаний. Склонен с ним согласиться. - Привести к единому регистру
Далее следуют предположения. Возможно, имеет смысл разбить строки по пробелам и плясать от этого. Разумеется нужно как-то фиксировать позиции, в которых находились те или иные слова. На этом моменте я зашел в тупик) Жду предложений и идей
Владимир, спасибо, что поднял столь интересную тему! Несмотря на то, что топик называется "Готовые решения", я хотел бы Вас призвать немного порассуждать, попытаться собрать все самые лучше мысли на этот счет в кучу. Начну с того, что могу вспомнить:
Мысль 1. Предварительная обработка сравниваемых строк. - Предлагаю очищать сравниваемые строки от всего, кроме букв английского и русского алфавитов и цифр. - Вероятно, еще потребуется заменять английские буквы в русских словах на русские [и на оборот] - Ув. Формуляр высказывался о целесообразности отсечения суффиксов и окончаний. Склонен с ним согласиться. - Привести к единому регистру
Далее следуют предположения. Возможно, имеет смысл разбить строки по пробелам и плясать от этого. Разумеется нужно как-то фиксировать позиции, в которых находились те или иные слова. На этом моменте я зашел в тупик) Жду предложений и идей nerv
Чебурашка стал символом олимпийских игр. А чего достиг ты? Тишина - самый громкий звук
К Сашиным соображениям позвольте добавить и свои "пять копеек": - ограничивать минимальную длину сравниваемых стрингов как делал Формуляр в своём ПОСТЕ (иначе слишком много вариантов будет)
К Сашиным соображениям позвольте добавить и свои "пять копеек": - ограничивать минимальную длину сравниваемых стрингов как делал Формуляр в своём ПОСТЕ (иначе слишком много вариантов будет)Alex_ST
У меня тоже появился минимальный опыт общения с этим вопросом и, соответственно, некоторые соображения: - Работа массивов/словарей скорее всего, будет проходить гораздо быстрее и гибче, чем UDF - Похоже, стоит выполнять поиск в несколько этапов: сначала грубо (самым простым и быстрым способом), затем уточнённо - так можно повысить быстродействие на порядок
Раз есть минимальный интерес к этой теме, я сегодня вечером постараюсь расширить и уточнить описание (сейчас я уделил внимание только одному этапу из нескольких) Я очень рассчитываю на руку дружбы и помощи, потому что мне давно пора возобновить работу над Фитнесом - он стОит того. Что касается нечеткого поиска, вижу свою задачу в некотором возмущении общего спокойствия, не более того
У меня тоже появился минимальный опыт общения с этим вопросом и, соответственно, некоторые соображения: - Работа массивов/словарей скорее всего, будет проходить гораздо быстрее и гибче, чем UDF - Похоже, стоит выполнять поиск в несколько этапов: сначала грубо (самым простым и быстрым способом), затем уточнённо - так можно повысить быстродействие на порядок
Раз есть минимальный интерес к этой теме, я сегодня вечером постараюсь расширить и уточнить описание (сейчас я уделил внимание только одному этапу из нескольких) Я очень рассчитываю на руку дружбы и помощи, потому что мне давно пора возобновить работу над Фитнесом - он стОит того. Что касается нечеткого поиска, вижу свою задачу в некотором возмущении общего спокойствия, не более того v__step
С уважением, Владимир
Сообщение отредактировал v__step - Пятница, 17.02.2012, 12:46
Вот, пока первый Володин вариант "прикрутил" к своему псевдо-фильтру. Вроде, работает и не шибко тормозит. (там ещё не убраны разные другие методы, которые я пытал раньше. Можно будет попробовать менять их в последней процедуре Sheet01)
Вот, пока первый Володин вариант "прикрутил" к своему псевдо-фильтру. Вроде, работает и не шибко тормозит. (там ещё не убраны разные другие методы, которые я пытал раньше. Можно будет попробовать менять их в последней процедуре Sheet01)Alex_ST
Молниеносная реакция! Всё-таки ждем до сегодняшнего вечера с более подбробным описанием работы RegEx. Это важно, потому что материал новый, и надо во всём хоршенько разобраться В конце концов, это неплохая возможность дополнительно ознакомиться с +- RegEx, что само по себе не сейчас, так потом обязательно пригодится
Молниеносная реакция! Всё-таки ждем до сегодняшнего вечера с более подбробным описанием работы RegEx. Это важно, потому что материал новый, и надо во всём хоршенько разобраться В конце концов, это неплохая возможность дополнительно ознакомиться с +- RegEx, что само по себе не сейчас, так потом обязательно пригодитсяv__step
Володя, к своему огорчению на этом примере я в полной мере прочувствовал преимущества так не любимого мною раннего связывания перед поздним... (там я твой исходный код процедуры fRegExRep просто заремарил, а не удалил и переделал в свою fRegExRep с поздним связыванием, поэтому сравнить не трудно) Жутко тормозит при позднем связывании!
Володя, к своему огорчению на этом примере я в полной мере прочувствовал преимущества так не любимого мною раннего связывания перед поздним... (там я твой исходный код процедуры fRegExRep просто заремарил, а не удалил и переделал в свою fRegExRep с поздним связыванием, поэтому сравнить не трудно) Жутко тормозит при позднем связывании!Alex_ST
С уважением, Алексей MS Excel 2003 - the best!!!
Сообщение отредактировал Alex_ST - Пятница, 17.02.2012, 16:07
Что поделаешь... А ведь есть и более серьезные проблемы автоматизации. Эх, если бы ты видел, как тормозит объектная модель Автокада при запуске из Excel... При элементарном обходе коллекции примитивов чертежа частенько бывает замедление в миллионы раз Приходится подгружать проект VBA Автокада, запускать там процедуры методом Run, ждать завершения их действий, получать данные назад, и только потом возобновлять работу. И ничего не поделаешь, и раннее связывание не спасет... Я перестал пользоваться поздним связыванием, получив минимальный опыт работы с Word, Access и Autocad из Excel Скорее всего, сновное назначение позднего связывания - обучение (так же, как и использование переменных без объявления типа) Могу предположить, что позднее связывание способно не только замедлять работу программы, но и вызывать сбои... Возможно, и уважаемый Dictionary из библиотеки ScriptingRuntime имеет дополнительный резерв быстродействия при раннем связывании
Что поделаешь... А ведь есть и более серьезные проблемы автоматизации. Эх, если бы ты видел, как тормозит объектная модель Автокада при запуске из Excel... При элементарном обходе коллекции примитивов чертежа частенько бывает замедление в миллионы раз Приходится подгружать проект VBA Автокада, запускать там процедуры методом Run, ждать завершения их действий, получать данные назад, и только потом возобновлять работу. И ничего не поделаешь, и раннее связывание не спасет... Я перестал пользоваться поздним связыванием, получив минимальный опыт работы с Word, Access и Autocad из Excel Скорее всего, сновное назначение позднего связывания - обучение (так же, как и использование переменных без объявления типа) Могу предположить, что позднее связывание способно не только замедлять работу программы, но и вызывать сбои... Возможно, и уважаемый Dictionary из библиотеки ScriptingRuntime имеет дополнительный резерв быстродействия при раннем связыванииv__step
С уважением, Владимир
Сообщение отредактировал v__step - Пятница, 17.02.2012, 17:53