Clustered Models
Posté par fantomas, le 22 décembre 2008 sous Développement
Je vous parlais récemment de l'application Django Clustered Sitemap, servant à établir la correspondance entre 2 objets sur des projets Django.
Après une review globale du code et l'ajout de certaines fonctionnalités, j'ai changé le nom du projet en Clustered models car il ne correspondait plus vraiment à la philosophie du projet.
La première modification à été d'ajouter une nouvelle version du sitemap, mais cette fois ci en nuage 2D.
Le code et les vues ont été rendu génériques pour en faciliter l'intégration et l'extensibilité.
Une feature intéressante est qu'il est possible de réutiliser la configuration des vues générique pour effectuer des groupements.
Ensuite un templatetags à été ajouté pour pouvoir voir les models associés à un autre model. Le résultat est qu'il est désormais possible de voir les articles associés sur le blog. 
Le tout étant très facile a installer, voici un exemple du code pour réaliser mes sitemaps mélant les flatpages et les articles, dans le fichier urls.py du projet.
from clustered_models import VectorBuilder from clustered_models.clusterers import DimensionalClusterer from clustered_models.clusterers import HierarchicalClusterer
from django.contrib.flatpages.models import FlatPage
entry_conf = {'queryset': Entry.published.all(),
'fields': ['content', 'title', 'excerpt']}
flatpage_conf = {'queryset': FlatPage.objects.all(),
'fields': ['title', 'content']}
vector = VectorBuilder(entry_conf, flatpage_conf)
urlpatterns += patterns('',
(r'^sitemap/$', 'clustered_models.views.clustered_view',
{'vector': vector, 'clusterer': HierarchicalClusterer}),
(r'^cloud-sitemap/$', 'clustered_models.views.clustered_view',
{'vector': vector, 'clusterer': DimensionalClusterer}),
)
Je ne releaserais le module que si il y a un minimum d'intérêt pour ce projet, donc à vos commentaires
.
:
django
intelligence
python
http://shao197.willbreak.it/
lundi 22 décembre 2008 a 13:22
C'est gourmand en ressources le calcul de correspondance ? Est-ce que tu refais ce calcul à chaque fois pour afficher les articles associés ?
http://fantomas.willbreak.it/
mardi 23 décembre 2008 a 15:31
Effectivement, cela peut être très gourmand en ressources.
Cela dépends surtout de la quantité de données à analyser, mais il y a 2 points gourmands en ressources.
Le premier est la construction du jeu de données qui va devoir fouiller sur toutes les entrées en base, pour ensuite effectuer un premier tri sur le contenu.
Une méthode de cache est déjà implémentée pour résoudre ce problème, en prenant en compte les mises à jours sur la base de données.
Le second point gourmand est le calcul de proximité entre les objets. Idem un système de cache a été mis en place pour ne calculer qu'une seule fois les données.
Evidemment pour la taille de mon blog, ce calcul ne prend que peu de temps. Mais il faudra voir à changer de méthode sur une plus grosse volumétrie.