Страницы: 1 2 След.
RSS
создать макрос удаления дубликатов по 70-80% совпадения символов
 
Добрый вечер всем.
Появилась надобность в макросе который работает как обычный инструмент удаления дубликатов в екселе, только он удаляет дубли которые идентичны на 100%.. можно ли сделать все тоже самое только, что бы он удалял похожие дубли на 70-80%.

Как должно получаться:
есть три слова:
"процент"
"процентов"
"процентная"
он проверяет все слова ПО НАЧАЛУ слова, на сколько они похожи, берет последнее слово, т.к оно самое длинное, от него берет 80% и смотрит если остальные под них подходят.

Приложил пример с тем как это должно выглядеть.

P.S
Все должно работать с кириллицей и латинницей
Ну и если слова одинаковые на 100% то понятно, что удаляются. А цифры должны удаляться только по 100% совпадению. Т.к есть даты и года. К примеру 2018 год и 201 номер. может совпасть и удалить год
Изменено: Fsociety_ - 11.04.2019 22:33:49
 
Доброе время суток.
Подскажите, пожалуйста, с каких пор на форуме пустой файл стал считаться примером? % - это всегда отношение, тогда процент совпадения - это отношение чего к чему?
 
Цитата
Андрей VG написал:
с каких пор на форуме пустой файл стал считаться примером?
Андрей, это для развития фантазии :-)
По вопросам из тем форума, личку не читаю.
 
Андрей,
это пример того, как все исходные совпали более чем на 80% и были удалены
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Ігор Гончаренко написал:
как все исходные совпали более чем на 80% и были удалены
Игорь, спасибо! Не сообразил. День, проведённый на изучении методологии Agile подкосил соображалку :(
 
Цитата
Андрей VG написал:
% - это всегда отношение, тогда процент совпадения - это отношение чего к чему?
процент соотношения схожести слов. к примеру  есть 4 слова. все слова схожи на 80% от начала слова и до конца, т.е у них общий корень. значит они похожи, и это одно слово, значит все слова удаляем кроме одного самого короткого. в результате останется только слово "процент" т.к оно короче всех
"процент"
"процента"
"процентов"
"процентная"

Цитата
Андрей VG написал:
Подскажите, пожалуйста, с каких пор на форуме пустой файл стал считаться примером?
прошу прощения, не тот файл подсунул)))
Цитата
Ігор Гончаренко написал:
это пример того, как все исходные совпали более чем на 80% и были удалены
это в точку))
Исправляюсь, приложил нормальный файл
Изменено: Fsociety_ - 11.04.2019 21:59:33
 
Fsociety_, а зачем на форуме останется ненужный файл? Свои сообщения можно редактировать, в том числе удалять/добавлять файлы. Следовало заменить файл в стартовом сообщении.
 
Юрий М,Ну так удобней будет остальным, не нужно подниматься вверх темы) Исправил.
 
Fsociety_, и для Вас:
после того как написаны все нужные слова, как бы сформулирован вопрос, прежде чем нажать кнопку ОТПРАВИТЬ, перечитайте внимательно что Вы написали и попытайтесь проанализировать сколько в описании задачи чуши, а сколько собственно описания задачи
если чушь составляет 70-80% написанного - смело все удаляйте.

