Altered bag-of-words classifier to return class probabilities for each review.

Rather than a list of predicted labels, the method bag_of_words_probabilities returns a dictionary that maps tuples of the form (r_id, c) to the probability that review denoted by r_id belongs to class c, as determined by the classifier.  This will be useful in building a graph of reviews and classes and defining the edge weights according to the values of these probabilities.
Implemented Linear-chain CRF.

reviewcrf.py implements the training of a Linear-chain CRF model and the tagging of test reviews using pycrfsuite, a python wrapper for the popular CRFSuite fast CRF implementation from Naoaki Okazaki.  Training takes pairs of review of the same business by friends and labels the later review as belonging to either the same sentiment class as the earlier review ("1") or the opposite class ("0").  Current attributes are limited to date and number of mutual friends between users.
Using pygraph, implemented graph formulation to solve optimal classification problem using maximum flow/min-cut.

reviewgraph.py builds a directed graph whose nodes consist of reviews in the test set.  The source node is a node for the "negative" class and the sink node is a node for the "positive" class.  Edges connecting review nodes to class nodes have weights as determined by the bag of words classifier in baselineclassifier.py.  Review nodes for reviews of the same business by friends are connected by edges with weights determined by the Linear-chain CRF implementation.  Classification is performed using the Edmonds-Karp max-flow/min-cut algorithm.
Combines the various parts of the system - baseline classifier, linear-chain CRF, directed graph - to classify yelp reviews.
Added method to remove from the user dictionary all users without any reviews in the test or training sets after data cleansing.