def test_fullstop(self): splitter = RegexSentenceSplitter(BotSentenceSplitterConfiguration()) self.assertIsNotNone(splitter) self.assertEqual(["This is the first sentence", "This is the second"], splitter.split("This is the first sentence. This is the second"))
def test_punctuation_at_end(self): splitter = RegexSentenceSplitter(BotSentenceSplitterConfiguration()) self.assertIsNotNone(splitter) self.assertEqual(["Is this the first sentence"], splitter.split("Is this the first sentence?"))
def test_basic_sentence(self): splitter = RegexSentenceSplitter(BotSentenceSplitterConfiguration()) self.assertIsNotNone(splitter) self.assertEquals(["This is a basic sentence"], splitter.split("This is a basic sentence"))
class BotConfiguration(BaseContainerConfigurationData): DEFAULT_ROOT = "." DEFAULT_RESPONSE = "" DEFAULT_RESPONSE_SRAI = "" DEFAULT_EMPTY_STRING = "" DEFAULT_EXIT_RESPONSE = "Bye!" DEFAULT_EXIT_RESPONSE_SRAI = "" DEFAULT_EXCEPTION_RESPONSE = "" DEFAULT_INITIAL_QUESTION = "Hello" DEFAULT_INITIAL_QUESTION_SRAI = "" DEFAULT_OVERRIDE_PREDICATES = True DEFAULT_MAX_QUESTION_RECURSION = 100 DEFAULT_MAX_QUESTION_TIMEOUT = -1 DEFAULT_MAX_SEARCH_DEPTH = 100 DEFAULT_MAX_SEARCH_TIMEOUT = -1 DEFAULT_MAX_SEARCH_CONDITION = 100 DEFAULT_MAX_SEARCH_SRAI = 50 DEFAULT_MAX_CATEGORIES = 5000 DEFAULT_MAX_PROPERTIES = 2500 DEFAULT_TAB_PARSE_OUTPUT = True def __init__(self, section_name="bot"): self._version = None self._brain_configs = [] self._brain_configs.append(BrainConfiguration("brain")) self._brain_selector = None self._bot_root = BotConfiguration.DEFAULT_ROOT self._default_response = BotConfiguration.DEFAULT_RESPONSE self._default_response_srai = BotConfiguration.DEFAULT_RESPONSE_SRAI self._exit_response = BotConfiguration.DEFAULT_EXIT_RESPONSE self._exit_response_srai = BotConfiguration.DEFAULT_EXIT_RESPONSE_SRAI self._exception_response = BotConfiguration.DEFAULT_EXCEPTION_RESPONSE self._initial_question = BotConfiguration.DEFAULT_INITIAL_QUESTION self._initial_question_srai = BotConfiguration.DEFAULT_INITIAL_QUESTION_SRAI self._empty_string = BotConfiguration.DEFAULT_EMPTY_STRING self._override_properties = BotConfiguration.DEFAULT_OVERRIDE_PREDICATES self._max_question_recursion = BotConfiguration.DEFAULT_MAX_QUESTION_RECURSION self._max_question_timeout = BotConfiguration.DEFAULT_MAX_QUESTION_TIMEOUT self._max_search_depth = BotConfiguration.DEFAULT_MAX_SEARCH_DEPTH self._max_search_timeout = BotConfiguration.DEFAULT_MAX_SEARCH_TIMEOUT self._max_search_condition = BotConfiguration.DEFAULT_MAX_SEARCH_CONDITION self._max_search_srai = BotConfiguration.DEFAULT_MAX_SEARCH_SRAI self._max_categories = BotConfiguration.DEFAULT_MAX_CATEGORIES self._max_properties = BotConfiguration.DEFAULT_MAX_PROPERTIES self._tab_parse_output = BotConfiguration.DEFAULT_TAB_PARSE_OUTPUT self._spelling = BotSpellingConfiguration() self._from_translator = BotTranslatorConfiguration( name="from_translator") self._to_translator = BotTranslatorConfiguration(name="to_translator") self._sentiment = BotSentimentAnalyserConfiguration() self._conversations = BotConversationsConfiguration() self._splitter = BotSentenceSplitterConfiguration() self._joiner = BotSentenceJoinerConfiguration() BaseContainerConfigurationData.__init__(self, section_name) def check_for_license_keys(self, license_keys): BaseContainerConfigurationData.check_for_license_keys( self, license_keys) def load_configuration(self, configuration_file, bot_root, subs: Substitutions = None): bot = configuration_file.get_section(self.section_name) if bot is not None: self._version = configuration_file.get_option(bot, "version") self._default_response = configuration_file.get_option( bot, "default_response", BotConfiguration.DEFAULT_RESPONSE, subs=subs) self._default_response_srai = configuration_file.get_option( bot, "default_response_srai", BotConfiguration.DEFAULT_RESPONSE_SRAI, subs=subs) self._empty_string = configuration_file.get_option( bot, "empty_string", BotConfiguration.DEFAULT_EMPTY_STRING, subs=subs) self._exit_response = configuration_file.get_option( bot, "exit_response", BotConfiguration.DEFAULT_EXIT_RESPONSE, subs=subs) self._exit_response_srai = configuration_file.get_option( bot, "exit_response_srai", BotConfiguration.DEFAULT_EXIT_RESPONSE_SRAI, subs=subs) self._exception_response = configuration_file.get_option( bot, "exception_response", BotConfiguration.DEFAULT_EXCEPTION_RESPONSE, subs=subs) self._initial_question = configuration_file.get_option( bot, "initial_question", BotConfiguration.DEFAULT_INITIAL_QUESTION, subs=subs) self._initial_question_srai = configuration_file.get_option( bot, "initial_question_srai", BotConfiguration.DEFAULT_INITIAL_QUESTION_SRAI, subs=subs) self._override_properties = configuration_file.get_bool_option( bot, "override_properties", BotConfiguration.DEFAULT_OVERRIDE_PREDICATES, subs=subs) self._max_question_recursion = configuration_file.get_int_option( bot, "max_question_recursion", BotConfiguration.DEFAULT_MAX_QUESTION_RECURSION, subs=subs) self._max_question_timeout = configuration_file.get_int_option( bot, "max_question_timeout", BotConfiguration.DEFAULT_MAX_QUESTION_TIMEOUT, subs=subs) self._max_search_depth = configuration_file.get_int_option( bot, "max_search_depth", BotConfiguration.DEFAULT_MAX_SEARCH_DEPTH, subs=subs) self._max_search_timeout = configuration_file.get_int_option( bot, "max_search_timeout", BotConfiguration.DEFAULT_MAX_SEARCH_TIMEOUT, subs=subs) self._max_search_condition = configuration_file.get_int_option( bot, "max_search_condition", BotConfiguration.DEFAULT_MAX_SEARCH_CONDITION, subs=subs) self._max_search_srai = configuration_file.get_int_option( bot, "max_search_srai", BotConfiguration.DEFAULT_MAX_SEARCH_SRAI, subs=subs) self._max_categories = configuration_file.get_int_option( bot, "max_categories", BotConfiguration.DEFAULT_MAX_CATEGORIES, subs=subs) self._max_properties = configuration_file.get_int_option( bot, "max_properties", BotConfiguration.DEFAULT_MAX_PROPERTIES, subs=subs) self._tab_parse_output = configuration_file.get_bool_option( bot, "tab_parse_output", BotConfiguration.DEFAULT_TAB_PARSE_OUTPUT, subs=subs) self._spelling.load_config_section(configuration_file, bot, bot_root, subs=subs) self._conversations.load_config_section(configuration_file, bot, bot_root, subs=subs) self._splitter.load_config_section(configuration_file, bot, bot_root, subs=subs) self._joiner.load_config_section(configuration_file, bot, bot_root, subs=subs) self._from_translator.load_config_section(configuration_file, bot, bot_root, subs=subs) self._to_translator.load_config_section(configuration_file, bot, bot_root, subs=subs) self._sentiment.load_config_section(configuration_file, bot, bot_root, subs=subs) else: YLogger.warning( self, "Config section [%s] missing, using default values", self.section_name) self.load_configurations(configuration_file, bot, bot_root, subs) def load_configurations(self, configuration_file, bot, bot_root, subs: Substitutions = None): if bot is not None: brain_names = configuration_file.get_multi_option( bot, "brain", missing_value="brain") first = True for name in brain_names: if first is True: config = self._brain_configs[0] first = False else: config = BrainConfiguration(name) self._brain_configs.append(config) config.load_configuration(configuration_file, bot_root, subs=subs) self._brain_selector = configuration_file.get_option( bot, "brain_selector", subs=subs) else: YLogger.warning( self, "No brain name defined for bot [%s], defaulting to 'brain'.", self.section_name) brain_name = "brain" self._brain_configs[0]._section_name = brain_name self._brain_configs[0].load_configuration(configuration_file, bot_root, subs=subs) @property def configurations(self): return self._brain_configs @property def version(self): return self._version @property def brain_selector(self): return self._brain_selector @property def bot_root(self): return self._bot_root @property def default_response(self): return self._default_response @default_response.setter def default_response(self, text): self._default_response = text @property def default_response_srai(self): return self._default_response_srai @default_response_srai.setter def default_response_srai(self, text): self._default_response_srai = text @property def empty_string(self): return self._empty_string @empty_string.setter def empty_string(self, text): self._empty_string = text @property def exit_response(self): return self._exit_response @exit_response.setter def exit_response(self, text): self._exit_response = text @property def exit_response_srai(self): return self._exit_response_srai @exit_response_srai.setter def exit_response_srai(self, text): self._exit_response_srai = text @property def exception_response(self): return self._exception_response @exception_response.setter def exception_response(self, text): self._exception_response = text @property def initial_question(self): return self._initial_question @initial_question.setter def initial_question(self, text): self._initial_question = text @property def initial_question_srai(self): return self._initial_question_srai @initial_question_srai.setter def initial_question_srai(self, text): self._initial_question_srai = text @property def override_properties(self): return self._override_properties @override_properties.setter def override_properties(self, override): self._override_properties = override @property def max_question_recursion(self): return self._max_question_recursion @property def max_question_timeout(self): return self._max_question_timeout @property def max_search_depth(self): return self._max_search_depth @property def max_search_timeout(self): return self._max_search_timeout @property def max_search_condition(self): return self._max_search_condition @property def max_search_srai(self): return self._max_search_srai @property def max_categories(self): return self._max_categories @property def max_properties(self): return self._max_properties @property def tab_parse_output(self): return self._tab_parse_output @property def spelling(self): return self._spelling @property def conversations(self): return self._conversations @property def splitter(self): return self._splitter @property def joiner(self): return self._joiner @property def from_translator(self): return self._from_translator @property def to_translator(self): return self._to_translator @property def sentiment_analyser(self): return self._sentiment def to_yaml(self, data, defaults=True): data['bot_root'] = self.bot_root data['default_response'] = self.default_response data['default_response_srai'] = self.default_response_srai data['exit_response'] = self.exit_response data['exit_response_srai'] = self.exit_response_srai data['exception_response'] = self.exception_response data['initial_question'] = self.initial_question data['initial_question_srai'] = self.initial_question_srai data['empty_string'] = self.empty_string data['override_properties'] = self.override_properties data['max_question_recursion'] = self.max_question_recursion data['max_question_timeout'] = self.max_question_timeout data['max_search_depth'] = self.max_search_depth data['max_search_timeout'] = self.max_search_timeout data['max_search_condition'] = self.max_search_condition data['max_search_srai'] = self.max_search_srai data['max_categories'] = self.max_categories data['max_properties'] = self.max_properties data['tab_parse_output'] = self.tab_parse_output self.config_to_yaml(data, BotSpellingConfiguration(), defaults) self.config_to_yaml(data, BotConversationsConfiguration(), defaults) self.config_to_yaml(data, BotSentenceSplitterConfiguration(), defaults) self.config_to_yaml(data, BotSentenceJoinerConfiguration(), defaults) self.config_to_yaml(data, BotTranslatorConfiguration(name="from_translator"), defaults) self.config_to_yaml(data, BotTranslatorConfiguration(name="to_translator"), defaults) self.config_to_yaml(data, BotSentimentAnalyserConfiguration(), defaults)
def test_not_implemented(self): splitter = SpacySentenceSplitter(BotSentenceSplitterConfiguration()) with self.assertRaises(NotImplementedError): splitter.split("Split this")