Source code for chatterbot.logic.specific_response

from chatterbot.logic import LogicAdapter
from chatterbot.conversation import Statement
from chatterbot import languages
from chatterbot.utils import get_model_for_language
import spacy


[docs] class SpecificResponseAdapter(LogicAdapter): """ Return a specific response to a specific input. :kwargs: * *input_text* (``str``) -- The input text that triggers this logic adapter. * *output_text* (``str`` or ``function``) -- The output text returned by this logic adapter. If a function is provided, it should return a string. """ def __init__(self, chatbot, **kwargs): super().__init__(chatbot, **kwargs) self.input_text = kwargs.get('input_text') self.matcher = None if MatcherClass := kwargs.get('matcher'): language = kwargs.get('language', languages.ENG) self.nlp = self._initialize_nlp(language) self.matcher = MatcherClass(self.nlp.vocab) self.matcher.add('SpecificResponse', [self.input_text]) self._output_text = kwargs.get('output_text') def _initialize_nlp(self, language): model = get_model_for_language(language) return spacy.load(model) def can_process(self, statement): if self.matcher: doc = self.nlp(statement.text) matches = self.matcher(doc) if matches: return True elif statement.text == self.input_text: return True return False def process(self, statement, additional_response_selection_parameters=None): if callable(self._output_text): response_statement = Statement(text=self._output_text()) else: response_statement = Statement(text=self._output_text) if self.matcher: doc = self.nlp(statement.text) matches = self.matcher(doc) if matches: response_statement.confidence = 1 else: response_statement.confidence = 0 elif statement.text == self.input_text: response_statement.confidence = 1 else: response_statement.confidence = 0 return response_statement