docs: def generate(self, output_dir, minimum_size):
          """Generates sequence reports and writes them to the output directory.
  
          :param output_dir: directory to output reports to
          :type output_dir: `str`
          :param minimum_size: minimum size of n-grams to create sequences for
          :type minimum_size: `int`
  
          """
          self._output_dir = output_dir
          # Get a list of the files in the matches, grouped by label
          # (ordered by number of works).
          labels = list(self._matches.groupby([constants.LABEL_FIELDNAME])[
              constants.WORK_FIELDNAME].nunique().index)
          original_ngrams = self._matches[
              self._matches[
                  constants.SIZE_FIELDNAME] >= minimum_size].sort_values(
                  by=constants.SIZE_FIELDNAME, ascending=False)[
                      constants.NGRAM_FIELDNAME].unique()
          ngrams = []
          for original_ngram in original_ngrams:
              ngrams.append(self._get_text(Text(original_ngram,
                                                self._tokenizer)))
          # Generate sequences for each witness in every combination of
          # (different) labels.
          for index, primary_label in enumerate(labels):
              for secondary_label in labels[index+1:]:
                  self._generate_sequences(primary_label, secondary_label,
                                           ngrams)