def fingerprint(self, phrase, qval=<NUM_LIT:2>, start_stop='<STR_LIT>', joiner='<STR_LIT>'):
phrase = unicode_normalize('<STR_LIT>', text_type(phrase.strip().lower()))<EOL>phrase = '<STR_LIT>'.join(c for c in phrase if c.isalnum())<EOL>phrase = QGrams(phrase, qval, start_stop)<EOL>phrase = joiner.join(sorted(phrase))<EOL>return phrase<EOL>
Return Q-Gram fingerprint.

        Parameters
        ----------
        phrase : str
            The string from which to calculate the q-gram fingerprint
        qval : int
            The length of each q-gram (by default 2)
        start_stop : str
            The start & stop symbol(s) to concatenate on either end of the
            phrase, as defined in :py:class:`tokenizer.QGrams`
        joiner : str
            The string that will be placed between each word

        Returns
        -------
        str
            The q-gram fingerprint of the phrase

        Examples
        --------
        >>> qf = QGram()
        >>> qf.fingerprint('The quick brown fox jumped over the lazy dog.')
        'azbrckdoedeleqerfoheicjukblampnfogovowoxpequrortthuiumvewnxjydzy'
        >>> qf.fingerprint('Christopher')
        'cherhehrisopphristto'
        >>> qf.fingerprint('Niall')
        'aliallni'