Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Простая метрика сходства текстовых строк - Страница 5 - Мир MS Excel

Старая форма входа
Модератор форума: _Boroda_, китин  
Мир MS Excel » Вопросы и решения » Готовые решения » Простая метрика сходства текстовых строк (Нечеткий поиск - варианты решения)
Простая метрика сходства текстовых строк
v__step Дата: Пятница, 17.02.2012, 20:07 | Сообщение № 81
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 225
Репутация: 27 ±
Замечаний: 0% ±

Комментарии к коду расширил и перенес на отдельный лист
Там не все просто, не все очевидно
Если мне дать пол-года, чтобы подзабыть, повторно разбираться буду долго
Вообще, не раз замечал, что именно собственные произведения восстанавливаю в памяти с наибольшим трудом. Многое со временем воспринимается как слишком заумное
К сообщению приложен файл: FuzzyMatchRegEx.zip (47.6 Kb)


С уважением, Владимир
 
Ответить
СообщениеКомментарии к коду расширил и перенес на отдельный лист
Там не все просто, не все очевидно
Если мне дать пол-года, чтобы подзабыть, повторно разбираться буду долго
Вообще, не раз замечал, что именно собственные произведения восстанавливаю в памяти с наибольшим трудом. Многое со временем воспринимается как слишком заумное

Автор - v__step
Дата добавления - 17.02.2012 в 20:07
Alex_ST Дата: Пятница, 17.02.2012, 20:37 | Сообщение № 82
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3206
Репутация: 609 ±
Замечаний: 0% ±

2003
Quote (v__step)
Скорее всего, основное назначение позднего связывания - обучение (так же, как и использование переменных без объявления типа)
Абсолютно не согласен!
Позднее связывание только вредит обучению, т.к. делает код хоть и более коротким, но зато труднее понимаемым. Да и подсказки о свойствах и методах после ввода точки при позднем связывании не показываются...
Точно так же как использование переменных без Option Explicit хотя и сокращает код, но сильно повышает вероятность ошибок и затрудняет поиск их причины.
Quote (v__step)
Если мне дать пол-года, чтобы подзабыть, повторно разбираться буду долго
Вообще, не раз замечал, что именно собственные произведения восстанавливаю в памяти с наибольшим трудом. Многое со временем воспринимается как слишком заумное
А вот это - таки-да! Именно из-за боязни возникновения затруднений через месяц-два после написания прогаммки при необходимости анализа своего кода (в общем-то, получается - из лени) я всегда и пишу достаточно подробные комментарии в своих процедурах.
(Просто лет 15-17 назад у меня был большой облом с халтурой, когда нужно было срочно за хорошие бабки модернизировать собственную программу на ассемблере, а в исходниках комментариев я не писал… sad Науки, как выяснилось, хватило на всю жизнь...)
А по поводу моей любви к позднему связыванию, так это не только из-за сокращения кода, но и из-за того, что я могу при этом надеяться, что написанные мною макросы, будучи выдернутыми (мною же, например) из книги-образца, лежащего в "копилке", и помещёными в другую, рабочую, наверняка продолжат работать.



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
Сообщение
Quote (v__step)
Скорее всего, основное назначение позднего связывания - обучение (так же, как и использование переменных без объявления типа)
Абсолютно не согласен!
Позднее связывание только вредит обучению, т.к. делает код хоть и более коротким, но зато труднее понимаемым. Да и подсказки о свойствах и методах после ввода точки при позднем связывании не показываются...
Точно так же как использование переменных без Option Explicit хотя и сокращает код, но сильно повышает вероятность ошибок и затрудняет поиск их причины.
Quote (v__step)
Если мне дать пол-года, чтобы подзабыть, повторно разбираться буду долго
Вообще, не раз замечал, что именно собственные произведения восстанавливаю в памяти с наибольшим трудом. Многое со временем воспринимается как слишком заумное
А вот это - таки-да! Именно из-за боязни возникновения затруднений через месяц-два после написания прогаммки при необходимости анализа своего кода (в общем-то, получается - из лени) я всегда и пишу достаточно подробные комментарии в своих процедурах.
(Просто лет 15-17 назад у меня был большой облом с халтурой, когда нужно было срочно за хорошие бабки модернизировать собственную программу на ассемблере, а в исходниках комментариев я не писал… sad Науки, как выяснилось, хватило на всю жизнь...)
А по поводу моей любви к позднему связыванию, так это не только из-за сокращения кода, но и из-за того, что я могу при этом надеяться, что написанные мною макросы, будучи выдернутыми (мною же, например) из книги-образца, лежащего в "копилке", и помещёными в другую, рабочую, наверняка продолжат работать.

