コード例 #1
0
 def test_minimal_flag_set(self):
     # for brevity
     s = sorted
     mfs = morphotactics.minimal_flag_set
     ch = customize.choices.ChoicesFile()
     ch.load_choices(lextypes + con_dis_junctive)
     preceeds = morphotactics.create_preceeds_dict(ch)
     # no constraints
     self.assertEqual(mfs({}, preceeds), [])
     # single constraint (a or b forces c)
     self.assertEqual(mfs(('verb-slot3', ), preceeds), [('verb-slot3', )])
     # two constraints, sequential
     self.assertEqual(s(mfs(('verb-slot3', 'verb-slot4'), preceeds)),
                      [('verb-slot3', ), ('verb-slot4', )])
     # two constraints, non-sequential, same value
     self.assertEqual(s(mfs(('verb-slot4', 'verb-slot5'), preceeds)), [(
         'verb-slot4',
         'verb-slot5',
     )])
     # four constraints, two non-seq, same val, other two non seq, same val
     self.assertEqual(
         s(
             mfs(('verb-slot1', 'verb-slot2', 'verb-slot4', 'verb-slot5'),
                 preceeds)), [(
                     'verb-slot1',
                     'verb-slot2',
                 ), (
                     'verb-slot4',
                     'verb-slot5',
                 )])
     ch = customize.choices.ChoicesFile()
     ch.load_choices(lextypes + extended_con_dis_junctive1)
     preceeds = morphotactics.create_preceeds_dict(ch)
     # disjunctive and sequential constrainted, all same value
     self.assertEqual(
         s(mfs(('verb-slot4', 'verb-slot5', 'verb-slot6'), preceeds)), [(
             'verb-slot4',
             'verb-slot5',
         ), (
             'verb-slot5',
             'verb-slot6',
         )])
     ch.load_choices(lextypes + extended_con_dis_junctive2)
     preceeds = morphotactics.create_preceeds_dict(ch)
     # disjunctive and sequential constrainted, all same value
     self.assertEqual(
         s(
             mfs(('verb-slot4', 'verb-slot5', 'verb-slot6', 'verb-slot7'),
                 preceeds)), [(
                     'verb-slot4',
                     'verb-slot5',
                 ), (
                     'verb-slot6',
                     'verb-slot7',
                 )])
コード例 #2
0
    def test_create_lexical_rules(self):
        clrs = morphotactics.create_lexical_rules
        # no rules
        ch = customize.choices.ChoicesFile()
        ch.load_choices(lextypes)
        preceeds = morphotactics.create_preceeds_dict(ch)
        self.assertEqual(clrs(ch, preceeds), {})
        # no-orth noun
        ch = customize.choices.ChoicesFile()
        ch.load_choices(lextypes + simple_no_orth)
        preceeds = morphotactics.create_preceeds_dict(ch)
        lrs = clrs(ch, preceeds)
        self.assertEqual(len(lrs), 2)
        self.assertEqual(lrs['noun-slot1'].name, 'num')
        self.assertEqual(lrs['noun-slot1'].slot_key, 'noun-slot1')
        self.assertEqual(lrs['noun-slot1'].order, 'after')
        self.assertEqual(len(lrs['noun-slot1'].morphs), 1)
        self.assertEqual(lrs['noun-slot1'].morphs[0].name, 'singular')
        self.assertEqual(lrs['noun-slot1'].morphs[0].features,
                         {'number': {
                             'value': 'sg',
                             'head': None
                         }})
        self.assertEqual(lrs['noun1'].name, 'testnoun-noun')
        self.assertEqual(lrs['noun1'].slot_key, 'noun1')
        # multiple basetypes

        # sequential verb slots
        ch = customize.choices.ChoicesFile()
        ch.load_choices(lextypes + sequential_verb_slots)
        preceeds = morphotactics.create_preceeds_dict(ch)
        lrs = clrs(ch, preceeds)
        self.assertEqual(len(lrs), 5)
        self.assertEqual(lrs['verb-slot1'].name, 'person')
        self.assertEqual(lrs['verb-slot1'].slot_key, 'verb-slot1')
        self.assertEqual(lrs['verb-slot1'].order, 'after')
        self.assertEqual(len(lrs['verb-slot1'].morphs), 1)
        self.assertEqual(lrs['verb-slot1'].morphs[0].name, '3sg')
        self.assertEqual(len(lrs['verb-slot1'].morphs), 1)
        self.assertEqual(len(lrs['verb-slot2'].morphs), 2)
        self.assertEqual(len(lrs['verb-slot3'].morphs), 1)
