<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 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)