オブジェクト指向アプローチを使用して解決したい、単純で実際の問題があります。ハードドライブがめちゃくちゃです。1.500.000 個のファイル、重複、完全な重複フォルダーなどがあります...
もちろん、最初のステップは、すべてのファイルをデータベースに解析することです。これまでのところ問題はありません。「自然にグループ化された」素敵なエントリがたくさんあります。この単純なグループ化の例は、次のような単純なクエリを使用して取得できます。
- 100MB を超えるすべてのファイルを受け取る
- 3 日以上経過したすべてのファイルを表示する
- 末尾が docx のファイルをすべて取得する
しかしここで、もう少し自然な意味を持つグループを見つけたいとします。「ユースケース」に応じて、これにはさまざまな戦略があります。
ダウンロードしたすべてのファイルを最初にデスクトップに置くという悪い習慣があるとします。次に、常に ZIP ファイルを削除せずに、それらを適切なフォルダーに抽出します。それらを「屋根裏」フォルダーに移動します。システムにとって、このファイルのグループを見つけるには、おそらく「ZIPが同じかどうかを確認してからフォルダーX」を組み合わせた時間指向の検索アプローチが適しています。
ファイルを複製する別の悪い習慣を想定し、「クリーンなファイル」が適切な構造で配置されているフォルダーと、別の乱雑なフォルダーを持っています。これで、きれいなフォルダーには 20 個の画像ギャラリーがあり、乱雑なフォルダーには 5 つの複製ギャラリーと 1 つの新しいギャラリーがあります。人間のユーザーは、「ああ、それはすべて重複しているだけです。それは新しいものなので、新しいフォルダーをクリーン フォルダーに入れて、すべての重複を破棄します」と表示することで、このロジックを簡単に識別できます。
それでは、要点を説明します。
このような状況に対処するために、どの戦略またはパターンの組み合わせを使用しますか。フィルターをチェーンすると、「最も難しい」ものが勝ちます。システムに適切な組み合わせを「テスト」させる方法がわかりません。そして、それは単なるフィルタリング以上のものであるように私には思えます。複数の基準を組み合わせて「最適な」グループを見つける動的なグループ化。
非常に大まかなアプローチの1つは次のとおりです。
- 最初は、すべてのファイルは等しい
- 最初の、あまり「良くない」グループはディレクトリです
- あなたが大規模でクリーンなディレクトリであれば、ポイントを獲得できます (均等に分散された名前)
- すべてのファイルの作成日が同じ場合、「自動作成」されている可能性があります
- あなたがProgram-Filesの子供なら、私はあなたのことをまったく気にしません
- グループAのあなたをグループCに移動すると、「エントロピー」が改善されますか
この状況に最適なパターンは何ですか。ストラテジー、フィルター、パイプ、「グループ化」..どんなコメントでも大歓迎です!
回答に応じて編集:
タグ付けのアプローチ: もちろん、タグ付けは頭をよぎりました。しかし、どこで線を引けばよいのでしょうか。InDirTag、CreatedOnDayXTag、TopicZTag、AuthorPTag など、さまざまな種類のタグを作成できます。これらのタグは階層構造で構成できますが、グループ化の方法は疑問のままです。しかし、私はこれを少し考えて、ここに私の洞察を追加します..
先延ばしのコメント: はい、そのように聞こえます。しかし、これらのファイルは、私が思いつくことができる最も単純な例にすぎません (そして現時点で最も関連性があります)。実際には、関連するデータを動的にグループ化する全体像の一部です。おそらく、これを強調するために、もっと抽象的にしておくべきでした。私は、ファイルのタグ付けツールや検索エンジンを探しているのではなく、この問題に取り組むためのアルゴリズムやパターンを探しています... (または、タグ付けのようなアイデア)
クリス