コード例 #3
0
 def test_sequential(self):
     # for brevity
     seq = morphotactics.sequential
     ch = customize.choices.ChoicesFile()
     ch.load_choices(lextypes + con_dis_junctive)
     preceeds = morphotactics.create_preceeds_dict(ch)
     self.assertEqual(seq('verb-slot1', 'verb-slot2', preceeds), False)
     self.assertEqual(seq('verb-slot2', 'verb-slot1', preceeds), False)
     self.assertEqual(seq('verb-slot1', 'verb-slot3', preceeds), True)
     self.assertEqual(seq('verb-slot3', 'verb-slot1', preceeds), True)
     self.assertEqual(seq('verb-slot2', 'verb-slot3', preceeds), True)
     self.assertEqual(seq('verb-slot3', 'verb-slot2', preceeds), True)
     self.assertEqual(seq('verb-slot3', 'verb-slot4', preceeds), True)
     self.assertEqual(seq('verb-slot4', 'verb-slot3', preceeds), True)
     self.assertEqual(seq('verb-slot1', 'verb-slot4', preceeds), True)
     self.assertEqual(seq('verb-slot4', 'verb-slot1', preceeds), True)
     self.assertEqual(seq('verb-slot4', 'verb-slot5', preceeds), False)
     self.assertEqual(seq('verb-slot5', 'verb-slot4', preceeds), False)
     self.assertEqual(seq('verb-slot1', 'verb-slot1', preceeds), False)
     self.assertEqual(seq('verb-slot42', 'verb-slot99', preceeds), False)
コード例 #4
0
 def test_ordered_constraints(self):
     # for brevity
     oc = morphotactics.ordered_constraints
     ch = customize.choices.ChoicesFile()
     ch.load_choices(lextypes + extended_con_dis_junctive2)
     preceeds = morphotactics.create_preceeds_dict(ch)
     # one slot
     self.assertEqual(oc(['verb-slot1'], preceeds), ['verb-slot1'])
     # nonsequential, ordered by name
     self.assertEqual(oc(['verb-slot1', 'verb-slot2'], preceeds),
                      ['verb-slot1', 'verb-slot2'])
     # nonsequential, not ordered by name
     self.assertEqual(oc(['verb-slot2', 'verb-slot1'], preceeds),
                      ['verb-slot1', 'verb-slot2'])
     # sequential
     self.assertEqual(oc(['verb-slot4', 'verb-slot1'], preceeds),
                      ['verb-slot1', 'verb-slot4'])
     # sequential and nonsequential
     self.assertEqual(
         oc(['verb-slot7', 'verb-slot5', 'verb-slot4', 'verb-slot6'],
            preceeds),
         ['verb-slot4', 'verb-slot5', 'verb-slot6', 'verb-slot7'])
コード例 #5
0
 def test_create_preceeds_dict(self):
     # no slots
     choices = customize.choices.ChoicesFile()
     choices.load_choices(lextypes)
     self.assertEqual(morphotactics.create_preceeds_dict(choices), {})
     # single slot
     choices = customize.choices.ChoicesFile()
     choices.load_choices(lextypes + simple_no_orth)
     self.assertEqual(morphotactics.create_preceeds_dict(choices),
                      {'noun-slot1': set(['noun1'])})
     # two morphemes (no different)
     choices = customize.choices.ChoicesFile()
     choices.load_choices(lextypes + two_morphemes)
     self.assertEqual(morphotactics.create_preceeds_dict(choices),
                      {'noun-slot1': set(['noun1'])})
     # competing slots
     choices = customize.choices.ChoicesFile()
     choices.load_choices(lextypes + competing_slots)
     self.assertEqual(morphotactics.create_preceeds_dict(choices), {
         'noun-slot1': set(['noun1']),
         'noun-slot2': set(['noun1'])
     })
     # sequential slots
     choices = customize.choices.ChoicesFile()
     choices.load_choices(lextypes + sequential_slots)
     self.assertEqual(
         morphotactics.create_preceeds_dict(choices), {
             'noun-slot1': set(['noun1']),
             'noun-slot2': set(['noun-slot1', 'noun1'])
         })
     # multiple basetypes, multiple inputs
     choices = customize.choices.ChoicesFile()
     choices.load_choices(lextypes + sequential_verb_slots)
     self.assertEqual(
         morphotactics.create_preceeds_dict(choices), {
             'verb-slot1': set(['verb1', 'verb2']),
             'verb-slot2': set(['verb-slot1', 'verb1', 'verb2']),
             'verb-slot3': set(
                 ['verb-slot1', 'verb-slot2', 'verb1', 'verb2'])
         })
コード例 #6
0
 def prep_lrs(choice_lines):
     ch = customize.choices.ChoicesFile()
     ch.load_choices(choice_lines)
     preceeds = morphotactics.create_preceeds_dict(ch)
     lrs = morphotactics.create_lexical_rules(ch, preceeds)
     return lrs, preceeds, ch