def match(self, user_input): if re.match(self.regex, user_input.text): return models.ErrorResult( True, "That's right, but please " "give me a full sentence...") else: return models.ErrorResult(False)
def match(self, user_input): match_obj = re.match(self.regex, user_input.text) if match_obj: job = match_obj.group('job') if job in common.JOBS and job != self.expected_job: return models.ErrorResult(True, 'Wrong answer.') return models.ErrorResult(False)
def where_are_you_from(user_input): """ I am [country]. """ if re.match('^I am %s(.)?$' % common_regex.NAME, user_input.text): return models.ErrorResult(True, 'You must use "from" in this ' 'sentence.') return models.ErrorResult(False)
def match(self, user_input): # a one word is a one word answer, not an attempt at a sentence. # will be captured by the short answer rule where necessary. error = len(user_input) > 1 and common.head(user_input).pos_ != 'VERB' if error: return models.ErrorResult( True, 'You need to use "is" ' 'in your sentence.') return models.ErrorResult(False)
def match(self, user_input): result = False for pattern in self.patterns: if re.match(pattern, user_input.text) is not None: result = True if result: return models.ErrorResult(True, 'For a woman, use "she".') else: return models.ErrorResult(False)
def match(self, user_input): if re.match(r'^She is a Doctor(.)?$', user_input.text): return models.ErrorResult( True, 'For "doctor" use a small "d". ' 'It is a noun. We only use a big ' 'letter for a name or at the start ' 'of a sentence.') else: return models.ErrorResult(False)
def match(self, user_input): patterns = [r'^She is a cook(.)?$', r'^It is a cook(.)?$'] result = False for pattern in patterns: if re.match(pattern, user_input.text) is not None: result = True if result: return models.ErrorResult(True, 'For a man, use "he".') else: return models.ErrorResult(False)
def how_are_you(user_input): """ Error set: I'm fine thank you. [Missing comma] """ if re.match(r'.*[a-z]( thank you)(.)?$', user_input.text): return models.ErrorResult(True, 'You must use a comma before "thank you".') if re.match(r'.*[a-z]( thanks)(.)?$', user_input.text): return models.ErrorResult(True, 'You must use a comma before "thanks".') return models.ErrorResult(False)
def nice_to_meet_you(user_input): """ Error set: Nice to meet you [missing ', too'] Nice to meet you too [missing , """ r_1 = r'^Nice to meet you(.)?$' if re.match(r_1, user_input.text): return models.ErrorResult(True, 'You must say "too".') r_2 = r'^Nice to meet you too(.)?$' if re.match(r_2, user_input.text): return models.ErrorResult(True, 'You must use a comma before "too".') return models.ErrorResult(False)
def match(self, user_input): head = common.head(user_input) if head.pos_ == 'VERB': if len(user_input) > head.i + 1: next_token = user_input[head.i + 1] if head.lemma_ == 'be' and next_token.pos_ == 'NOUN': return models.ErrorResult( True, 'You must use "a" or "an" before a noun like "%s"' % next_token.text) if head.lemma_ == 'have' and next_token.pos_ == 'ADJ': return models.ErrorResult( True, 'You must use "a" or "an" before a noun.') return models.ErrorResult(False)
def match(self, user_input): head = common.head(user_input) if head.pos_ == 'VERB': if len(user_input) > head.i + 1: next_token = user_input[head.i + 1] if next_token.pos_ == 'DET': noun = user_input[head.i + 2] vowel_at_front = noun.text[0] in common.VOWELS if vowel_at_front and next_token.text == 'a': return models.ErrorResult( True, 'If a noun (like "%s") starts with a vowel' ' (%s), you must use "an".' % (noun.text, ' '.join(common.VOWELS))) if not vowel_at_front and next_token.text == 'an': return models.ErrorResult( True, 'If a noun (like "%s") does not start with a vowel ' '(%s), you must use "a".' % (noun.text, ' '.join(common.VOWELS))) return models.ErrorResult(False)
def match(self, user_input): if user_input[0].pos_ == 'INTJ': # yes or no head = common.head(user_input) # likely to be is if user_input[0].text == 'Yes': if len(user_input) > head.i + 1: # I think that maths is right follow = user_input[head.i + 1] if follow.pos_ == 'ADV' and follow.text in common.NEGATIONS: return models.ErrorResult( True, "If you want so say 'Yes', " "then make sure to use 'is'") if user_input[0].text == 'No': if len(user_input) > head.i + 1: follow = user_input[head.i + 1] follow_error = follow.pos_ != 'ADV' \ and follow.text not in common.NEGATIONS if follow_error or len(user_input) < head.i + 2: return models.ErrorResult( True, "If you want to say 'No', '" "then make sure to use 'is " "not' or 'isn't'.") return models.ErrorResult(False)
def what_is_your_name(user_input): """ Error set: 1: He is Sina. [wrong subject] 2: invalid name 3: I am tim. [Non-capital name] """ # 1 incorrect_subjects = ['You', 'He', 'She', 'This'] head = next(t for t in user_input if t.head == t) if user_input[0].text in incorrect_subjects: return models.ErrorResult( True, 'You must give me YOUR name. Start with "I"...') # 2 if user_input.text in common.INVALID_NAMES: return models.ErrorResult(True, 'That is not a name.') # 3 if len(user_input) == 1 and user_input[0].is_lower: return models.ErrorResult( True, 'Your name must start with a big letter: ' '"Steve" and not "steve".') if head.lemma_ == 'be': right_children = list(head.rights) if len(right_children) >= 1: name = right_children[0] # first is all we want # 2 if name.text in common.INVALID_NAMES: return models.ErrorResult(True, 'That is not a name.') # 3 if name.is_lower: if name.pos_ == 'NOUN': return models.ErrorResult( True, 'Your name must start with a big letter: ' '"Steve" and not "steve".') if name.pos_ == 'ADJ': temp = NLP(name.text) if temp[0].pos_ == 'NOUN': return models.ErrorResult( True, 'Your name must start with a big letter: ' '"Steve" and not "steve".') return models.ErrorResult(False)
def how_old_are_you(user_input): return models.ErrorResult(False)
def match(self, user_input): if re.match(self.regex, user_input.text): return models.ErrorResult( True, 'Wrong subject. Please use %s' % self.expected_subject) return models.ErrorResult(False)
def what_grade_are_you_in(user_input): return models.ErrorResult(False)
def match(self, user_input): if re.match(r"^((Yes|No), (she|it)|(She|It)) (is|isn't)(.)?$", user_input.text): return models.ErrorResult(True, 'He is a man. You must ' 'use "he".') return models.ErrorResult(False)
def match(self, user_input): if re.match(r'Yes(, he is)?(.)?$', user_input.text): return models.ErrorResult(True, 'Wrong answer.') return models.ErrorResult(False)
def match(self, user_input): if re.match(self.regex, user_input.text): return models.ErrorResult(True, 'You must use a comma "," ' 'after "No"') else: return models.ErrorResult(False)
def match(self, user_input): if re.match(r'^My Father is a %s(.)?$' % common_regex.JOB, user_input.text): return models.ErrorResult(True, "Don't use a big 'F' for father.") else: return models.ErrorResult(False)
def match(self, user_input): if user_input[0].is_lower: return models.ErrorResult( True, 'A sentence must start with a ' 'big letter.') return models.ErrorResult(False)