"Нечёткое" сравнение файлов по именам

Здесь обсуждается всё, что касается макросов.
Post Reply
User avatar
John Doe
Бюрократ
Posts: 12460
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 198 times

"Нечёткое" сравнение файлов по именам

Post by John Doe » Fri 09 Jan, 2015 14:20

Хочу представить макрос из англоязычной части форума: http://forum.farmanager.com/viewtopic.p ... 74#p126474

Задача: сравнить файлы на противоположных панелях, и выделить одноимённые, при этом игнорируя цифровые префиксы и различия в расширениях, например:

Code: Select all

03 Forgotten Hopes.flac | 06 Forgotten Hopes.mp3
1-14 Transacoustic.mp3  | 05 Transacoustic.ape
06 One Last Goodbye.mp3 | 2-05 One Last Goodbye.mp3

Запускается сравнение комбинацией ShiftDidive

Авторы: KlepetoX (идея и первоначальная реализация), Shmuel (оптимизация)
Я в свою очередь дооптимизировал процесс выделения файлов, что оказалось существенно для скорости выполнения при очень большом количестве файлов.

Кроме того, "нормализацию" имени перед сравнением я выделил в функцию norm (name) (для удобства модификации скрипта под специфические задачи).
Сейчас там пропускается неалфавитный префикс, и отбрасывается расширение, но легко добавить, например, унификацию пробелов_подчёркиваний-минусов, игнорирование артиклей, и т.д.
Attachments
FuzzyCompare.lua.7z
(652 Bytes) Downloaded 105 times

Xerox
Posts: 104
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 124 times

"Нечёткое" сравнение файлов по именам

Post by Xerox » Thu 31 Oct, 2019 18:07

довольно круто
А есть ли плагин или макрос для нечеткого ПОИСКА?
Выглядит как "почти тоже самое", может быть легко реализуемо?

User avatar
John Doe
Бюрократ
Posts: 12460
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 198 times

"Нечёткое" сравнение файлов по именам

Post by John Doe » Thu 31 Oct, 2019 20:49

Существуют готовые библиотеки, которые можно было бы приспособить.

Shtirla
Posts: 112
Joined: Wed 04 Mar, 2009 20:09
Has thanked: 9 times
Been thanked: 2 times

"Нечёткое" сравнение файлов по именам

Post by Shtirla » Fri 01 Nov, 2019 10:00

По названию тему подумал что здесь про алгоритм Дамерау-Ливенштайна, хотя с трудом представляю зачем это может понадобится при сравнении файлов.

buniak_a_h
Posts: 1128
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 82 times
Been thanked: 48 times
Contact:

"Нечёткое" сравнение файлов по именам

Post by buniak_a_h » Fri 01 Nov, 2019 15:48

Xerox wrote:
Thu 31 Oct, 2019 18:07
А есть ли плагин или макрос для нечеткого ПОИСКА?
Извините, если открою америку... В поиске в именах файлов допустимы регэкспы (если начать и закончить слэшами). Ну и, соответственно, можно найти что хотите

Xerox
Posts: 104
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 124 times

"Нечёткое" сравнение файлов по именам

Post by Xerox » Fri 01 Nov, 2019 15:53

John Doe
какие библиотеки? я профан
было бы очень даже замечательно, если бы кто-нибудь смог это сделать ..?

Xerox
Posts: 104
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 124 times

"Нечёткое" сравнение файлов по именам

Post by Xerox » Fri 01 Nov, 2019 16:03

buniak_a_h,
Америка это хорошо, но что делать с переставленными местами, или вообще пропущенными словами?
в остальном - pегексп это хорошо, но синтакс неуклюжий и в результате неюзабельно даже для тех кто знает синтаксис
На данный момент я так ищу:

Code: Select all

dir /s/b | find /i "sql" | find /i "linux" | find /i "install"
находит по словам в любом порядке, но тоже неуклюже

User avatar
John Doe
Бюрократ
Posts: 12460
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 198 times

"Нечёткое" сравнение файлов по именам

Post by John Doe » Fri 01 Nov, 2019 17:05


User avatar
HaRT
Moderator
Posts: 9105
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 90 times
Been thanked: 164 times

"Нечёткое" сравнение файлов по именам

