コード例 #1
0
 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)
コード例 #2
0
 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)
コード例 #3
0
ファイル: errors1.py プロジェクト: kjes89011/etchatbot
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)
コード例 #4
0
 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)
コード例 #5
0
 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)
コード例 #6
0
 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)
コード例 #7
0
 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)
コード例 #8
0
ファイル: errors1.py プロジェクト: kjes89011/etchatbot
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)
コード例 #9
0
ファイル: errors1.py プロジェクト: kjes89011/etchatbot
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)
コード例 #10
0
 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)
コード例 #11
0
 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)
コード例 #12
0
 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)
コード例 #13
0
ファイル: errors1.py プロジェクト: kjes89011/etchatbot
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)
コード例 #14
0
ファイル: errors1.py プロジェクト: kjes89011/etchatbot
def how_old_are_you(user_input):
    return models.ErrorResult(False)
コード例 #15
0
 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)
コード例 #16
0
ファイル: errors1.py プロジェクト: kjes89011/etchatbot
def what_grade_are_you_in(user_input):
    return models.ErrorResult(False)
コード例 #17
0
 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)
コード例 #18
0
 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)
コード例 #19
0
 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)
コード例 #20
0
 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)
コード例 #21
0
 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)