コード例 #1
0
 def add(self, record):
     question = record['Question']
     answer = record['Answer']
     self.record.append(record)
     self.index[norm(question)].append(len(self.record) - 1)
     self.last_question = question
     self.last_answer = answer
     self.last_time = record.get('Datetime')
コード例 #2
0
 def add(self, question, answer, datetime=None, **kwargs):
     time = datetime or dt.datetime.now()
     record = {'Datetime': time, 'Question': question, 'Answer': answer}
     if kwargs:
         record.update(kwargs)
     self.record.append(record)
     self.index[norm(question)].append(len(self.record) - 1)
     self.last_question = question
     self.last_answer = answer
     self.last_time = time
コード例 #3
0
    def check(self, question, answer):
        # each additional character over the 10 characters, adds 30 seconds
        # delay before that AIML string is allowed to repeat.
        same_answers = [
            r for r in self.record if norm(r['Answer']) == norm(answer)
        ]
        time_elapsed = (
            dt.datetime.utcnow() -
            same_answers[-1]['Datetime']).seconds if same_answers else 0
        if max(0, len(norm(answer)) - 10) * 30 <= time_elapsed:
            logger.debug("Allow repeat answer {}".format(answer))
            logger.debug("Answer length {}, time elapsed {}".format(
                len(norm(answer)), time_elapsed))
            return True

        if norm(answer) == norm(self.last_answer):
            logger.debug("Last answer repeat")
            return False
        if not self.is_unique(answer):
            logger.debug("Non unique answer")
            return False
        if self.contain(question, answer):
            logger.debug("Repeat answer")
            return False
        return True
コード例 #4
0
ファイル: response_cache.py プロジェクト: hansonrobotics/HEAD
 def add(self, question, answer, datetime=None, **kwargs):
     time = datetime or dt.datetime.now()
     record = {
         'Datetime': time,
         'Question': question,
         'Answer': answer
     }
     if kwargs:
         record.update(kwargs)
     self.record.append(record)
     self.index[norm(question)].append(len(self.record) - 1)
     self.last_question = question
     self.last_answer = answer
     self.last_time = time
コード例 #5
0
ファイル: client.py プロジェクト: linas/HEAD
 def process_response(self, response):
     if response is not None:
         answer = response.get('text')
         if not self.ignore_indicator:
             self.process_indicator(answer)
         response['text'] = norm(answer)
         self.last_response = response
         if self.response_listener is None:
             self.stdout.write('{}[by {}]: {}\n'.format(
                 self.botname, response.get('botid'),
                 response.get('text')))
         else:
             try:
                 threading.Timer(0, self.response_listener.on_response, (self.session, response)).start()
             except Exception as ex:
                 logger.error(ex)
コード例 #6
0
 def process_response(self, response):
     if response is not None:
         answer = response.get('text')
         if not self.ignore_indicator:
             self.process_indicator(answer)
         response['text'] = norm(answer)
         self.last_response = response
         if self.response_listener is None:
             self.stdout.write('{}[by {}]: {}\n'.format(
                 self.botname, response.get('botid'), response.get('text')))
         else:
             try:
                 threading.Timer(0, self.response_listener.on_response,
                                 (self.session, response)).start()
             except Exception as ex:
                 logger.error(ex)
コード例 #7
0
ファイル: client.py プロジェクト: BeranItService/chatbot
 def process_response(self, response):
     if response is not None:
         self.last_response = response
         self.last_response_time = dt.datetime.utcnow()
         tier_response = response['default_response']
         if not tier_response:
             return
         answer = tier_response['text']
         if not self.ignore_indicator:
             self.process_indicator(answer)
         tier_response['text'] = norm(answer)
         self.last_tier_response = tier_response
         if self.response_listener is None:
             self.stdout.write('{}[by {}]: {}\n'.format(
                 self.botname, tier_response.get('botid'),
                 tier_response.get('text')))
         else:
             try:
                 threading.Timer(0, self.response_listener.on_response,
                                 (self.session, response)).start()
             except Exception as ex:
                 logger.error(ex)
コード例 #8
0
ファイル: response_cache.py プロジェクト: hansonrobotics/HEAD
    def check(self, question, answer):
        # each additional character over the 10 characters, adds 30 seconds
        # delay before that AIML string is allowed to repeat.
        same_answers = [r for r in self.record if norm(r['Answer']) == norm(answer)]
        time_elapsed = (dt.datetime.now() - same_answers[-1]['Datetime']
                        ).seconds if same_answers else 0
        if max(0, len(norm(answer)) - 10) * 30 <= time_elapsed:
            logger.debug("Allow repeat answer {}".format(answer))
            logger.debug("Answer length {}, time elapsed {}".format(
                len(norm(answer)), time_elapsed))
            return True

        if norm(answer) == norm(self.last_answer):
            logger.debug("Last answer repeat")
            return False
        if not self.is_unique(answer):
            logger.debug("Non unique answer")
            return False
        if self.contain(question, answer):
            logger.debug("Repeat answer")
            return False
        return True
コード例 #9
0
ファイル: response_cache.py プロジェクト: hansonrobotics/HEAD
 def _get_records(self, question):
     records = [self.record[i] for i in self.index[norm(question)]]
     return records
コード例 #10
0
ファイル: response_cache.py プロジェクト: hansonrobotics/HEAD
 def is_unique(self, answer):
     answers = [norm(r['Answer']) for r in self.record]
     return not norm(answer) in answers
コード例 #11
0
ファイル: response_cache.py プロジェクト: hansonrobotics/HEAD
 def contain(self, question, answer):
     question = norm(question)
     answer = norm(answer)
     records = self._get_records(question)
     answers = [norm(r['Answer']) for r in records]
     return answer in answers
コード例 #12
0
 def _get_records(self, question):
     records = [self.record[i] for i in self.index[norm(question)]]
     return records
コード例 #13
0
 def is_unique(self, answer):
     answers = [norm(r['Answer']) for r in self.record]
     return not norm(answer) in answers
コード例 #14
0
 def contain(self, question, answer):
     question = norm(question)
     answer = norm(answer)
     records = self._get_records(question)
     answers = [norm(r['Answer']) for r in records]
     return answer in answers