Example #1
0
    def test_random_sentences_sentence_with_phrasal_verb_one_obj_and_preposition(
            self):
        random.seed(456123)
        verb_list = [{
            'verb': Verb('put'),
            'preposition': BasicWord.preposition('with'),
            'objects': 1,
            'particle': BasicWord.particle('up')
        }]
        generator = RandomSentences(verb_list,
                                    self.countable + self.uncountable)
        answer = generator.sentence()
        expected = [
            Noun('pig'),
            Verb('put'),
            BasicWord.particle('up'),
            BasicWord.preposition('with'), YOU, PERIOD
        ]
        self.assertEqual(answer, expected)

        answer = generator.sentence()
        expected = [
            Noun('water'),
            Verb('put'),
            BasicWord.particle('up'),
            BasicWord.preposition('with'),
            Noun('pig'), EXCLAMATION
        ]
        self.assertEqual(answer, expected)
Example #2
0
 def test_generate_paragraph_plural_countable_noun(self):
     raw_paragraph = [[Noun('cat'), Verb('grab'), Noun('cat'), EXCLAMATION]]
     grammarizer = Grammarizer(raw_paragraph, probability_negative_verb=0.0, probability_plural_noun=1.0)
     paragraph = grammarizer.generate_paragraph()
     expected = [[Noun('Cats', '', 'cat', tags=self.plural), Verb('grab'),
                  Noun('the cats', '', 'cat', tags=self.definite_plural), EXCLAMATION]]
     self.assertEqual(paragraph, expected)
Example #3
0
    def test_grammarizer_set_nouns(self):
        paragraph = [
            [Noun.uncountable_noun('money'), Verb('grab'), Noun('witch'), EXCLAMATION],
            [Noun('witch'), Verb('play'), Noun('watch'), PERIOD]
        ]
        grammarizer = Grammarizer(paragraph, probability_plural_noun=0.5)

        random.seed(10)

        grammarizer.set_nouns()
        noun_info = {
            Noun('watch'): {'plural': True, 'definite': False, 'countable': True},
            Noun('witch'): {'plural': False, 'definite': False, 'countable': True},
            Noun.uncountable_noun('money'): {'plural': False, 'definite': False, 'countable': False},
        }
        self.assertEqual(grammarizer.noun_info, noun_info)

        grammarizer.set_nouns()
        noun_info = {
            Noun('watch'): {'plural': True, 'definite': False, 'countable': True},
            Noun('witch'): {'plural': False, 'definite': False, 'countable': True},
            Noun.uncountable_noun('money'): {'plural': False, 'definite': False, 'countable': False},
        }
        self.assertEqual(grammarizer.noun_info, noun_info)

        grammarizer.set_nouns()
        noun_info = {
            Noun('watch'): {'plural': False, 'definite': False, 'countable': True},
            Noun('witch'): {'plural': False, 'definite': False, 'countable': True},
            Noun.uncountable_noun('money'): {'plural': False, 'definite': False, 'countable': False},
        }
        self.assertEqual(grammarizer.noun_info, noun_info)
    def test_create_chain_paragraph_loop_safety_finally_returns_paragraph_with_repeat_words(
            self):
        random.seed(20)
        verb_list = [{
            'verb': Verb('give'),
            'preposition': None,
            'objects': 2,
            'particle': None
        }]

        repeats = RandomParagraph(0.0, verb_list, [Noun('joe'), Noun('bob')])
        paragraph = repeats.create_chain_paragraph(3)
        expected = [
            [Noun('joe'),
             Verb('give'),
             Noun('joe'),
             Noun('bob'), PERIOD],
            [Noun('bob'),
             Verb('give'),
             Noun('bob'),
             Noun('joe'), EXCLAMATION],
            [Noun('joe'),
             Verb('give'),
             Noun('bob'),
             Noun('joe'), PERIOD],
        ]
        self.assertEqual(expected, paragraph)
