Предлагаю вашему вниманию бета версию функции "Алфавитного сравнения строк". Возвращает кол-во символов отличия одной строки от другой : ) В перспективе будет доступен режим сравнения строк с учетом регистра и без (сейчас он не доработан).
В двух словах об алгоритме: собираются в словарь алфавиты (+ кол-во букв) одной и другой строки, а затем сравниваются между собой сами алфавиты и кол-во букв этих алфавитов. На данный момент функция, как мне кажется, требует улучшения в части сравнения алфавитов.
Хотелось бы услышать ваше мнение : )
Предлагаю вашему вниманию бета версию функции "Алфавитного сравнения строк". Возвращает кол-во символов отличия одной строки от другой : ) В перспективе будет доступен режим сравнения строк с учетом регистра и без (сейчас он не доработан).
В двух словах об алгоритме: собираются в словарь алфавиты (+ кол-во букв) одной и другой строки, а затем сравниваются между собой сами алфавиты и кол-во букв этих алфавитов. На данный момент функция, как мне кажется, требует улучшения в части сравнения алфавитов.
Думаю да smile Если сравнить Serge 007 и nerv, то функция возвращает 3 отличия...
Собственно, алгоритм мне пришел в голову только сегодня за завтраком Насчет строк из вашего примера: по идее все правильно - S*rge 007 | n*rv
>>Возвращает кол-во символов отличия одной строки от другой : ) Видимо, здесь надо было писать так: возвращает кол-во символов отличия стоки B от строки A.
Quote (Serge_007)
Думаю да smile Если сравнить Serge 007 и nerv, то функция возвращает 3 отличия...
Собственно, алгоритм мне пришел в голову только сегодня за завтраком Насчет строк из вашего примера: по идее все правильно - S*rge 007 | n*rv
>>Возвращает кол-во символов отличия одной строки от другой : ) Видимо, здесь надо было писать так: возвращает кол-во символов отличия стоки B от строки A.nerv
Чебурашка стал символом олимпийских игр. А чего достиг ты? Тишина - самый громкий звук
Общий принцип таков: для 2-х строк формируем общий набор трид или диад (в общем Q-грамм, как пишут умные люди). Для каждой строки строится частотный профиль встречаемости каждой диады (как правило, 1 либо 0). Сумма этих значений и есть "площадь" профиля, т.е. просто кол-во полных диад в данной строке. А дальше, "площадь" пересекающейся части 2-х профилей делится на общую "площадь" их объединения. Это и есть наша метрика.
Quote (Формуляр)
Q-фактор (длина фрагмента сравнения) теперь настраивается через Const Q.
Quote (nerv)
В двух словах об алгоритме: собираются в словарь алфавиты (+ кол-во букв) одной и другой строки, а затем сравниваются между собой сами алфавиты и кол-во букв этих алфавитов.
Это не то же самое будет получаться, что и TextSimilarity() при Q=1 ?
Quote (Формуляр)
Общий принцип таков: для 2-х строк формируем общий набор трид или диад (в общем Q-грамм, как пишут умные люди). Для каждой строки строится частотный профиль встречаемости каждой диады (как правило, 1 либо 0). Сумма этих значений и есть "площадь" профиля, т.е. просто кол-во полных диад в данной строке. А дальше, "площадь" пересекающейся части 2-х профилей делится на общую "площадь" их объединения. Это и есть наша метрика.
Quote (Формуляр)
Q-фактор (длина фрагмента сравнения) теперь настраивается через Const Q.
Quote (nerv)
В двух словах об алгоритме: собираются в словарь алфавиты (+ кол-во букв) одной и другой строки, а затем сравниваются между собой сами алфавиты и кол-во букв этих алфавитов.
Это не то же самое будет получаться, что и TextSimilarity() при Q=1 ?Формуляр
Excel 2003 EN, 2013 EN
Сообщение отредактировал Формуляр - Пятница, 23.09.2011, 13:35
>>Это не то же самое будет получаться, что и TextSimilarity() при Q=1 ? Не знаю. А какой принцип сравнения этой ф-ции при Q=1? Можно в двух словах
Quote (Формуляр)
Цитата, Формуляр писал(а):Общий принцип таков: для 2-х строк формируем общий набор трид или диад (в общем Q-грамм, как пишут умные люди). Для каждой строки строится частотный профиль встречаемости каждой диады (как правило, 1 либо 0). Сумма этих значений и есть "площадь" профиля, т.е. просто кол-во полных диад в данной строке. А дальше, "площадь" пересекающейся части 2-х профилей делится на общую "площадь" их объединения. Это и есть наша метрика.
Quote (nerv)
>>Это не то же самое будет получаться, что и TextSimilarity() при Q=1 ? Не знаю. А какой принцип сравнения этой ф-ции при Q=1? Можно в двух словах
Quote (Формуляр)
Цитата, Формуляр писал(а):Общий принцип таков: для 2-х строк формируем общий набор трид или диад (в общем Q-грамм, как пишут умные люди). Для каждой строки строится частотный профиль встречаемости каждой диады (как правило, 1 либо 0). Сумма этих значений и есть "площадь" профиля, т.е. просто кол-во полных диад в данной строке. А дальше, "площадь" пересекающейся части 2-х профилей делится на общую "площадь" их объединения. Это и есть наша метрика.
Блин! Тут оказывается такая тусовка в интересующей меня теме, а извещения по мылу почему-то приходить перестали...
Серж, тебе не кажется, что тема очень интересная, но, к сожалению, не там автором положена: это ещё не готовое решение, а творческий процесс его выработки коллективным разумом
Может возможно топик переместить в основную дискуссионную ветку: "Вопросы по..."? А уж когда дотрём тему до готового решения, тогда её и можно будет нормально ЛАКОНИЧНО оформить (могу попробовать это сделать, ты же знаешь...) и выложить со всеми ссылками на авторов здесь, в "Готовых решениях"?
Блин! Тут оказывается такая тусовка в интересующей меня теме, а извещения по мылу почему-то приходить перестали...
Серж, тебе не кажется, что тема очень интересная, но, к сожалению, не там автором положена: это ещё не готовое решение, а творческий процесс его выработки коллективным разумом
Может возможно топик переместить в основную дискуссионную ветку: "Вопросы по..."? А уж когда дотрём тему до готового решения, тогда её и можно будет нормально ЛАКОНИЧНО оформить (могу попробовать это сделать, ты же знаешь...) и выложить со всеми ссылками на авторов здесь, в "Готовых решениях"?Alex_ST
С уважением, Алексей MS Excel 2003 - the best!!!
Сообщение отредактировал Alex_ST - Пятница, 23.09.2011, 21:57
Начну с того, что хотел бы выложить 2-ую версию HashCompare. Основная функция - HashCompare, вычисляет процент схожести двух строк. Доп. функция - Prepare. Готовит строку к сравнению: приводит к единому регистру (если таковой указан в аргументах ф-ции), "очищает" от "лишних" символов (кавычки, дефисы, точки, запятые, воскл. и вопр. знаки и т.п.), кот. в дальнейшем могут сказаться на сравнении. Доп. функция - EasyHash, преобразует заданное кол-во символов или слово целиком(что именно, зависит от выбора пользователя) в числовое представление. Т.е. сравниваются уже числа, а не строки. Уж не знаю, что быстрее, но почему бы и нет : )
Хотел бы поинтересоваться у Формуляра, почему (как) в примере ниже получается результат 33% при Q=3? маня 33% ваня ' ??? ман+аня = ван+аня ' мне сравнение видится так. По логике 50%
Начну с того, что хотел бы выложить 2-ую версию HashCompare. Основная функция - HashCompare, вычисляет процент схожести двух строк. Доп. функция - Prepare. Готовит строку к сравнению: приводит к единому регистру (если таковой указан в аргументах ф-ции), "очищает" от "лишних" символов (кавычки, дефисы, точки, запятые, воскл. и вопр. знаки и т.п.), кот. в дальнейшем могут сказаться на сравнении. Доп. функция - EasyHash, преобразует заданное кол-во символов или слово целиком(что именно, зависит от выбора пользователя) в числовое представление. Т.е. сравниваются уже числа, а не строки. Уж не знаю, что быстрее, но почему бы и нет : )
Хотел бы поинтересоваться у Формуляра, почему (как) в примере ниже получается результат 33% при Q=3? маня 33% ваня ' ??? ман+аня = ван+аня ' мне сравнение видится так. По логике 50%nerv
Технически возможно конечно, но ведь вопроса-то в топике нет...
Quote (Alex_ST)
Но и готового решения - тоже
Позволю, всё-таки, себе окаянство утверждать, что выложенные файлы (с 1 по 34 пост) являются готовыми решениями. Разной степени функциональности - это да, но любой из них может быть использован другим разработчиком в готовом виде. Я так понимю, что готовые решения, не подлежащие никакому дальнейшему обсуждению выкладываются не на форум, а в просто Готовые решения.
А вынести обсуждение задач нечёткого поиска вообще в отдельную тему - я только за. Проблема, как сформулировать в виде вопроса? - Пожалуйста: "Чего бы ещё такого придумать в области нечеткого поиска?" И в "вопросы" вписывается и "устоявшееся словосочетание" присутствует как "дОлжно"!
Quote (Serge_007)
Технически возможно конечно, но ведь вопроса-то в топике нет...
Quote (Alex_ST)
Но и готового решения - тоже
Позволю, всё-таки, себе окаянство утверждать, что выложенные файлы (с 1 по 34 пост) являются готовыми решениями. Разной степени функциональности - это да, но любой из них может быть использован другим разработчиком в готовом виде. Я так понимю, что готовые решения, не подлежащие никакому дальнейшему обсуждению выкладываются не на форум, а в просто Готовые решения.
А вынести обсуждение задач нечёткого поиска вообще в отдельную тему - я только за. Проблема, как сформулировать в виде вопроса? - Пожалуйста: "Чего бы ещё такого придумать в области нечеткого поиска?" И в "вопросы" вписывается и "устоявшееся словосочетание" присутствует как "дОлжно"! Формуляр
Хотел бы поинтересоваться у Формуляра, почему (как) в примере ниже получается результат 33% при Q=3? маня 33% ваня ' ??? ман+аня = ван+аня ' мне сравнение видится так. По логике 50%
Это следствие использования для сравнения общего базового алфавита (как и в вашем первоначальном варианте). Только элементами являются не отдельные знаки, а триады: ван, аня, ман. Сходство - 1 триада из трёх, т.е. 33%
Quote (nerv)
Хотел бы поинтересоваться у Формуляра, почему (как) в примере ниже получается результат 33% при Q=3? маня 33% ваня ' ??? ман+аня = ван+аня ' мне сравнение видится так. По логике 50%
Это следствие использования для сравнения общего базового алфавита (как и в вашем первоначальном варианте). Только элементами являются не отдельные знаки, а триады: ван, аня, ман. Сходство - 1 триада из трёх, т.е. 33%Формуляр
Позволю, всё-таки, себе окаянство утверждать, что выложенные файлы (с 1 по 34 пост) являются готовыми решениями. Разной степени функциональности - это да, но любой из них может быть использован другим разработчиком в готовом виде. Я так понимю, что готовые решения, не подлежащие никакому дальнейшему обсуждению выкладываются не на форум, а в просто Готовые решения.
Формуляр, спасибо! Я как раз ждал Вашего мнения, как автора топика. Решено - ЭТА тема остаётся здесь.
Quote (Формуляр)
Позволю, всё-таки, себе окаянство утверждать, что выложенные файлы (с 1 по 34 пост) являются готовыми решениями. Разной степени функциональности - это да, но любой из них может быть использован другим разработчиком в готовом виде. Я так понимю, что готовые решения, не подлежащие никакому дальнейшему обсуждению выкладываются не на форум, а в просто Готовые решения.
Формуляр, спасибо! Я как раз ждал Вашего мнения, как автора топика. Решено - ЭТА тема остаётся здесь.Serge_007
Серж, ну тогда хоть ты как "бугор" добавь пояснение (ну или как оно там называется то, что разъясняет заголовок?) к заголовку топика. Ну, что-то типа "Нечеткий поиск - варианты решения" Ведь Формуляр-то сам сделать этого не может за давностью времени создания топика.
Формуляр, ты не против?
Серж, ну тогда хоть ты как "бугор" добавь пояснение (ну или как оно там называется то, что разъясняет заголовок?) к заголовку топика. Ну, что-то типа "Нечеткий поиск - варианты решения" Ведь Формуляр-то сам сделать этого не может за давностью времени создания топика.
- после ответа удали, плиз Серёга, а ты не проверял: движок форума при "Поиске" буквы "ё" и "е" считает одинаковыми или нет? Это для меня вообще-то достаточно частая проблема когда что-то ищу: "Ё" или "Е" писать в искомых словах если по правилам Ё, а часто пишут Е
- после ответа удали, плиз Серёга, а ты не проверял: движок форума при "Поиске" буквы "ё" и "е" считает одинаковыми или нет? Это для меня вообще-то достаточно частая проблема когда что-то ищу: "Ё" или "Е" писать в искомых словах если по правилам Ё, а часто пишут ЕAlex_ST
И вообще, Серёга, ты не можешь почистить малость топик от не относящихся к теме обсуждений типа "как назвать", "что удалить" и т.п.? Ну, хотя бы начиная с 57-го поста и до этого включительно. Просто тема для многих интересная, а воды налили вокруг неё много...
И вообще, Серёга, ты не можешь почистить малость топик от не относящихся к теме обсуждений типа "как назвать", "что удалить" и т.п.? Ну, хотя бы начиная с 57-го поста и до этого включительно. Просто тема для многих интересная, а воды налили вокруг неё много...Alex_ST
С уважением, Алексей MS Excel 2003 - the best!!!
Сообщение отредактировал Alex_ST - Воскресенье, 25.09.2011, 12:20
а ты не проверял: движок форума при "Поиске" буквы "ё" и "е" считает одинаковыми или нет?
Не проверял.
Quote (Alex_ST)
тема для многих интересная, а воды налили вокруг неё много...
Эта "вода" даёт возможность топику быть в ТОП 10, а тема, как ты сам заметил, интересная, поэтому чистить ничего не буду, пока кол-во "продуктивных" постов не перевалит за 60.
Quote (Alex_ST)
а ты не проверял: движок форума при "Поиске" буквы "ё" и "е" считает одинаковыми или нет?
Не проверял.
Quote (Alex_ST)
тема для многих интересная, а воды налили вокруг неё много...
Эта "вода" даёт возможность топику быть в ТОП 10, а тема, как ты сам заметил, интересная, поэтому чистить ничего не буду, пока кол-во "продуктивных" постов не перевалит за 60.Serge_007