Автор - Alex_ST
Дата добавления - 17.02.2012 в 20:37
v__step Дата: Пятница, 17.02.2012, 22:25 | Сообщение № 83
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 225
Репутация: 27 ±
Замечаний: 0% ±

Quote (Alex_ST)
Абсолютно не согласен!
Это хорошо - меня надо поменьше слушать (на самом деле я кавалер ордена Ивана Сусанина 3-х степеней biggrin )
Мне трудно даются импровизации и всякого рода блицы. Особенно на темы подобные раннему связыванию, которые для меня давно закрыты (ну почти закрыты)
Quote (Alex_ST)
лет 15-17 назад ... собственную программу на ассемблере
Вот это класс! А я все никак не второпаю, почему меня здесь всё время вроде бы как видят насквозь biggrin Здорово! Лёша, ты гигант!

Quote (nerv)
Жду предложений и идей
Саш, пойми меня правильно, мне надо чуток передохнуть после трудов праведных. Ты предлагаешь красивые, неожиданные и интересные решения, но я сейчас просто не в состоянии их переварить!


С уважением, Владимир

Сообщение отредактировал v__step - Пятница, 17.02.2012, 22:35
 
Ответить
Сообщение
Quote (Alex_ST)
Абсолютно не согласен!
Это хорошо - меня надо поменьше слушать (на самом деле я кавалер ордена Ивана Сусанина 3-х степеней biggrin )
Мне трудно даются импровизации и всякого рода блицы. Особенно на темы подобные раннему связыванию, которые для меня давно закрыты (ну почти закрыты)
Quote (Alex_ST)
лет 15-17 назад ... собственную программу на ассемблере
Вот это класс! А я все никак не второпаю, почему меня здесь всё время вроде бы как видят насквозь biggrin Здорово! Лёша, ты гигант!

Quote (nerv)
Жду предложений и идей
Саш, пойми меня правильно, мне надо чуток передохнуть после трудов праведных. Ты предлагаешь красивые, неожиданные и интересные решения, но я сейчас просто не в состоянии их переварить!

Автор - v__step
Дата добавления - 17.02.2012 в 22:25
Формуляр Дата: Суббота, 31.03.2012, 13:21 | Сообщение № 84
Группа: Друзья
Ранг: Ветеран
Сообщений: 832
Репутация: 255 ±
Замечаний: 0% ±

Excel 2003, 2013
Решил прикрутить нечёткое сравнение к сортировке списков.
Кстати, изменил принцип вычисления метрики в соответствии с замечанием nerv.

Кому интересно, что получилось, смотрите эту ссылку.

PS: Может, рег. выражения подошли бы для этого больше, но как-то я в них до конца так и не вник.


Excel 2003 EN, 2013 EN

Сообщение отредактировал Формуляр - Суббота, 31.03.2012, 13:22
 
Ответить
СообщениеРешил прикрутить нечёткое сравнение к сортировке списков.
Кстати, изменил принцип вычисления метрики в соответствии с замечанием nerv.

Кому интересно, что получилось, смотрите эту ссылку.

PS: Может, рег. выражения подошли бы для этого больше, но как-то я в них до конца так и не вник.

Автор - Формуляр
Дата добавления - 31.03.2012 в 13:21
Alex_ST Дата: Суббота, 31.03.2012, 22:43 | Сообщение № 85
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3206
Репутация: 609 ±
Замечаний: 0% ±

2003
Саш, надо искать Володю-v__step . Он большой любитель и знаток регэкспов.



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеСаш, надо искать Володю-v__step . Он большой любитель и знаток регэкспов.

Автор - Alex_ST
Дата добавления - 31.03.2012 в 22:43
v__step Дата: Воскресенье, 01.04.2012, 19:28 | Сообщение № 86
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 225
Репутация: 27 ±
Замечаний: 0% ±

Я никуда не пропадал!
У Вас чудесная, глубокая тема
Я всё посмотрю, но сразу замечу, что когда немного "вклинился" в Вашу задачку, с большим трудом нащупал тот алгоритм, который подходит для регэкспов
И то, чуда не случилось - эффективность революционно не увеличилась
Сейчас немного позанимался "фитнесом" - нашёл несколько ошибок, их надо срочно подправить (файл ведь народ качает)