Example #5
0
    def test_two_objects_second_obj_is_never_pronoun(self):
        random.seed(456)
        verb_list = [
            {
                'verb': Verb('bring'),
                'preposition': BasicWord.preposition('to'),
                'objects': 2,
                'particle': None
            },
            {
                'verb': Verb('give'),
                'preposition': None,
                'objects': 2,
                'particle': None
            },
        ]
        generator = RandomSentences(verb_list,
                                    self.countable + self.uncountable)
        answer = generator.predicate(1.0)
        self.assertEqual(answer, [Verb('give'), HER, Noun('dog'), EXCLAMATION])

        answer = generator.predicate(1.0)
        self.assertEqual(answer, [
            Verb('bring'), ME,
            BasicWord.preposition('to'),
            Noun('sand'), PERIOD
        ])

        answer = generator.predicate(1.0)
        self.assertEqual(
            answer,
            [Verb('give'), HIM, Noun('milk'), EXCLAMATION])
Example #6
0
    def test_equality_true_false_by_tags(self):
        test = Verb('a', 'b', 'c', tags=self.past)
        equal = Verb('a', 'b', 'c', tags=self.past)
        not_equal = Verb('a', 'b', 'c', tags=self.negative_past)

        self.assertEqual(test, equal)
        self.assertNotEqual(test, not_equal)
Example #7
0
    def test_third_person_special_case(self):
        verb = Verb('have', 'had')
        past = verb.past_tense()
        expected = Verb('has', 'had', 'have', tags=self.third_person)

        self.assertEqual(verb.third_person(), expected)
        self.assertEqual(past.third_person(), expected)
    def test_create_pool_paragraph_repeats_very_very_edge_case(self):
        random.seed(20)
        verb_list = [{
            'verb': Verb('give'),
            'preposition': None,
            'objects': 2,
            'particle': None
        }]

        repeats = RandomParagraph(0.0, verb_list, [Noun('cat'), Noun('water')])

        answer = repeats.create_pool_paragraph(2, 2)
        expected = [[
            Noun('water'),
            Verb('give'),
            Noun('cat'),
            Noun('water'), PERIOD
        ], [Noun('cat'),
            Verb('give'),
            Noun('cat'),
            Noun('water'), PERIOD]]
        self.assertEqual(answer, expected)

        no_prepositions = [
            verb_dict for verb_dict in self.verbs
            if verb_dict['preposition'] is None
        ]
        no_repeats = RandomParagraph(0.0, no_prepositions,
                                     [Noun('cat'), Noun('water')])
        answer = no_repeats.create_pool_paragraph(2, 100)
        for sentence in answer:
            self.assertEqual(len(sentence), 4)
            self.assertNotEqual(sentence[0], sentence[2])
Example #9
0
    def test_assign_preposition(self):
        random.seed(1234)
        verb_list = [{
            'verb': Verb('jump'),
            'preposition': BasicWord.preposition('on'),
            'objects': 1,
            'particle': None
        }]
        generator = RandomSentences(verb_list,
                                    self.countable + self.uncountable)
        answer = generator.sentence()
        self.assertEqual(answer, [
            Noun('sand'),
            Verb('jump'),
            BasicWord.preposition('on'), US, PERIOD
        ])

        answer = generator.sentence()
        expected = [
            Noun('cat'),
            Verb('jump'),
            BasicWord.preposition('on'),
            Noun('frog'), PERIOD
        ]
        self.assertEqual(answer, expected)
 def test_create_pool_paragraph_output(self):
     random.seed(3)
     paragraph = self.rp.create_pool_paragraph(2, 5)
     expected = [[Noun('pig'),
                  Verb('eat'),
                  Noun('sand'), PERIOD],
                 [
                     Noun('pig'),
                     Verb('give'),
                     Noun('cat'),
                     BasicWord.preposition('to'),
                     Noun('dog'), PERIOD
                 ],
                 [
                     Noun('sand'),
                     Verb('jump'),
                     BasicWord.preposition('over'),
                     Noun('milk'), EXCLAMATION
                 ], [Noun('sand'), Verb('eat'), HIM, PERIOD],
                 [
                     Noun('sand'),
                     Verb('jump'),
                     BasicWord.preposition('over'),
                     Noun('milk'), EXCLAMATION
                 ]]
     self.assertEqual(paragraph, expected)