понимаете, Вы ничего не говорите о том что собираетесь сравнивать и как, ни слова нет о методике определения этих самых 70-80% совпадений и наконец в задаче удалить "дубли", ничего не сказано какое из двух совпавших на 70-80% значение удалять???
видите-ли, слова "морг" и "торг" похожи на 75% (они не только на 75% состоят из одинаковых букв, но и буквы еще находятся на тех же местах. Вот оно - заветное совпадение 75%.! отлично, ВНИМАНИЕ, а теперь вопрос: что из них следует удалить, а что оставить?

насколько бы труден не был этот процесс, думайте, пожалуйста.
удачи!
Изменено: Ігор Гончаренко - 11.04.2019 22:08:14
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко,не нужно так агрессировать, я в 6 сообщении подробнее еще описал. И ваше сравнение "торг, морг" не логично в моем примере. Т.к что бы найти похожие слова.. вы как их читаете? Слева на право.. и видите что корень одинаковый но окончание другое. Так и тут. Нужно смотреть слова слева на право. Берется самое длинное и найденных схожих слов и от него берется процент 80% в таком случае:

1."проц" - меньше 50% - не подходит - значит это другое слово
2."процент"схоже на 80% - тоже гуд подходит
3."процентов" - схоже на 90% - это гуд подходит
4."процентная" - самое длинное 100% от него проверяем остальные два слова которые похожи на корню

значит итог: остается только 2 слово т.к оно самое короткое из 3 последних вариантов. 1 вариант вообще другое слово оно будет сравниватся с другими опхожими словами и т.д весь остальной массив слов.

p/s и тем более я оставил пример, в нем видно разницу до и после - это по поводу какие слова должны оставаться

Прошу прощения если не понятно объяснил или что то не так сказал. Думал это понятно.
Изменено: Fsociety_ - 11.04.2019 22:50:22
 
А по какому алгоритму из слов воду и воды нужно оставить воду?
 
Юрий М, Хороший вопрос, я как раз над этим задумался. Прошу прощения за непонятную тему. Но объяснить уже становиться тяжело. И вот в таких случаях ранее приведенный алгоритм уже не подойдет. Я уже придумал новый алгоритм работы с учетом вот такой спорной ситуации. Сейчас распишу пример и выложу
 
Цитата
Fsociety_ написал:
Берется самое длинное и найденных схожих слов и от него берется процент 80% в таком случае:
Как вы определили, что слова схожи перед тем, как начали считать процент совпадения? Пока это похоже на рассуждение, что было раньше - курица или яйцо? Каким образом они найдены? Если вопрос только об удалении, то не увидел в файле пометки против слов, какие из них те самые найденные похожие.

Однокоренные
Домашний
Дома
Дому
Есть тут дубли?
Изменено: Андрей VG - 11.04.2019 23:38:02
 
Цитата
Fsociety_ написал:
Слева на право.. и видите что корень одинаковый но окончание другое
торТ и торГ
слева на право?
что делать с этим???

мой предыдущий пост был о том, что есть у Вас задача - сформулируйте ее
задача не стандартная, чисто Ваша идея, опишите свою идею
Вы можете ничего не знать о том как пишется код, но у Вас есть свое представление о задаче и свое представление о способе решения? обьясните его людям, которые первый раз прочитали даже не  условия задачи, а просто описание неких немерений, и пытаются понять а в чем же суть этой задачи?
Изменено: Ігор Гончаренко - 11.04.2019 23:49:37
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, да я вас понял, простите за недопонимание. Как я и писал выше, подход придется немного изменить в связи с некоторыми нюансами. Приложу более грамотно расписанный пример. А точнее даже видео задачу.. т.к такое вряд ли в тексте получиться расписать.
 
Здравствуйте, коллеги! Для начала можно порекомендовать автору ознакомиться, например, с этой статьей.
Владимир
 
sokol92,Спасибо за материал, уже изучаю, дали мне пищу для размышления, уже есть некоторые идеи. Завтра скину пример как пока временно реализовать нужно, и буду дальше размышлять над улучшением алгоритма поиска. В том простом видео как я ранее представил думаю охватит большинство слов, конечно не все но пока и такой вариант сойдет. Я непонятно изложил задачу, завтра уже подробно ее распишу и более понятно. Еще раз спасибо всем за подсказки. Пока никуда не убегайте, завтра приложу более подробную информацию! =)
 
и об этом я то же писал: "думайте!"
чем детальнее продумана постановка задачи, тем больше вероятность получить точный ответ, а не практически бесполезные с точки зрения конечного решения отписки
Вам отписки нужны или решение проблемы, от Вас очень сильно зависит, что Вы будете получать в ответ
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Добрый вечер, снял небольшое видео с примерным алгоритмом работы макроса. Ну в крайнем случае так как я это вижу.
Сразу прошу прощения за качество звука, я не супер диктор конечно, но я постарался подробнее описать как я примерно все это вижу.

Большая просьба если у вас есть какие то идеи или знаете как можно это улучшить, то буду только рад.
Видео минут на 10.. так что рекомендую взять чаю перед просмотром, надеюсь не слишком занудное вышло)

