def _assign_if_is_yesno(self): if self.text.strip() in settings.YES_WORDS or self.text.strip() in settings.NO_WORDS: return Poll.objects(ptype='yesno', open=True).order_by('-created_at').first() elif fuzzy_match_strings(self.text, settings.YES_WORDS) or fuzzy_match_strings(self.text, settings.NO_WORDS): return Poll.objects(ptype='yesno', open=True).order_by('-created_at').first() else: # return None #always asign uninteligibal responses to the last yes/no poll (possibility to distort poll results) return Poll.objects(ptype='yesno', open=True).order_by('-created_at').first()
def _assign_if_is_yesno(self): if self.text.strip() in settings.YES_WORDS or self.text.strip( ) in settings.NO_WORDS: return Poll.objects(ptype='yesno', open=True).order_by('-created_at').first() elif fuzzy_match_strings(self.text, settings.YES_WORDS) or fuzzy_match_strings( self.text, settings.NO_WORDS): return Poll.objects(ptype='yesno', open=True).order_by('-created_at').first() else: # return None #always asign uninteligibal responses to the last yes/no poll (possibility to distort poll results) return Poll.objects(ptype='yesno', open=True).order_by('-created_at').first()
def process_response(self): outgoing_message = self.poll.default_response if self.categories().count() > 0: for category in self.categories(): for rule in category.rules(): if self._regex_compare_str(self.text, rule): PollResponseCategory(**dict(poll_response=self, response_category=category)).save() if not self.is_categorized(): start_str = settings.POLL_RESPONSE_START_STR if self.text.lower().startswith(start_str.lower()): txt = self.text[len(start_str):len(self.text)].strip() txt = re.sub('[!@#$.,-]', '', txt) if self.categories().count() > 0: for category in self.categories(): for rule in category.rules(): if self._regex_compare_str(txt, rule): PollResponseCategory(**dict(poll_response=self, response_category=category)).save() #last resort, fuzzy match to yes' and nos if not self.is_categorized(): for txt in self.split_text(): if fuzzy_match_strings(txt, settings.YES_WORDS, match_ratio=96): category = ResponseCategory.objects(**dict(name='yes', poll=self.poll)).first() PollResponseCategory(**dict(poll_response=self, response_category=category)).save() break elif fuzzy_match_strings(txt, settings.NO_WORDS, match_ratio=96): category = ResponseCategory.objects(**dict(name='no', poll=self.poll)).first() PollResponseCategory(**dict(poll_response=self, response_category=category)).save() break else: pass #categorization fails, give up if not self.is_categorized(): unknown_category = self.categories().filter(default=True).first() PollResponseCategory(**dict(poll_response=self, response_category=unknown_category)).save() if unknown_category.error_category: self.has_errors = True outgoing_message = unknown_category.response self.save() if not outgoing_message: return self, None, else: return self, outgoing_message,
def process_response(self): outgoing_message = self.poll.default_response if self.categories().count() > 0: for category in self.categories(): for rule in category.rules(): if self._regex_compare_str(self.text, rule): PollResponseCategory( **dict(poll_response=self, response_category=category)).save() if not self.is_categorized(): start_str = settings.POLL_RESPONSE_START_STR if self.text.lower().startswith(start_str.lower()): txt = self.text[len(start_str):len(self.text)].strip() txt = re.sub('[!@#$.,-]', '', txt) if self.categories().count() > 0: for category in self.categories(): for rule in category.rules(): if self._regex_compare_str(txt, rule): PollResponseCategory( **dict(poll_response=self, response_category=category)).save() #last resort, fuzzy match to yes' and nos if not self.is_categorized(): for txt in self.split_text(): if fuzzy_match_strings(txt, settings.YES_WORDS, match_ratio=96): category = ResponseCategory.objects( **dict(name='yes', poll=self.poll)).first() PollResponseCategory( **dict(poll_response=self, response_category=category)).save() break elif fuzzy_match_strings(txt, settings.NO_WORDS, match_ratio=96): category = ResponseCategory.objects( **dict(name='no', poll=self.poll)).first() PollResponseCategory( **dict(poll_response=self, response_category=category)).save() break else: pass #categorization fails, give up if not self.is_categorized(): unknown_category = self.categories().filter(default=True).first() PollResponseCategory( **dict(poll_response=self, response_category=unknown_category)).save() if unknown_category.error_category: self.has_errors = True outgoing_message = unknown_category.response self.save() if not outgoing_message: return self, None, else: return self, outgoing_message,