Page 1 of 1

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

Posted: Fri 09 Jan, 2015 14:20
by John Doe
Хочу представить макрос из англоязычной части форума: 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) (для удобства модификации скрипта под специфические задачи).
Сейчас там пропускается неалфавитный префикс, и отбрасывается расширение, но легко добавить, например, унификацию пробелов_подчёркиваний-минусов, игнорирование артиклей, и т.д.

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

Posted: Thu 31 Oct, 2019 18:07
by Xerox
довольно круто
А есть ли плагин или макрос для нечеткого ПОИСКА?
Выглядит как "почти тоже самое", может быть легко реализуемо?

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

Posted: Thu 31 Oct, 2019 20:49
by John Doe
Существуют готовые библиотеки, которые можно было бы приспособить.

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

Posted: Fri 01 Nov, 2019 10:00
by Shtirla
По названию тему подумал что здесь про алгоритм Дамерау-Ливенштайна, хотя с трудом представляю зачем это может понадобится при сравнении файлов.

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

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

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

Posted: Fri 01 Nov, 2019 15:53
by Xerox
John Doe
какие библиотеки? я профан
было бы очень даже замечательно, если бы кто-нибудь смог это сделать ..?

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

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

Code: Select all

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

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

Posted: Fri 01 Nov, 2019 17:05
by John Doe

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

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

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

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

Code: Select all

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

PS
Еще пока не допер как задать список junk-words в FZF.. ?
Кажется что невозможно

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

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

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

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

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

Posted: Sat 09 Nov, 2019 08:57
by Xerox
Еще кстате AGREP делает что то вроде "гугля" по содержанию текстовых документов, т.е. не регексп, а по свободно заданным словам.
или если в него перенаправить список файлов, то может это отфильтровать

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

Posted: Sun 10 Nov, 2019 17:39
by buniak_a_h
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")>