У меня есть простая, реальная проблема из жизни, которую я хочу решить с помощью ОО подхода. Мой жесткий диск - беспорядок. У меня 1.500.000 файлов, дубликаты, полные дубликаты папок и т. Д. ...
Первым шагом, конечно, является разбор всех файлов в моей базе данных. Пока никаких проблем, теперь у меня есть много хороших записей, которые как бы "сгруппированы по природе". Примеры этой простой группировки можно получить с помощью простых запросов, таких как:
- Дайте мне все файлы размером более 100 МБ
- Показать все файлы старше 3 дней
- Получите мне все файлы, заканчивающиеся на docx
Но теперь предположим, что я хочу найти группы с немного более естественным значением. Для этого существуют разные стратегии, в зависимости от «варианта использования».
Предположим, у меня плохая привычка ставить все загруженные файлы первыми на рабочий стол. Затем я извлекаю их в соответствующую папку, не удаляя файл ZIP всегда. Я перемещаю их в «чердак» папку. Для системы, чтобы найти эту группу файлов, подойдет ориентированный на время поиск , возможно, в сочетании с «проверкой, совпадает ли ZIP с папкой X».
Предположим еще одну плохую привычку дублировать файлы, имея какую-то папку, в которой «чистые файлы» расположены в хорошей структуре , и еще грязные папки . Теперь в моей чистой папке 20 галерей изображений, в моей грязной папке 5 дублированных и 1 новая галерея. Пользователь может легко распознать эту логику, увидев: «О, это просто дубликаты, это новый, поэтому я помещаю новый в чистую папку и удаляю все дубликаты».
Итак, теперь перейдем к точке:
Какую комбинацию стратегий или шаблонов вы бы использовали для решения такой ситуации. Если бы я включил фильтры в цепочку, победил бы «самый сложный», и я понятия не имел, как позволить системе «проверить» подходящую комбинацию. И мне кажется, это больше, чем просто фильтрация. Его динамическая группировка путем объединения нескольких критериев для поиска «лучших» групп.
Один очень грубый подход был бы таким:
- В начале все файлы равны
- Первая, не очень «хорошая» группа - это каталог
- Если вы большой чистый каталог, вы зарабатываете очки (равномерно распределенные имена)
- Если все файлы имеют одну и ту же дату создания, возможно, вы «созданы автоматически»
- Если вы являетесь ребенком из Program-Files, я вас совершенно не волную
- Если бы я переместил вас, группу A, в группу C, это улучшило бы "энтропию"
Каковы лучшие модели, подходящие для этой ситуации. Стратегия, Фильтры и Трубы, «Группировка» .. Любые комментарии приветствуются!
Редактировать в реакции на ответы:
Метод тегирования:
Конечно, пометка пришла мне в голову. Но где я могу провести черту. Я мог бы создать различные типы тегов, такие как InDirTag, CreatedOnDayXTag, TopicZTag, AuthorPTag. Эти теги могут быть структурированы в виде иерархии, но вопрос о том, как группировать, останется. Но я подумаю над этим и добавлю свои идеи сюда ..
Комментарий прокрастинации:
Да, это звучит так. Но файлы - только самый простой пример, который я мог придумать (и самый актуальный на данный момент). На самом деле это часть общей картины группировки связанных данных динамическими способами. Возможно, мне следовало бы сделать это более абстрактным, чтобы подчеркнуть это: я НЕ ищу метку файла инструмент или поисковую систему , но алгоритм или шаблон чтобы подойти к этой проблеме ... (или лучше, идеи, как тегирование)
Chris