Tengo un problema simple, de la vida real, que quiero resolver usando un enfoque OO. Mi disco duro es un desastre. Tengo 1.500.000 archivos, duplicados, carpetas duplicadas completas, etc.Mejor estrategia genérica para agrupar elementos usando múltiples criterios
El primer paso, por supuesto, es analizar todos los archivos en mi base de datos. No hay problemas hasta ahora, ahora tengo un montón de entradas agradables que están como "naturalmente agrupadas". Ejemplos de este simple agrupación se pueden obtener mediante consultas simples como:
- Dame todos los archivos más grandes que 100 MB
- Mostrar todos los archivos mayores de 3 días
- Sácame todos los archivos que terminan con docx
Pero ahora supongo que quiero encontrar grupos con un significado un poco más natural. Existen diferentes estrategias para esto, dependiendo del "caso de uso".
Supongamos que tengo la mala costumbre de poner todos mis archivos descargados primero en el escritorio. Luego los extraigo en la carpeta apropiada, sin eliminar el archivo ZIP siempre. Los muevo a una carpeta "ático". Para el sistema, para encontrar este grupo de archivos, un enfoque de búsqueda orientado al tiempo, quizás combinado con un "control si el ZIP es el mismo que la carpeta X" sería adecuado.
asumir otra mala costumbre de duplicación de archivos, tener alguna carpeta en la que "los archivos limpios" se encuentran en una estructura agradable, y otro carpetas desordenadas. Ahora mi carpeta limpia tiene 20 galerías de imágenes, mi carpeta desordenada tiene 5 duplicadas y 1 galería nueva. Un usuario humano podría identificar fácilmente esta lógica al ver "Oh, eso es solo duplicados, eso es uno nuevo, así que pongo el nuevo en la carpeta limpia y desecho todos los duplicados".
Así pues, ahora a llegar al punto:
Qué combinación de estrategias o patrones usaría para hacer frente a tal situación. Si encadenó filtros, el "más difícil" ganaría, y no tengo idea de cómo dejar que el sistema "pruebe" la combinación adecuada. Y me parece que es más que solo filtrado. Su agrupación dinámica combina múltiples criterios para encontrar los "mejores" grupos.
Un enfoque muy aproximada sería la siguiente:
- En principio, todos los archivos son iguales
- La primera no es tan "buena" del grupo, es el directorio
- Si usted es un grande, limpiar el directorio, usted gana puntos (nombres distribuidos uniformemente)
- Si todos los archivos tienen la misma fecha de creación, puede ser "autocreated"
- Si usted es un hijo de Archivos de programa, no me preocupo por usted en todos
- Si te mueves, grupo A, en el grupo C, ¿esto mejorar la "entropía"
¿Cuáles son los mejores patrones se ajusten a esta situación. Estrategia, filtros y tuberías, "Agrupación" ... ¡Cualquier comentario es bienvenido!
Editar en reacation de respuestas:
El enfoque de marcado: Por supuesto, el etiquetado pasado por la cabeza. Pero, ¿dónde dibujo la línea? Pude crear diferentes tipos de etiquetas, como InDirTag, CreatedOnDayXTag, TopicZTag, AuthorPTag. Estas etiquetas podrían estructurarse en una jerarquía, pero la pregunta de cómo agruparse se mantendría. Pero voy a pensar un poco y agregar mis ideas aquí ...
El comentario de la procrastinación: Sí, parece que sí. Pero los archivos son solo el ejemplo más simple que pude encontrar (y el más relevante en este momento). Es realmente parte de la imagen más grande de la agrupación de datos relacionados de forma dinámica. Tal vez debería haberlo mantenido más abstracto, para enfatizar esto: Estoy NO buscando un archivo de etiquetado herramienta o un motor de búsqueda, pero un algoritmo o patrón para abordar este problema ... (o mejor, ideas , como el etiquetado)
Chris
Gracias mamá;) Es una broma, ¡el amor duro también es bueno! –