https://youtu.be/OCpqU9axcTM
Изменено: Fsociety_ - 12.04.2019 22:50:59
 
Прослушал начало. Вывод - процентов и процентиль равны. Дальше слушать не стал.
Игорь уже задавал вопрос про торт и торг - ответа нет.
Сделайте случайную выборку на 200-300 первых уникальных слов по вашим данным и по ним стройте рассуждения с проверкой, а выполняется ваш алгоритм?
Изменено: Андрей VG - 13.04.2019 18:37:27
 
Андрей VG, если бы досмотрели до конца, то увидели бы ответ на вопрос Игоря. И алгоритм описанный мной по моему самый оптимальный.
 
Цитата
Fsociety_ написал:
если бы досмотрели до конца, то увидели бы ответ на вопрос Игоря
Не увидел. Только отсутствие анализа на базе реальной репрезентативной выборки, а не двух предложенных последовательностей. Это даже не учитывая особенности русского языка, например, вспомните гор гар. По вашим рассуждениям - удалению подлежит только строка с серой заливкой. Вы именно так хотите?
Изменено: Андрей VG - 13.04.2019 22:05:37
 
Андрей VG, нет, вы недопоняли, в вашем примере, должны быть удалены все три последних варианта, кроме первого. Макрос сверять должен каждые слова друг с другом и стараться найти как можно больше совпадений. Т.е из 4 слов как в примере - он проходится по каждому слева на право и видит что символы сходятся почти до самого конца этих слов, он для себя фиксирует где начинается различие хотя бы в одном слове от остальных, и если это различие началось после условно - 50% каждого слова, то значит эти слова скорее всего одинаковы. Попробуйте еще раз посмотреть видео, я там старался максимально подробно объяснить принцип действия. Представьте что макрос это сканер, сканер как работает, он лазером, одной линией проходится по тексту и считывает каждую букву. Вот и тут. Вот у нас есть столбец B в нем массив слов. Он как сканер проходится по всем словам и старается найти во всех словах найбольшее кол-во совпадений, что бы понять какие из них имеют общий корень. И если этих совпадений больше 50% каждого слова, то скорее всего это одно слово проскланенное в нескольких видах.

P/s приложил пример с одной из своих рабочих выгрузок. В столбце А исходные данные, в столбце С я поставил пример что должно получиться. Присмотритесь к данным особенно после 60 строки, там нагляднее видно тип моих данных. В моих данных всегда много однокоренных слов склоненных в разных видах. И вот от таких дублей нужно избавляться.
 
Цитата
Fsociety_ написал:
различие началось после условно - 50% каждого слова, то значит эти слова скорее всего одинаковы.
Тогда не будет работать вторая часть - проблема, описанная Игорем. Имеем
торг, торт, торты, торту.
Вы предлагали решать её через наибольшую общую начальную подстроку. В данном случае торт. Тогда, торг - это другое слово. Но, в этом случае - проблема с процент, процента, процентам, процентами.
Если идти от 50%, тогда из торг, торт, торты, торту - должно остаться, учитывая приоритет окончания, только торг. Так? Как вы предполагаете решать эту проблему?
И совет, логику рассуждений стройте не от макрос думает, знает, предполагает, а от: если условие выполняется макрос делает это иначе делает вот это. Полагаю, такой стиль рассуждений поможет понять проблему.
Изменено: Андрей VG - 14.04.2019 10:59:35
 
Андрей VG, ответ на вопрос с торг торт я уже давал в видео, я же говорю посмотрите до конца внимательно) Эта проблема сама собой будет частично решаться, т.к в моем диапазоне фраз который я вам скинул в примере будут такие же слова в других склонения и таким алгоритмом проблема сама решится и макрос сам распознает слово торг как отдельное, а торт отнесет к другим тортам если они будут. но если будут два слова торг и торт, и не будет больше других слов, то да в этом случае он будет делать дележку между ними. Но как я говорил в видео, такие ситуации редкие и мой массив данных почти к каждому слову имеет однокоренное с другим склонением. Смотрите как получается:
Есть слова:
ТорГ
торт
торты
торта
тортов
тортусик
торту