С уважением, Владимир
 
Ответить
СообщениеЯ никуда не пропадал!
У Вас чудесная, глубокая тема
Я всё посмотрю, но сразу замечу, что когда немного "вклинился" в Вашу задачку, с большим трудом нащупал тот алгоритм, который подходит для регэкспов
И то, чуда не случилось - эффективность революционно не увеличилась
Сейчас немного позанимался "фитнесом" - нашёл несколько ошибок, их надо срочно подправить (файл ведь народ качает)

Автор - v__step
Дата добавления - 01.04.2012 в 19:28
nerv Дата: Понедельник, 06.08.2012, 13:12 | Сообщение № 87
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

Всем привет! )

В продолжение темы нечетного поиска и сравнения строк:
1. функция для "сравнения" строк разной длинны
2. функция для поиска наилучшего совпадения

InText ("сравнение" строк разной длинны)
Параметры:
string1 - строка (обязательный)
string2 - строка (обязательный)
section - количество символов, по которому определяется совпадение (не обязательный). По умолчанию 3
compare - режим сравнения (не обязательный). По умолчанию vbTextCompare
Возвращает:
процент вхождения строки меньшей длинны в строку большей длинны.

FindBetterMatch (поиск наилучшего совпадения)
Параметры:
array/range - массив или диапазон
string - строка (обязательный)
section - количество символов, по которому определяется совпадение (не обязательный). По умолчанию 3
compare - режим сравнения (не обязательный). По умолчанию vbTextCompare
Возвращает:
массив, состоящий из двух элементов:
0 - наилучшее совпадение
1 - процент вхождения строки меньшей длинны в строку большей длинны

p.s.: изначально была мысль искать вхождение одной строки в другую с учетом позиции слов. В данной реализации порядок слов не важен, хотя на мой взгляд это не совсем правильно.

UPD: увеличена точность сравнения за счет отсева дублирующих совпадений, добавлены комментарии
К сообщению приложен файл: InText-FindBett.xls (62.0 Kb)


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba


Сообщение отредактировал nerv - Понедельник, 06.08.2012, 19:09
 
Ответить
СообщениеВсем привет! )

В продолжение темы нечетного поиска и сравнения строк:
1. функция для "сравнения" строк разной длинны
2. функция для поиска наилучшего совпадения

InText ("сравнение" строк разной длинны)
Параметры:
string1 - строка (обязательный)
string2 - строка (обязательный)
section - количество символов, по которому определяется совпадение (не обязательный). По умолчанию 3
compare - режим сравнения (не обязательный). По умолчанию vbTextCompare
Возвращает:
процент вхождения строки меньшей длинны в строку большей длинны.

FindBetterMatch (поиск наилучшего совпадения)
Параметры:
array/range - массив или диапазон
string - строка (обязательный)
section - количество символов, по которому определяется совпадение (не обязательный). По умолчанию 3
compare - режим сравнения (не обязательный). По умолчанию vbTextCompare
Возвращает:
массив, состоящий из двух элементов:
0 - наилучшее совпадение
1 - процент вхождения строки меньшей длинны в строку большей длинны

p.s.: изначально была мысль искать вхождение одной строки в другую с учетом позиции слов. В данной реализации порядок слов не важен, хотя на мой взгляд это не совсем правильно.

UPD: увеличена точность сравнения за счет отсева дублирующих совпадений, добавлены комментарии

Автор - nerv
Дата добавления - 06.08.2012 в 13:12
Паттттт Дата: Пятница, 14.09.2012, 12:56 | Сообщение № 88
Группа: Гости
Уважаемые, а почему вы сравниваете по строкам? А если слова идут в разнобой, и сортировка может не выровнять ситуацию. Надо сравнивать по столбцам.
 
Ответить
СообщениеУважаемые, а почему вы сравниваете по строкам? А если слова идут в разнобой, и сортировка может не выровнять ситуацию. Надо сравнивать по столбцам.

Автор - Паттттт
Дата добавления - 14.09.2012 в 12:56
Паттттт Дата: Пятница, 14.09.2012, 13:18 | Сообщение № 89
Группа: Заблокированные
Ранг: Новичок
Сообщений: 43
Репутация: -17 ±
Замечаний: 100% ±

Quote (nerv)
Паттттт, покажи, как надо Паттттт, покажи, как надо nerv

