docs: def extract(positive_fcs, negative_fcs, features=None):
      '''Takes a labeled set of feature collections (positive and negative)
         and the features wanted. And trains a Naive Bayes classifier on
         the underlying keys of the set of selected features features.
         If no features are selected, all are used.
  
         Returns two list of (keywords, strength) tuples ordered by strength. The
         first are feature keys that were predictive of the positive
         label and the second are the feature keys are were predictive
         of the negative label.
  
      ``*_fcs`` is the list of feature collections, positive label and
              negative label respectively.
  
      ``features`` designates which specific feature gets vectorized the
                 other features are ignored.
  
      '''
  
      # Vector of labels
      labels = np.array([1] * len(positive_fcs) + [0] * len(negative_fcs))
  
      # Used to convert the feature collection keys into a sklearn
      # compatible format
      v = DictVectorizer(sparse=False)
  
      D = list()
      for fc in (positive_fcs + negative_fcs):
          feat = StringCounter()
  
          if not fc:
              logger.warn('how did we get an empty fc? %r', fc)
  
          else:
              # The features used to pull the keys for the classifier
              for f in features:
                  feat += fc[f]
  
          D.append(feat)
  
      # Convert the list of Counters into an sklearn compatible format
      X = v.fit_transform(D)
  
      # Fit the sklearn Bernoulli Naive Bayes classifer
      clf = BernoulliNB()
      clf.fit(X, labels)
  
      # Extract the learned features that are predictive of the positive
      # and negative class
      positive_keywords = v.inverse_transform(clf.feature_log_prob_[1])[0]
      negative_keywords = v.inverse_transform(clf.feature_log_prob_[0])[0]
  
      pos_words = Counter(positive_keywords)
      neg_words = Counter(negative_keywords)
  
      ## make a list ordered by their weight
      pos_ordered = sorted(pos_words.items(),
                              key=operator.itemgetter(1), reverse=True)
      neg_ordered = sorted(neg_words.items(),
                              key=operator.itemgetter(1), reverse=True)
  
      return pos_ordered, neg_ordered