docs: def select(self, selector, index_only=False):
          """
          Retrieves a subset of :class:`.Paper`\s based on selection criteria.
  
          There are a variety of ways to select :class:`.Paper`\s.
  
          .. code-block:: python
  
             >>> corpus = Corpus(papers)
             >>> corpus[0]    # Integer indices yield a single Paper.
             <tethne.classes.paper.Paper object at 0x103037c10>
  
             >>> corpus[range(0,5)]  # A list of indices yields a list of Papers.
             [<tethne.classes.paper.Paper object at 0x103037c10>,
              <tethne.classes.paper.Paper object at 0x10301c890>,
              ...
              <tethne.classes.paper.Paper object at 0x10302f5d0>]
  
             >>> corpus[('date', 1995)]  # Select based on indexed fields.
             [<tethne.classes.paper.Paper object at 0x103037c10>,
              <tethne.classes.paper.Paper object at 0x10301c890>,
              ...
              <tethne.classes.paper.Paper object at 0x10302f5d0>]
  
             >>> corpus['citations', ('DOLE RJ 1952 CELL')]   # Citing papers!
             [<tethne.classes.paper.Paper object at 0x103037c10>,
              <tethne.classes.paper.Paper object at 0x10301c890>,
              ...
              <tethne.classes.paper.Paper object at 0x10302f5d0>]
  
             >>> corpus[('date', range(1993, 1995))] # Multiple values are OK.
             [<tethne.classes.paper.Paper object at 0x103037c10>,
              <tethne.classes.paper.Paper object at 0x10301c890>,
              ...
              <tethne.classes.paper.Paper object at 0x10302f5d0>]
  
          If you prefer to retrieve a :class:`.Corpus` rather than simply a
          list of :class:`.Paper` instances (e.g. to build networks), use
          :meth:`.Corpus.subcorpus`\.
  
          Parameters
          ----------
          selector : object
              See method description.
  
          Returns
          -------
          list
              A list of :class:`.Paper`\s.
          """
  
          papers = []
          if type(selector) is tuple: # Select papers by index.
              index, value = selector
              if type(value) is list:  # Set of index values.
                  papers = [p for v in value for p in self.select((index, v), index_only=index_only)]
              else:
                  if value in self.indices[index]:
                      if index_only:
                          papers = self.indices[index][value]
                      else:
                          papers = [self.indexed_papers[p] for p  # Single index value.
                                    in self.indices[index][value]]
                  else:
                      papers = []
          elif type(selector) is list:
              if selector[0] in self.indexed_papers:
                  # Selector is a list of primary indices.
                  if index_only:
                      papers = selector
                  else:
                      papers = [self.indexed_papers[s] for s in selector]
              elif type(selector[0]) is int:
                  if index_only:
                      papers = [self.indexed_papers.keys()[i] for i in selector]
                  else:
                      papers = [self.papers[i] for i in selector]
          elif type(selector) is int:
              if index_only:
                  papers = self.indexed_papers.keys()[selector]
              else:
                  papers = self.papers[selector]
  
          elif type(selector) in [str, unicode]:
              if selector in self.indexed_papers:
                  if index_only:
                      papers = selector
                  else:
                      papers = self.indexed_papers[selector]
          return papers