Ну вот смотри файл. Там ты ника не отсортируешь столбцы так, чтобы в одной строке находились оба текста для сравнения, и твои проги не принменимы. А таких текстов много.
К сообщению приложен файл: 8914730.xls (61.5 Kb)


Сообщение отредактировал Паттттт - Пятница, 14.09.2012, 13:19
 
Ответить
Сообщение
Quote (nerv)
Паттттт, покажи, как надо Паттттт, покажи, как надо nerv

Ну вот смотри файл. Там ты ника не отсортируешь столбцы так, чтобы в одной строке находились оба текста для сравнения, и твои проги не принменимы. А таких текстов много.

Автор - Паттттт
Дата добавления - 14.09.2012 в 13:18
Паттттт Дата: Пятница, 14.09.2012, 13:20 | Сообщение № 90
Группа: Заблокированные
Ранг: Новичок
Сообщений: 43
Репутация: -17 ±
Замечаний: 100% ±

Помогите, пожалуйста.
У меня есть два столбца с текстом, например В и С(смотрите файл в прикреплении). Текст в столбцах похожий, но всё же отличается. Например В первом столбце (В) в первой ячейке написано "Абито ОАО". Во втором столбце (С) написано "ОАО "Абитоо". Эти два варианта текста одинаковы, только В столбце С ОАО находится перед словом, само слово взято в кавычки, и в нём написана лишняя буква "о". Но всё же эти тексты обозначают одну и ту же компанию Абито, и, следовательно совпадают. Мне нужна функция или макрос VBA которые могли бы сравнить оба столбца определять такие тексты (как описанный выше) как совпадающие (или частично совпадающие с указанием процента совпадения) и желательно, чтобы указывался Порядковый номер ячейки, например, выписывался из столбца А (если левее обоих столбцов в столбце (А) написать порядковые номера ячеек (Пронумеровать ячейки попорядку сверху вниз), наппример в моём файле (файл прикреплён) в столбце (D)(или в выделенном мной столбце) функция или макрос, к примеру, нашли совпадающими тексты "Абито ОАО" в столбце (В) и "ОАО "Абитоо" в столбце (С) и написали в выделенном третьем столбце
цифру "1", что означет (Это вам пояснение, а в функцию или макрос это загонять не надо, пусть просто пишет цифры из столбца (А)), что совпадение слову "ОАО "Абитоо" столбца (С) найдено в ячейке 1 столбца (В), цифра 1 взята из столбца (А). Или можно вместо цифр из столбца (А) писать адрес ячейки (в нашем примере вместо цифры "1" можно написать "В3".
Помогите, пожалуйста.
Файл прикреплён.

