docs: def multipartite(corpus, featureset_names, min_weight=1, filters={}):
      """
      A network of papers and one or more featuresets.
      """
  
      pairs = Counter()
      node_type = {corpus._generate_index(p): {'type': 'paper'}
                   for p in corpus.papers}
      for featureset_name in featureset_names:
          ftypes = {}
  
          featureset = _get_featureset(corpus, featureset_name)
          for paper, feature in featureset.iteritems():
              if featureset_name in filters:
                  if not filters[featureset_name](featureset, feature):
                      continue
              if len(feature) < 1:
                  continue
              for f in list(zip(*feature))[0]:
                  ftypes[f] = {'type': featureset_name}
                  pairs[(paper, f)] += 1
          node_type.update(ftypes)
  
      return _generate_graph(nx.DiGraph, pairs, node_attrs=node_type,
                             min_weight=min_weight)