<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, work, matches_filename):
 """Generates HTML reports showing the text of each witness to `work` with its matches in `matches` highlighted. :param output_dir: directory to write report to :type output_dir: `str` :param work: name of work to highlight :type text_name: `str` :param matches_filename: file containing matches to highlight :type matches_filename: `str` :rtype: `str` """

        template = self._get_template()
        matches = pd.read_csv(matches_filename)
        for siglum in self._corpus.get_sigla(work):
            subm = matches[(matches[constants.WORK_FIELDNAME] != work) |
                           (matches[constants.SIGLUM_FIELDNAME] != siglum)]
            content = self._generate_base(work, siglum)
            content = self._highlight(content, subm)
            content = self._format_content(content)
            text_list = self._generate_text_list(subm)
            report_name = '{}-{}.html'.format(work, siglum)
            self._write(work, siglum, content, output_dir, report_name,
                        template, True, text_list=text_list)