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

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

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

Post 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) (для удобства модификации скрипта под специфические задачи).
Сейчас там пропускается неалфавитный префикс, и отбрасывается расширение, но легко добавить, например, унификацию пробелов_подчёркиваний-минусов, игнорирование артиклей, и т.д.
Attachments
FuzzyCompare.lua.7z
(652 Bytes) Downloaded 137 times
User avatar
Xerox
Posts: 395
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 9 times

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

Post by Xerox »

довольно круто
А есть ли плагин или макрос для нечеткого ПОИСКА?
Выглядит как "почти тоже самое", может быть легко реализуемо?
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

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

Post by John Doe »

Существуют готовые библиотеки, которые можно было бы приспособить.
Shtirla
Posts: 117
Joined: Wed 04 Mar, 2009 20:09
Has thanked: 10 times
Been thanked: 2 times

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

Post by Shtirla »

По названию тему подумал что здесь про алгоритм Дамерау-Ливенштайна, хотя с трудом представляю зачем это может понадобится при сравнении файлов.
User avatar
buniak_a_h
Posts: 4234
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 642 times
Contact:

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

Post by buniak_a_h »

Xerox wrote: Thu 31 Oct, 2019 18:07 А есть ли плагин или макрос для нечеткого ПОИСКА?
Извините, если открою америку... В поиске в именах файлов допустимы регэкспы (если начать и закончить слэшами). Ну и, соответственно, можно найти что хотите
User avatar
Xerox
Posts: 395
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 9 times

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

Post by Xerox »

John Doe
какие библиотеки? я профан
было бы очень даже замечательно, если бы кто-нибудь смог это сделать ..?
User avatar
Xerox
Posts: 395
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 9 times

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

Post by Xerox »

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

Code: Select all

dir /s/b | find /i "sql" | find /i "linux" | find /i "install"
находит по словам в любом порядке, но тоже неуклюже
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

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

Post by John Doe »

User avatar
HaRT
Moderator
Posts: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 times

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

Post by HaRT »

Xerox wrote: Fri 01 Nov, 2019 16:03 что делать с переставленными местами, или вообще пропущенными словами?
Я после ваших вопросов вчера поискал и нашёл fzf. Судя по описанию, должно хорошо решать вашу задачу (и массу других). Да, Винда поддерживается; нет, собирать самому не требуется.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
Xerox
Posts: 395
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 9 times

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

Post by Xerox »

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: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 times

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

Post by HaRT »

Xerox wrote: Fri 01 Nov, 2019 18:24 реально спасибо!
Не за что, хоть вы и ошиблись адресатом.
Xerox wrote: Fri 01 Nov, 2019 18:24 как задать список junk-words в FZF
В условиях поиска напишите перед словом !. Вы это имели в виду?
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
Xerox
Posts: 395
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 9 times

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

Post by Xerox »

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.
User avatar
Xerox
Posts: 395
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 9 times

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

Post by Xerox »

Еще кстате AGREP делает что то вроде "гугля" по содержанию текстовых документов, т.е. не регексп, а по свободно заданным словам.
или если в него перенаправить список файлов, то может это отфильтровать
User avatar
buniak_a_h
Posts: 4234
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 642 times
Contact:

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

Post 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")>
Post Reply

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