Example #11
0
    def test_assign_preposition_insert_preposition_true(self):
        random.seed(7890)
        verb_list = [{
            'verb': Verb('bring'),
            'preposition': BasicWord.preposition('to'),
            'objects': 2,
            'particle': None
        }]
        generator = RandomSentences(verb_list,
                                    self.countable + self.uncountable)
        answer = generator.sentence()
        self.assertEqual(answer, [
            Noun('milk'),
            Verb('bring'),
            Noun('water'),
            BasicWord.preposition('to'),
            Noun('rice'), EXCLAMATION
        ])

        answer = generator.sentence()
        self.assertEqual(answer, [
            Noun('water'),
            Verb('bring'),
            Noun('dog'),
            BasicWord.preposition('to'),
            Noun('milk'), PERIOD
        ])
Example #12
0
 def test_get_non_proper_nouns_proper_nouns(self):
     raw_paragraph = [
         [Noun.proper_noun('NASA'), Verb('grab'), Noun.proper_noun('Joe'), EXCLAMATION],
         [Noun.proper_noun('the Things', plural=True), Verb('cut', 'cut'), Noun.proper_noun('Bob'), PERIOD],
         [Pronoun.IT, Verb('have', 'had'), Pronoun.THEM, PERIOD]
     ]
     self.assertEqual(get_non_proper_nouns(raw_paragraph), [])
Example #13
0
 def test_get_non_proper_nouns_no_nouns(self):
     raw_paragraph = [
         [Pronoun.I, Verb('grab'), Pronoun.YOU, EXCLAMATION],
         [Pronoun.WE, Verb('cut', 'cut'), Pronoun.IT, PERIOD],
         [Pronoun.IT, Verb('have', 'had'), Pronoun.THEM, PERIOD]
     ]
     self.assertEqual(get_non_proper_nouns(raw_paragraph), [])
Example #14
0
    def test_equality_true_false_by_irregular_past(self):
        test = Verb('a', 'b', 'c', tags=self.past)
        equal = Verb('a', 'b', 'c', tags=self.past)
        not_equal = Verb('a', 'x', 'c', tags=self.past)

        self.assertEqual(test, equal)
        self.assertNotEqual(test, not_equal)
Example #15
0
    def test_random_sentences_sentence_with_phrasal_verb_two_obj_and_preposition(
            self):
        random.seed(789)
        verb_list = [{
            'verb': Verb('throw'),
            'preposition': BasicWord.preposition('for'),
            'objects': 2,
            'particle': BasicWord.particle('away')
        }]
        generator = RandomSentences(verb_list,
                                    self.countable + self.uncountable)
        answer = generator.sentence()
        expected = [
            Noun('dog'),
            Verb('throw'), US,
            BasicWord.particle('away'),
            BasicWord.preposition('for'),
            Noun('water'), EXCLAMATION
        ]
        self.assertEqual(answer, expected)

        answer = generator.sentence()
        expected = [
            Noun('rice'),
            Verb('throw'),
            BasicWord.particle('away'),
            Noun('water'),
            BasicWord.preposition('for'),
            Noun('frog'), PERIOD
        ]
        self.assertEqual(answer, expected)
Example #16
0
 def test_assign_objects_no_objects_no_particle_no_preposition(self):
     verb_dict = {
         'verb': Verb('chill'),
         'preposition': None,
         'objects': 0,
         'particle': None
     }
     self.assertEqual(assign_objects(verb_dict, []), [Verb('chill')])