Post by HaRT » Fri 01 Nov, 2019 17:10

Xerox wrote:
Fri 01 Nov, 2019 16:03
что делать с переставленными местами, или вообще пропущенными словами?
Я после ваших вопросов вчера поискал и нашёл fzf. Судя по описанию, должно хорошо решать вашу задачу (и массу других). Да, Винда поддерживается; нет, собирать самому не требуется.
Фар есть инструмент, а не нянька. © 2009 DrKnS

Xerox
Posts: 104
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 124 times

"Нечёткое" сравнение файлов по именам

Post by Xerox » Fri 01 Nov, 2019 18:24

buniak_a_h, Да, реально спасибо!
Pешает задачу, хоть и несколько коряво
Я 20 минут разгадывал как задать глубину поиска по субдиректориям.
Нет такого параметра, но, слава богам что ФЗФ хавает пайпинг и соответственно фильтрует его
Например для самого верхнего уровня:

Code: Select all

dir /b | fzf "--query=linux sql install"
Но для заданного количества подуровней нет, надо будет корячить скрипт, который будет медленный конечно.
Если ты/вы/кто-нибудь знаком с другими подобными решениями (команд-лайн)?
Буду очень благодарен

PS
Еще пока не допер как задать список junk-words в FZF.. ?
Кажется что невозможно
Last edited by Xerox on Fri 01 Nov, 2019 18:29, edited 3 times in total.

User avatar
HaRT
Moderator
Posts: 9105
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 90 times
Been thanked: 164 times

"Нечёткое" сравнение файлов по именам

Post by HaRT » Fri 01 Nov, 2019 18:41

Xerox wrote:
Fri 01 Nov, 2019 18:24
реально спасибо!
Не за что, хоть вы и ошиблись адресатом.
Xerox wrote:
Fri 01 Nov, 2019 18:24
как задать список junk-words в FZF
В условиях поиска напишите перед словом !. Вы это имели в виду?
Фар есть инструмент, а не нянька. © 2009 DrKnS

Xerox
Posts: 104
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 124 times

"Нечёткое" сравнение файлов по именам

Post by Xerox » Fri 01 Nov, 2019 18:48

HaRT, Не, это получается stop-words, a надо типа ignore-words
это чтобы, опять же, не морочиться с синтаксисом.
например, чтобы скопипастить имя файла, не заморачиваясь его чисткой от раширений и другого мусора, искать по meaning-words, игнорируя junk/ignore-words
Иначе junk и будет вылазить на топ-позицию
А следует бы задать один раз список игнорируемых слов, и усе, дальше расслабляемся.
(ну надеюсь что я себя обьяснил.. ?)
Last edited by Xerox on Fri 01 Nov, 2019 18:57, edited 2 times in total.

Xerox
Posts: 104
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 124 times

"Нечёткое" сравнение файлов по именам

Post by Xerox » Sat 09 Nov, 2019 08:57

Еще кстате AGREP делает что то вроде "гугля" по содержанию текстовых документов, т.е. не регексп, а по свободно заданным словам.
или если в него перенаправить список файлов, то может это отфильтровать

buniak_a_h
Posts: 1128
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 82 times
Been thanked: 48 times
Contact:

"Нечёткое" сравнение файлов по именам

Post by buniak_a_h » Sun 10 Nov, 2019 17:39

Xerox wrote:
Fri 01 Nov, 2019 16:03
buniak_a_h,
Америка это хорошо, но что делать с переставленными местами, или вообще пропущенными словами?
в остальном - pегексп это хорошо, но синтакс неуклюжий и в результате неюзабельно даже для тех кто знает синтаксис
На данный момент я так ищу:

Code: Select all

dir /s/b | find /i "sql" | find /i "linux" | find /i "install"
находит по словам в любом порядке, но тоже неуклюже
Вы навели меня на мысль. Я делал когда-то поиск с предпросмотром. Специально для такого случая доделал правила поиска файлов: теперь можно указать Lua-выражение в угловых скобках. Конкретно для Вашего случая вполне подходит, например, такое:
<name:lower():match("sql") and name:lower():match("linux") and name:lower():match("install")>

Post Reply

Return to “Обсуждение макросов”