Мои данные почти всегда и почти все слова имеют однокоренных друзей как в данном примере. И по алгоритму работы макроса описанному мной, случай с торг и торт полностью невилируется и невозможен т.к слово торт он будет сравнивать со словами торты* тортов* и т.д потому что у слова торт* и торты* больше сходства чем со словом торг*. И только в очень редких случаях если у слова ТОРТ и ТОРГ не будет однокоренных слов, вот только тогда макрос затупит с этими словами и все.
Изменено: Fsociety_ - 14.04.2019 12:17:27
 
Цитата
Fsociety_ написал:
торт он будет сравнивать со словами торты* тортов* и т.д потому что у слова торт* и торты* больше сходства чем со словом торг*.
вы читали?
Цитата
Андрей VG написал:
Вы предлагали решать её через наибольшую общую начальную подстроку. В данном случае торт. Тогда, торг - это другое слово
решите в этом ключе
Цитата
Андрей VG написал:
процент, процента, процентам, процентами
раскладку я приводил. Оба подхода не совместны
 
Цитата
Fsociety_ написал:
что бы он удалял похожие дубли на 70-80%.
были темы в сети
Простая метрика сходства текстовых строк
Индексирование списка на базе нечёткого поиска
сейчас листать не буду - но вроде там что-то видела и по процентам... в любом случае на том сайте видела  8) процент совпадения
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Цитата
Андрей VG написал: вы читали?
я все читал, и на все ответил. С этим вопросом я Вам уже три раза ответил и видео тоже есть ответ. В моем случае учитывая то что в моих данных скорее всего будут слова совподающие либо с ТОРТом либо с ТОРГом и этот вопрос сам решается. Так как торт имеет больше совпадения со словом Торта* а не торг*.

Цитата
Андрей VG написал: решите в этом ключе Цитата Андрей VG  написал:процент, процента, процентам, процентами
в чем тут конкретно вопрос? данные варианты решаются так же как и в моем примере. В данном случае просто немного больше совпадений, но смысл в том что главное что бы совпадений было не меньше 50% слова, а тут их больше, значит макрос правильно распознает слова как одного корня.

Цитата
JeyCi написал: были темы в сети
ну я те темы изучил, там совсем не то что нужно мне и работает так. Да и в основном там обсуждаются формулы и функции поиска между двумя списками. Мне это точно не подходит. В моем случае нужно находить слова с максимальным совпадением дабы находить их так сказать по корню и удалять однокоренные слова имеющие разную форму склонения.
Но могу поблагодарить за инициативу, вторая Вами приведенная ссылка дала мне маленький ответ на назревавший недавно вопрос который я хотел здесь в скором будущем освещать в тему. Возможно у меня получится адаптировать ту функцию под свои нужды и решу вопросик, на этом Спасибо!)
 
Цитата
Fsociety_ написал:
в чем тут конкретно вопрос?
На какой части начальной подстроки для этих слов должен остановиться макрос и почему? Пример, что произойдёт, если искать максимальное пересечение я приводил в #22. Дополню по вашей словарной базе: челябинск, челябинске, челябинский, челябинского, челябинска, челябинская - что будет? И по ней же. Почему, стоит и стоят - указаны как разные слова? 3 / 5 * 100% как бы более 50% ;) , только не пишите, что это стоит общее со стоимость 4 / 9 * 100% < 50%. Аналогично, почему оставлены (при существовании слова электро) электролюкс 64%, электромуфта 58%, электростали 58%? Вы так видите?

Получил комментарий, что нужно учитывать совпадение более 50%, но тогда торг будет перебивать торт и производные торта.
Изменено: Андрей VG - 15.04.2019 10:25:06
 
Андрей VG, 50% цифра условная, т.к золотую середину нужно будет искать уже в самом готовом коде методом тыка. да торг и торт я уже 5 раз ответил) этот случай невилируем почти всегда. максимум 5% таких случаев у меня будут. Пример он на то и пример. делал на скорую руку, чисто хотел показать пример данных и что примерно должно остаться.
Страницы: 1 2 След.
Наверх