Example #17
0
    def test_past_tense_past_verb(self):
        verb = Verb('played', '', 'play', tags=self.past)
        negative = verb.negative()
        self.assertNotEqual(verb, negative)

        self.assertEqual(verb.past_tense(), verb)
        self.assertEqual(verb.past_tense().past_tense(), verb)
        self.assertEqual(negative.past_tense(), negative)
        self.assertEqual(negative.past_tense().past_tense(), negative)
Example #18
0
 def test_assign_objects_one_object_no_particle_no_preposition(self):
     verb_dict = {
         'verb': Verb('like'),
         'preposition': None,
         'objects': 1,
         'particle': None
     }
     self.assertEqual(assign_objects(verb_dict, [Noun('dog')]),
                      [Verb('like'), Noun('dog')])
    def test_is_word_in_sentence_other(self):
        sentence = [BasicWord('tom'), Verb('dick'), Noun('harry')]
        self.assertTrue(is_word_in_sentence(BasicWord('tom'), sentence))
        self.assertTrue(is_word_in_sentence(Verb('dick'), sentence))
        self.assertTrue(is_word_in_sentence(Noun('harry'), sentence))

        self.assertFalse(is_word_in_sentence(Noun('tom'), sentence))
        self.assertFalse(is_word_in_sentence(BasicWord('dick'), sentence))
        self.assertFalse(is_word_in_sentence(Verb('harry'), sentence))
Example #20
0
 def test_assign_objects_two_objects_no_particle_no_preposition(self):
     verb_dict = {
         'verb': Verb('show'),
         'preposition': None,
         'objects': 2,
         'particle': None
     }
     self.assertEqual(
         assign_objects(verb_dict, [Noun('dog'), Noun('cat')]),
         [Verb('show'), Noun('dog'), Noun('cat')])
Example #21
0
    def test_negative_with_negative_verb(self):
        verb = Verb("don't play", '', 'play', tags=self.negative)
        self.assertEqual(verb.negative(), verb)
        self.assertEqual(verb.negative().negative(), verb)

        verb = Verb("doesn't play", '', 'play', tags=self.negative_third_person)
        self.assertEqual(verb.negative(), verb)

        verb = Verb("didn't play", '', 'play', tags=self.negative_past)
        self.assertEqual(verb.negative(), verb)
Example #22
0
 def test_generate_paragraph_uncountable_noun(self):
     raw_paragraph = [
         [Noun.uncountable_noun('water'), Verb('grab'), Noun.uncountable_noun('water'), PERIOD]
     ]
     grammarizer = Grammarizer(raw_paragraph, probability_negative_verb=0.0, probability_plural_noun=1.0)
     paragraph = grammarizer.generate_paragraph()
     expected = [[
         Noun('Water', '', 'water', tags=self.uncountable), Verb('grabs', '', 'grab', tags=self.third_person),
         Noun('the water', '', 'water', tags=self.definite_uncountable), PERIOD
     ]]
     self.assertEqual(paragraph, expected)
Example #23
0
    def test_get_non_proper_nouns_with_nouns(self):
        paragraph = [
            [Noun('money'), Verb('grab'), Noun('tea'), EXCLAMATION],
            [Noun('tea'), Verb('ride', 'rode'), Noun('apple'), PERIOD],
            [Noun('apple'), Verb('surprise'), Noun('gold'), PERIOD],
            [Noun('gold'), Verb('cut', 'cut'), Noun.proper_noun('Joe'), PERIOD],
            [Pronoun.IT, Verb('have', 'had'), Noun('watch'), PERIOD]
        ]

        self.assertEqual(get_non_proper_nouns(paragraph),
                         [Noun('money'), Noun('tea'), Noun('apple'), Noun('gold'), Noun('watch')])
Example #24
0
 def test_generate_paragraph_present_tense_third_person_negative(self):
     raw_paragraph = [
         [Noun.uncountable_noun('water'), Verb('grab'), Noun.uncountable_noun('water'), EXCLAMATION],
         [Noun('cat'), Verb('grab'), Noun('cat'), EXCLAMATION],
         [Noun.proper_noun('Joe'), Verb('grab'), Noun('cat')]
     ]
     grammarizer = Grammarizer(raw_paragraph, probability_negative_verb=1.0, probability_plural_noun=0.0)
     paragraph = grammarizer.generate_paragraph()
     target_verb = Verb("doesn't grab", '', 'grab', tags=self.negative_third_person)
     for sentence in paragraph:
         self.assertEqual(sentence[1], target_verb)