А мне надо, чтобы потом я ориентируясь на данные номеров ячеек или их адресов (смотри текст выше), я, например, мог бы сопоставлять по ним цифровые значения в столбцах (С) и (Е)(см. файл в прикреплении) (ну то есть соответствует ли числа в ячейках столбцов (С) и (Е), соседних с ячейками столбцов (В) и (D) в которых были найдены совпадающими тексты (По моему файлу совпадает текст в ячейках (В3) и (D6), следовательно мне надо в выделенный столбец выписать либо цыфру из столбца (А) (в нашем случае "1" или адрес ячейки (В3), чтобы потом функциями эксель сравнить значения ячеек (С3) и (Е6), и потом растянуть функцию, и она срванила бы все числа, соответствующие совпадающим текстам в столбцах (В) и (D)
Поэтому я прошу написать функцию или макрос, которые при нахождении совпадения в столбцах (В) и (D) в выделенном столбце писали бы либо номер ячейки столбца (В)(в которой было найдено совпадение текста с текстом в столбце (D)), взятый из столбца (А)(в моём примере "1"), либо адрес ячейки столбца (В)(в которой было найдено совпадение текста с текстом в столбце (D)(в моём пример (В3))
Помогите, пожалуйста.
 
Ответить
СообщениеПомогите, пожалуйста.
У меня есть два столбца с текстом, например В и С(смотрите файл в прикреплении). Текст в столбцах похожий, но всё же отличается. Например В первом столбце (В) в первой ячейке написано "Абито ОАО". Во втором столбце (С) написано "ОАО "Абитоо". Эти два варианта текста одинаковы, только В столбце С ОАО находится перед словом, само слово взято в кавычки, и в нём написана лишняя буква "о". Но всё же эти тексты обозначают одну и ту же компанию Абито, и, следовательно совпадают. Мне нужна функция или макрос VBA которые могли бы сравнить оба столбца определять такие тексты (как описанный выше) как совпадающие (или частично совпадающие с указанием процента совпадения) и желательно, чтобы указывался Порядковый номер ячейки, например, выписывался из столбца А (если левее обоих столбцов в столбце (А) написать порядковые номера ячеек (Пронумеровать ячейки попорядку сверху вниз), наппример в моём файле (файл прикреплён) в столбце (D)(или в выделенном мной столбце) функция или макрос, к примеру, нашли совпадающими тексты "Абито ОАО" в столбце (В) и "ОАО "Абитоо" в столбце (С) и написали в выделенном третьем столбце
цифру "1", что означет (Это вам пояснение, а в функцию или макрос это загонять не надо, пусть просто пишет цифры из столбца (А)), что совпадение слову "ОАО "Абитоо" столбца (С) найдено в ячейке 1 столбца (В), цифра 1 взята из столбца (А). Или можно вместо цифр из столбца (А) писать адрес ячейки (в нашем примере вместо цифры "1" можно написать "В3".
Помогите, пожалуйста.
Файл прикреплён.

А мне надо, чтобы потом я ориентируясь на данные номеров ячеек или их адресов (смотри текст выше), я, например, мог бы сопоставлять по ним цифровые значения в столбцах (С) и (Е)(см. файл в прикреплении) (ну то есть соответствует ли числа в ячейках столбцов (С) и (Е), соседних с ячейками столбцов (В) и (D) в которых были найдены совпадающими тексты (По моему файлу совпадает текст в ячейках (В3) и (D6), следовательно мне надо в выделенный столбец выписать либо цыфру из столбца (А) (в нашем случае "1" или адрес ячейки (В3), чтобы потом функциями эксель сравнить значения ячеек (С3) и (Е6), и потом растянуть функцию, и она срванила бы все числа, соответствующие совпадающим текстам в столбцах (В) и (D)
Поэтому я прошу написать функцию или макрос, которые при нахождении совпадения в столбцах (В) и (D) в выделенном столбце писали бы либо номер ячейки столбца (В)(в которой было найдено совпадение текста с текстом в столбце (D)), взятый из столбца (А)(в моём примере "1"), либо адрес ячейки столбца (В)(в которой было найдено совпадение текста с текстом в столбце (D)(в моём пример (В3))
Помогите, пожалуйста.

Автор - Паттттт
Дата добавления - 14.09.2012 в 13:20
Alex_ST Дата: Пятница, 14.09.2012, 14:30 | Сообщение № 91
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3206
Репутация: 609 ±
Замечаний: 0% ±

2003
2 nerv:
Саш, каюсь, это я на Планете дал анониму ссылку на этот топик чтобы он здесь сам подобрал подходящее ему решение.
Я думал, что человек разбирающийся и сам сможет прицепить одну из выкладывавшихся здесь процедур к своим целям...
А он почему-то решил, что здесь можно что-то у кого-то ПОТРЕБОВАТЬ. angry
Твой вопрос "СКОЛЬКО?" при такой постановке вопроса абсолютно логичен.



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
Сообщение2 nerv:
Саш, каюсь, это я на Планете дал анониму ссылку на этот топик чтобы он здесь сам подобрал подходящее ему решение.
Я думал, что человек разбирающийся и сам сможет прицепить одну из выкладывавшихся здесь процедур к своим целям...
А он почему-то решил, что здесь можно что-то у кого-то ПОТРЕБОВАТЬ. angry
Твой вопрос "СКОЛЬКО?" при такой постановке вопроса абсолютно логичен.

Автор - Alex_ST
Дата добавления - 14.09.2012 в 14:30
Alex_ST Дата: Пятница, 14.09.2012, 15:32 | Сообщение № 92
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3206
Репутация: 609 ±
Замечаний: 0% ±

2003
Я не пойму, чем Вам не нравится FuzzyVLOOKUP ?
Может, Вы просто не умеете ей пользоваться?
Тогда смотрите пример.
К сообщению приложен файл: FuzzyVLOOKUP.xls (58.0 Kb)



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеЯ не пойму, чем Вам не нравится FuzzyVLOOKUP ?
Может, Вы просто не умеете ей пользоваться?
Тогда смотрите пример.

Автор - Alex_ST
Дата добавления - 14.09.2012 в 15:32
Паттттт Дата: Пятница, 14.09.2012, 16:06 | Сообщение № 93
Группа: Заблокированные
Ранг: Новичок
Сообщений: 43
Репутация: -17 ±
Замечаний: 100% ±

Quote (Alex_ST)
Я не пойму, чем Вам не нравится FuzzyVLOOKUP ?
Может, Вы просто не умеете ей пользоваться?
Тогда смотрите пример. Я не пойму, чем Вам не нравится FuzzyVLOOKUP ?
Может, Вы просто не умеете ей пользоваться?
Тогда смотрите пример.Alex_ST

Она:
1. Жутко тормозит
2. Имеет не 100% результат.
Кстати я хочу предложить свой вариант этой функции.
Смотри файл. (чтобы не было путанницы твою функцию я переименовал в ИНТЕЛЛЕКТУАЛЬНОЕ_СРАВНЕНИЕ
Обе функции неправильно находят соответствие слову "Новатек", А твоя ещё и неправильно находит соответствие слову "Бобель-Вобель"
К сообщению приложен файл: 8314136.xls (73.5 Kb)


Сообщение отредактировал Паттттт - Пятница, 14.09.2012, 16:07
 
Ответить
Сообщение
Quote (Alex_ST)
Я не пойму, чем Вам не нравится FuzzyVLOOKUP ?
Может, Вы просто не умеете ей пользоваться?
Тогда смотрите пример. Я не пойму, чем Вам не нравится FuzzyVLOOKUP ?
Может, Вы просто не умеете ей пользоваться?
Тогда смотрите пример.Alex_ST

Она:
1. Жутко тормозит
2. Имеет не 100% результат.
Кстати я хочу предложить свой вариант этой функции.
Смотри файл. (чтобы не было путанницы твою функцию я переименовал в ИНТЕЛЛЕКТУАЛЬНОЕ_СРАВНЕНИЕ
Обе функции неправильно находят соответствие слову "Новатек", А твоя ещё и неправильно находит соответствие слову "Бобель-Вобель"

Автор - Паттттт
Дата добавления - 14.09.2012 в 16:06
Формуляр Дата: Воскресенье, 16.09.2012, 20:47 | Сообщение № 94
Группа: Друзья
Ранг: Ветеран
Сообщений: 832
Репутация: 255 ±
Замечаний: 0% ±

Excel 2003, 2013
Quote (Паттттт)
1. Жутко тормозит 2. Имеет не 100% результат.
Идея, что всё должно работать быстро и угадывать мысли пльзователя оригинальностью не блещет.
Quote (Паттттт)
Кстати я хочу предложить свой вариант этой функции.
Так и не понял в чём преимущество вашего варианта.

Но сама задачка в качестве полигона - неплоха, раз оказалась всем функциям не по зубам.
По этому поводу довинтил кой-чего в своём варианте textSimilarity().
Ввёл коэффициент "балансировки" F, который регулирует влияние "лишних" (есть только в text2) диад по сравнению с "недостающими" (есть только в text1).
При F = 0 textSimilarity() работает как метрика вхождения text1 в text2.
При F = 1 работает как прежний вариант, то есть учитывает отличия в обе стороны в равной степени.
При этом для любого F < 1 функция должна терять свою симметричность.
А поскоьку симметричность была мне дорога, пришлось искусственно её восстанавливать: грубо говоря, за образец всегда берётся меньшая из строк.
В ф-циях поиска на базе TxtSimilarityList(), наоборот используется несимметричное сравнение. Поэтому для достоверного отобрахения результата добавил в textSimilarity() режим асимметричного сравнения (при asym = true).
В прилагаемом варианте длина Q-граммы Q=2 и балансировочный коэффициент F=0.5
К сообщению приложен файл: 4611638.xls (64.5 Kb)


Excel 2003 EN, 2013 EN

Сообщение отредактировал Формуляр - Воскресенье, 16.09.2012, 20:50
 
Ответить
Сообщение
Quote (Паттттт)
1. Жутко тормозит 2. Имеет не 100% результат.
Идея, что всё должно работать быстро и угадывать мысли пльзователя оригинальностью не блещет.
Quote (Паттттт)
Кстати я хочу предложить свой вариант этой функции.
Так и не понял в чём преимущество вашего варианта.

Но сама задачка в качестве полигона - неплоха, раз оказалась всем функциям не по зубам.
По этому поводу довинтил кой-чего в своём варианте textSimilarity().
Ввёл коэффициент "балансировки" F, который регулирует влияние "лишних" (есть только в text2) диад по сравнению с "недостающими" (есть только в text1).
При F = 0 textSimilarity() работает как метрика вхождения text1 в text2.
При F = 1 работает как прежний вариант, то есть учитывает отличия в обе стороны в равной степени.
При этом для любого F < 1 функция должна терять свою симметричность.
А поскоьку симметричность была мне дорога, пришлось искусственно её восстанавливать: грубо говоря, за образец всегда берётся меньшая из строк.
В ф-циях поиска на базе TxtSimilarityList(), наоборот используется несимметричное сравнение. Поэтому для достоверного отобрахения результата добавил в textSimilarity() режим асимметричного сравнения (при asym = true).
В прилагаемом варианте длина Q-граммы Q=2 и балансировочный коэффициент F=0.5

Автор - Формуляр
Дата добавления - 16.09.2012 в 20:47
Паттттт Дата: Понедельник, 17.09.2012, 11:13 | Сообщение № 95
Группа: Заблокированные
Ранг: Новичок
Сообщений: 43
Репутация: -17 ±
Замечаний: 100% ±

Формуляр
Твоя функция - это как раз то, что мне нужно. Огромнейшее-приогромнейшее тебе спасибо! Удачи тебево всём!
 
Ответить
СообщениеФормуляр
Твоя функция - это как раз то, что мне нужно. Огромнейшее-приогромнейшее тебе спасибо! Удачи тебево всём!

Автор - Паттттт
Дата добавления - 17.09.2012 в 11:13
Паттттт Дата: Понедельник, 17.09.2012, 13:09 | Сообщение № 96
Группа: Заблокированные
Ранг: Новичок
Сообщений: 43
Репутация: -17 ±
Замечаний: 100% ±

Quote (nerv)
твой вариант функции? О чем ты? Ты не написал ни строчки кода. Переименовал? Ах, ну да, теперь ты автор.

Читай внимательно. Переименнованный вариант - Ваш, непереименнованный - мой.
 
Ответить
Сообщение
Quote (nerv)
твой вариант функции? О чем ты? Ты не написал ни строчки кода. Переименовал? Ах, ну да, теперь ты автор.

Читай внимательно. Переименнованный вариант - Ваш, непереименнованный - мой.

Автор - Паттттт
Дата добавления - 17.09.2012 в 13:09
Паттттт Дата: Понедельник, 17.09.2012, 13:11 | Сообщение № 97
Группа: Заблокированные
Ранг: Новичок
Сообщений: 43
Репутация: -17 ±
Замечаний: 100% ±

Quote (nerv)

Результат, полученный на данный момент, можно было достичь с помощью моей функции из этого поста. Или я ошибаюсь или ты невнимательно смотрел?nerv

Твояфункция сравнивает построчно, а у меня слова идут в разнобой, и сравнивать нужо ячейку со столбцом.
 
Ответить
Сообщение
Quote (nerv)

Результат, полученный на данный момент, можно было достичь с помощью моей функции из этого поста. Или я ошибаюсь или ты невнимательно смотрел?nerv

Твояфункция сравнивает построчно, а у меня слова идут в разнобой, и сравнивать нужо ячейку со столбцом.

Автор - Паттттт
Дата добавления - 17.09.2012 в 13:11
nerv Дата: Понедельник, 17.09.2012, 13:21 | Сообщение № 98
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

Quote (Паттттт)
(смотри файл в прикреплении)

которого нет

Quote (Паттттт)
непереименнованный - мой.

твой? laugh

Quote (Паттттт)
Твояфункция сравнивает построчно, а у меня слова идут в разнобой, и сравнивать нужо ячейку со столбцом.

если ты не умеешь пользоваться, я не виноват

Предлагаю модераторам удалить из темы все, начиная с этого поста по последний, за исключением этого


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba


Сообщение отредактировал nerv - Понедельник, 17.09.2012, 13:23
 
Ответить
Сообщение
Quote (Паттттт)
(смотри файл в прикреплении)

которого нет

Quote (Паттттт)
непереименнованный - мой.

твой? laugh

Quote (Паттттт)
Твояфункция сравнивает построчно, а у меня слова идут в разнобой, и сравнивать нужо ячейку со столбцом.

если ты не умеешь пользоваться, я не виноват

Предлагаю модераторам удалить из темы все, начиная с этого поста по последний, за исключением этого

Автор - nerv
Дата добавления - 17.09.2012 в 13:21
Alex_ST Дата: Понедельник, 17.09.2012, 13:40 | Сообщение № 99
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3206
Репутация: 609 ±
Замечаний: 0% ±

2003
Саня (Формуляр) ,
очень здорово работает!
Но ты настолько углубился в тему лингвистического анализа вообще и нечёткого поиска в частности, что твой лексикон стал не понятен простым смертным cry
Слова в комментариях типа "Рекурсивное заполнение сортированного списка из двоичного дерева", "Выравнивание двоичного дерева по глубине" и т.д. тебе, я не сомневаюсь, понятны, а для меня, например - набор знакомых слов, сложенных в предложение, не имеющее никакого смысла biggrin
Аналогично и с
Quote (Формуляр)
Ввёл коэффициент "балансировки" F, который регулирует влияние "лишних" (есть только в text2) диад по сравнению с "недостающими" (есть только в text1)
cry
Ты не мог бы свой замечательный (на самом деле!) файл из крайнего поста почистить от следов разработки и причесать так, чтобы "на виду" была пара основных функций (я так понимаю, что это TextSimilarity и FindBestMatchTxt), а остальные - Private?



С уважением,
Алексей
MS Excel 2003 - the best!!!


Сообщение отредактировал Alex_ST - Понедельник, 17.09.2012, 13:42
 
Ответить
СообщениеСаня (Формуляр) ,
очень здорово работает!
Но ты настолько углубился в тему лингвистического анализа вообще и нечёткого поиска в частности, что твой лексикон стал не понятен простым смертным cry
Слова в комментариях типа "Рекурсивное заполнение сортированного списка из двоичного дерева", "Выравнивание двоичного дерева по глубине" и т.д. тебе, я не сомневаюсь, понятны, а для меня, например - набор знакомых слов, сложенных в предложение, не имеющее никакого смысла biggrin
Аналогично и с
Quote (Формуляр)
Ввёл коэффициент "балансировки" F, который регулирует влияние "лишних" (есть только в text2) диад по сравнению с "недостающими" (есть только в text1)
cry
Ты не мог бы свой замечательный (на самом деле!) файл из крайнего поста почистить от следов разработки и причесать так, чтобы "на виду" была пара основных функций (я так понимаю, что это TextSimilarity и FindBestMatchTxt), а остальные - Private?

Автор - Alex_ST
Дата добавления - 17.09.2012 в 13:40
nerv Дата: Понедельник, 17.09.2012, 14:06 | Сообщение № 100
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

Если кого-то интересует мое мнение, то этого
Quote (Формуляр)
При F = 0 textSimilarity() работает как метрика вхождения text1 в text2.
При F = 1 работает как прежний вариант, то есть учитывает отличия в обе стороны в равной степени.

с лихвой хватит. Все остальное считаю бессмысленным.

стоит в примере заменить
Пусконаладочная компания "ПУСК"
на
Пусконаладочная компания "ПУСК" добавим еще немного слов
и функция перестанет работать. Зачем изгаляться, если приблизительная длинна сравниваемых фрагментов нам заранее не известна (и вряд ли будет)?

Более того, исходя из аргумента выше, ставлю под сомнение надобность F = 1. Считаю, что вся эта метрика сводиться к "вхождение меньшей строки в большую". Остальное танцы с бубном smile


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba


Сообщение отредактировал nerv - Понедельник, 17.09.2012, 14:07
 
Ответить
СообщениеЕсли кого-то интересует мое мнение, то этого
Quote (Формуляр)
При F = 0 textSimilarity() работает как метрика вхождения text1 в text2.
При F = 1 работает как прежний вариант, то есть учитывает отличия в обе стороны в равной степени.

с лихвой хватит. Все остальное считаю бессмысленным.

стоит в примере заменить
Пусконаладочная компания "ПУСК"
на
Пусконаладочная компания "ПУСК" добавим еще немного слов
и функция перестанет работать. Зачем изгаляться, если приблизительная длинна сравниваемых фрагментов нам заранее не известна (и вряд ли будет)?

Более того, исходя из аргумента выше, ставлю под сомнение надобность F = 1. Считаю, что вся эта метрика сводиться к "вхождение меньшей строки в большую". Остальное танцы с бубном smile

Автор - nerv
Дата добавления - 17.09.2012 в 14:06
Мир MS Excel » Вопросы и решения » Готовые решения » Простая метрика сходства текстовых строк (Нечеткий поиск - варианты решения)
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!