def initialize(self, **kwargs):
        """
        Initialize some structures given the ontology and database, and load
        pre-trained models for processing the utterances and tracking the
        dialogue state.

        :param kwargs:
        :return: nothing
        """

        path = ''
        if 'data_path' in kwargs:
            path = kwargs['data_path']

        if 'ontology' in kwargs and 'database' in kwargs:
            self.ontology_path = kwargs['ontology']
            self.database_path = kwargs['database']

            self.ontology = Ontology(self.ontology_path)
            self.database = SQLDataBase(self.database_path)

            if self.TRAIN_LANG_2_LANG:
                # nlu for sys in order to collect data to train
                # Language 2 Language Agent
                # (must be trained in a previous pass)
                self.NLUSys = CamRestNLU('models/camrest_nlu/sys/model')
                self.NLUSys.initialize(self.ontology)

                # nlu for usr in order to collect data to train
                # Language 2 Language Agent
                # (must be trained in a previous pass)
                self.NLUUsr = CamRestNLU('models/camrest_nlu/usr/model')
                self.NLUUsr.initialize(self.ontology)

            # Track the dialogue state from the system's perspective
            dst_args = \
                dict(
                    zip(['ontology', 'database', 'domain'],
                        [self.ontology, self.database, 'CamRest']))
            self.DSTrackerSys = SlotFillingDST(dst_args)
            
            # Track the dialogue state from the user's perspective
            self.DSTrackerUsr = SlotFillingDST(dst_args)

            self.informable_slots = \
                deepcopy(list(self.ontology.ontology['informable'].keys()))
            self.requestable_slots = \
                deepcopy(self.ontology.ontology['requestable'] + ['this'])
            self.system_requestable_slots = \
                deepcopy(self.ontology.ontology['system_requestable'])

            self.NActions = \
                4 + len(self.system_requestable_slots) + \
                len(self.requestable_slots)
            self.agent_role = 'system'

        if isinstance(path, str):
            if os.path.exists(os.path.dirname(path)):
                self.path = path

            else:
                raise FileNotFoundError('Invalid data path %s ' % path)
        else:
            raise ValueError('Unacceptable value for data path: %s ' % path)

        nlu_args = \
            dict(
                zip(['ontology', 'database', 'domain'],
                    [self.ontology, self.database, 'CamRest']))
        self.nlu = SlotFillingNLU(nlu_args)
        self.nlu.initialize(self.ontology)

        self.recorder_sys = DialogueEpisodeRecorder()
        self.recorder_usr = DialogueEpisodeRecorder()

        Initialize some structures given the ontology and database, and load
        pre-trained models for processing the utterances and tracking the
        dialogue state.

        :param kwargs:
        :return: nothing
        
plato/utilities/parser/parse_dstc2.py