Example #25
0
 def test_grammarizer_noun_info_property_is_copy(self):
     paragraph = [
         [Noun('money'), Verb('grab'), Noun('tea'), EXCLAMATION],
         [Pronoun.IT, Verb('have', 'had'), Noun('watch'), PERIOD]
     ]
     grammarizer = Grammarizer(paragraph)
     info_1 = grammarizer.noun_info
     info_2 = grammarizer.noun_info
     self.assertEqual(info_1, info_2)
     self.assertIsNot(info_1, info_2)
     self.assertIsNot(info_1[Noun('money')], info_2[Noun('money')])
    def test_requires_third_person(self):
        answer = [it, Verb('steal', 'stole'), her, exclamation]
        self.assertTrue(requires_third_person(answer))

        answer = [Noun('teacher', ''), Verb('take', 'took'), me, period]
        self.assertTrue(requires_third_person(answer))

        answer[0] = answer[0].plural()
        self.assertFalse(requires_third_person(answer))

        answer[0] = you
        self.assertFalse(requires_third_person(answer))
Example #27
0
 def test_generate_paragraph_returns_sentences_with_capitals(self):
     paragraph = [
         [Noun('money'), Verb('grab'), Noun('tea'), EXCLAMATION],
         [Noun('tea'), Verb('ride', 'rode', ''), Noun('apple'), PERIOD],
         [Noun('apple'), Verb('surprise'), Noun('gold'), PERIOD],
         [Noun.proper_noun('the Dude'), Verb('cut', 'cut', ''), Pronoun.IT, PERIOD],
         [Pronoun.IT, Verb('have', 'had', ''), Noun('watch'), PERIOD]
     ]
     grammarizer = Grammarizer(paragraph)
     paragraph = grammarizer.generate_paragraph()
     for sentence in paragraph:
         self.assertIn(sentence[0].value[0], string.ascii_uppercase)
Example #28
0
 def test_grammarizer_reset_definite_nouns(self):
     paragraph = [
         [Noun('money'), Verb('grab'), Noun('tea'), EXCLAMATION],
         [Pronoun.IT, Verb('have', 'had'), Noun('watch'), PERIOD]
     ]
     grammarizer = Grammarizer(paragraph)
     grammarizer.generate_paragraph()
     for noun_dict in grammarizer.noun_info.values():
         self.assertTrue(noun_dict['definite'])
     grammarizer.reset_definite_nouns()
     for noun_dict in grammarizer.noun_info.values():
         self.assertFalse(noun_dict['definite'])
Example #29
0
 def test_two_objects_the_same_when_no_other_options(self):
     random.seed(101)
     verb_list = [{
         'verb': Verb('give'),
         'preposition': None,
         'objects': 2,
         'particle': None
     }]
     generator = RandomSentences(verb_list, [Noun('dog')])
     self.assertEqual(
         generator.predicate(),
         [Verb('give'), Noun('dog'),
          Noun('dog'), PERIOD])
 def test_create_chain_paragraph_assigns_random_subj_if_no_obj(self):
     random.seed(11)
     verb_list = [{
         'verb': Verb('jump'),
         'preposition': None,
         'objects': 0,
         'particle': None
     }]
     rp = RandomParagraph(0.2, verb_list, self.countable + self.uncountable)
     answer = rp.create_chain_paragraph(3)
     expected = [[Noun('sand'), Verb('jump'), EXCLAMATION],
                 [Noun('frog'), Verb('jump'), EXCLAMATION],
                 [Noun('pig'), Verb('jump'), PERIOD]]
     self.assertEqual(expected, answer)