Crab is a flexible, fast recommender engine for Python that integrates classic information filtering recommendation algorithms in the world of scientific Python packages (NumPy,SciPy, Matplotlib). The engine aims to provide a rich set of components from which you can construct a customized
... [More] recommender system from a set of algorithms. It is designed for scability, flexibility and performance making use of scientific optimized python packages in order to provide simple and efficient solutions that are acessible to everybody and reusable in various contexts: science and engineering. [Less]
PageTree CMS is an lightweight PHP5.3+ based Content Management System with a Modularized structure. It supports many Databases like mysql, sqlite, plain-text and our own database system. Back-ends can be fully customized.
django-recommenderAboutdjango-recommender is a pluggable that provides methods to work with collective user intelligence. It is a set of methods for getting recommendations using the opinion (votes) of the users compared with the other users' one. So instead of getting only the most popular items on
... [More] the system, the user can also discover the items that can interest him more. It also may use tags for content based recommendation, i.e., direct matching.
Most of the algorithms are based on Toby Segaran's book "Programming Collective Intelligence".
Before you startREQUIRED: This pluggable uses django-voting as basic system for user voting, and django-tagging for content-based recommendation, so they are required for its work.
WARNING: Don't use this plugable as it is with a huge amount of data, because it is really expensive in CPU and RAM. Instead, use caching or data clustering techniques for managing a limited set of data.
InstallationJust add 'recommender' to your INSTALLED_APPS in the settings.py project file. Run "./manage.py syncdb" and "./manage.py test recommender" to check the always interesting unit testing results.
Functionsget_best_items_for_user: This function will return a sorted list of pairs (value, item) containing the recommended items for a given user, based on the votes of the users. get_similar_users: This function will tell us which are the most similar users, based on the historical votes for similar items. get_best_users_for_item: This function will return the best candidates that may like a given item, based on votes. get_similar_items: The closest items, based on the votes of the users. get_content_based_recs: Get recommendations using a Content Based distance calculation, using tags for items and users. cluster_users: Clustering function to get groups of similar users cluster_items: Clustering function to get groups of similar events How to use itIt's required to use it with django-voting and django-tagging pluggables. To use the functions, just invoke them through the manager of the Recommender class: Recommender.objects.get_best_items_for_user(user, users, movies)
The recommendable models must have been voted, using django-voting. And the user and the items should be tagged with django-tagging.
All these functions have as arguments the user or item to evaluate, a user list and an item list. This is because is can be useful to pass just a limited list of users or items, in order to have a better performance, or better results, focusing the recommendation only on a controlled set of data.
The result of the functions is a list of pairs (value, recommendation), where the value is a float indicating how close the recommendation is (1 is closest), and the recommendation will be the asked user or item.
In case of clustering functions, what it returns is a list containing other lists with the ids of the elements to cluster, i.e, if you want to have 3 clusters of users, the list will contain 3 sublists with the user ids of each cluster.
Have a look at the unit testing file tests.py to know more about the functions.
Roadmap0.1. Create the Recommender, based on user votes. DONE 0.2. Add content based recommendations, using django-tagging pluggable DONE 0.3. Clustering techniques DONE 0.x. Add cache support [Less]
django-smsdjango-sms is a Django application designed to make sending SMS text messages as simple as sending an email.
version 0.1 was released 2008-11-12.
QuickstartAdd sms to your INSTALLED_APPS in settings.py:
INSTALLED_APPS = (
) Get in sync to
... [More] update the database and install the provided Carrier fixtures:
python manage.py syncdb And play with some code:
from django.contrib.auth.models import User
from django.contrib.contenttypes.models import ContentType
from sms.models import Carrier, ContentTypePhoneNumber, OutboundMessage
from sms.util import send_sms
# get a user
matt = User.objects.get(username="matt")
# get matt's cell phone carrier (at&t)
att = Carrier.objects.get(pk=7)
# attach a phone number to matt
matts_phone_number, created = ContentTypePhoneNumber.objects.get_or_create(
content_type = ContentType.objects.get_for_model(User),
object_id = matt.pk,
carrier = att,
phone_number = "123-123-1234"
# do stuff (probably very important!!!!) ...
# send matt an sms
msg = "omg im texting from python!",
from_address = "firstname.lastname@example.org",
recipient_list = [matts_phone_number],
fail_silently = False
How Do I Make This Work?SMS messages are sent with the sms.util.send_sms function, which is nearly identical to django.core.mail.send_mail. The key differences are that message subjects are not accepted and the recipient_list argument should be a list of ContentTypePhoneNumber objects.
django-sms provides two three models for users to work with:
Carrier, which represents the email-to-sms gateway provided by service providers. 61 carriers are provided for you in the fixtures, which should cover most everyone's needs.
2. ContentTypePhoneNumber, which provides:
phone number storage description of phone number - optional, meant for 'home' or 'work' 'primary phone number' definition - optional, useful if you use this for contact storage ContentTypePhoneNumber also has a custom manager, PhoneNumberManager, which allows
for User lookups via ContentTypePhoneNumber.objects.get_for_user(user_obj). This manager
will probably be fleshed out later, but thats it for now.
3. OutboundMessage, which acts as a message log. When a message is sent with sms.util.send_sms,
the Carrier, ContentTypePhoneNumber and dispatch time are logged. This is for pulling usage
information for both Carriers and ContentTypePhoneNumbers.
To pull data from the OutboundMessage logs, check out OutboundMessageManager. It has two helpers
now, but will also probably be expanded in the future:
most_popular_carriers, which pulls the most popular carriers in a given (optional) date range most_contacted_numbers, which pulls the most popular phone numbers is a given (optional) date range See their documentation for more.
What's ComingSignals. Maybe. Forms, if people request such. Seems like a ModelForm for the Carriers should suffice for now. Requests?
Words of Advice The data used in the fixtures was culled from Wikipedia. I didn't ask first, so I'm sorry for any toes I may have stepped on. Also, keep in mind that phone service providers are liable to shut off these services or make changes to format, rate limit, etc. on a whim and without notice. If you encounter any trouble, report them and we'll see what can happen. [Less]