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
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.