def _process_interaction(self, source_id, interaction, text, pmid,
                             extra_annotations):
        verb = interaction[0].lower()
        subj = interaction[-2]
        obj = interaction[-1]
        subj = self._make_agent(subj)
        obj = self._make_agent(obj)
        annotations = deepcopy(extra_annotations)
        if 'interaction' in extra_annotations:
            logger.warning("'interaction' key of extra_annotations ignored" +
                           " since this is reserved for storing the raw ISI " +
                           "input.")
        annotations['source_id'] = source_id
        annotations['interaction'] = interaction
        ev = ist.Evidence(source_api='isi',
                          pmid=pmid,
                          text=text.rstrip(),
                          annotations=annotations)
        cataylst_specified = False
        if len(interaction) == 4:
            catalyst = interaction[1]
            if catalyst is not None:
                cataylst_specified = True
        self.verbs.add(verb)
        statement = None
        if verb in verb_to_statement_type:
            statement_class = verb_to_statement_type[verb]
            if statement_class == ist.Complex:
                statement = ist.Complex([subj, obj], evidence=ev)
            else:
                statement = statement_class(subj, obj, evidence=ev)
        if statement is not None:
            already_have = False
            if type(statement) == ist.Complex:
                for old_s in self.statements:
                    old_id = statement.evidence[0].source_id
                    new_id = old_s.evidence[0].source_id
                    if type(old_s) == ist.Complex and old_id == new_id:
                        old_statement_members = \
                                [m.db_refs['TEXT'] for m in old_s.members]
                        old_statement_members = sorted(old_statement_members)
                        new_statement_members = [m.db_refs['TEXT']
                                                 for m in statement.members]
                        new_statement_members = sorted(new_statement_members)
                        if old_statement_members == new_statement_members:
                            already_have = True
                            break
            if not already_have:
                self.statements.append(statement)