Beispiel #1
0
def members_letter(request, letter):
    member_index = defaultdict(lambda: defaultdict(list))

    for fs in VerbNetFrameSet.objects.prefetch_related(
            'verbnet_class', 'verbnet_class__levin_class',
            Prefetch('verbtranslation_set',
                     queryset=VerbTranslation.objects.filter(verb__startswith=letter),
                     to_attr='filtered_verbs')):
        if fs.removed:
            continue

        for verbtranslation in VerbTranslation.all_valid(fs.filtered_verbs):
            member_index[verbtranslation.verb][fs.verbnet_class.levin_class.number].append(fs)

    for verb in member_index:
        for levin_group in member_index[verb]:
            member_index[verb][levin_group] = sorted(member_index[verb][levin_group], key=lambda fs: LooseVersion(fs.name))
        member_index[verb] = OrderedDict(sorted(member_index[verb].items(), key=lambda kv: LooseVersion(kv[0])))
    member_index = OrderedDict(sorted(member_index.items(), key=lambda kv: locale.strxfrm(kv[0])))

    return render(request, 'member_index.html', {
        'member_index': member_index,
        'active_letter': letter,
        'letter_list': [
            'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
            'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
    })
 def test_black(self):
     VerbTranslation(frameset=self.frameset, verb='translation_child-1',
                     category_id=3, category='dicovalence',
                     validation_status=VerbTranslation.STATUS_VALID).save()
     VerbTranslation(frameset=self.frameset, verb='translation_child-2',
                     category_id=3, category='dicovalence',
                     validation_status=VerbTranslation.STATUS_INFERRED).save()
     self.assertEqual(len(VerbTranslation.all_valid(self.frameset.verbtranslation_set.all())), 1)
    def test_red(self):
        VerbTranslation(frameset=self.frameset, verb='translation_child-1',
                        category_id=1, category='ladl',
                        validation_status=VerbTranslation.STATUS_VALID).save()
        VerbTranslation(frameset=self.frameset, verb='translation_child-2',
                        category_id=1, category='ladl',
                        validation_status=VerbTranslation.STATUS_INFERRED).save()

        # When validated verbs exist, the inferred one are not consider valid
        self.assertEqual(len(VerbTranslation.all_valid(self.frameset.verbtranslation_set.all())), 1)
Beispiel #4
0
def count_verbs():
    unique_validated_verbs, unique_members = set(), set()
    num_framesets, num_classes, num_validated_verbs, num_members = 0, 0, 0, 0
    for vn_class in VerbNetClass.objects.prefetch_related(
        'verbnetframeset_set',
        'verbnetframeset_set__verbnetmember_set',
        'verbnetframeset_set__verbtranslation_set').all():

        num_classes += 1
        for vn_fs in vn_class.verbnetframeset_set.all():
            num_framesets += 1
            for t in VerbTranslation.all_valid(vn_fs.verbtranslation_set.all()):
                unique_validated_verbs.add(t.verb)
                num_validated_verbs += 1
            for m in vn_fs.verbnetmember_set.all():
                unique_members.add(m.lemma)
                num_members += 1

    return num_members, unique_members, num_validated_verbs, unique_validated_verbs, num_classes, num_framesets
Beispiel #5
0
def export_subclass(db_frameset, classname):
    global handled_frames, total_frames

    element_name = 'VNCLASS' if db_frameset.parent is None else 'VNSUBCLASS'
    class_word_name = classname.split('-')[0]
    assert re.match('^[-0-9.]+$', '-'.join(classname.split('-')[1:]))
    element_id = '-'.join([class_word_name, db_frameset.name])
    xml_vnclass = ET.Element(element_name, {'ID': element_id})

    # LADL/LVF
    if db_frameset.ladl_string:
       xml_vnclass.set('ladl', db_frameset.ladl_string)
    if db_frameset.lvf_string:
       xml_vnclass.set('lvf', db_frameset.lvf_string)

    # Members
    xml_members = ET.SubElement(xml_vnclass, 'MEMBERS')
    db_translation_list = VerbTranslation.all_valid(db_frameset.verbtranslation_set.all())
    member_list = sorted(
        [db_translation.verb for db_translation in db_translation_list], key=sort_key)
    for member in member_list:
        ET.SubElement(xml_members, 'MEMBER', {'name': member})

    # Roles
    xml_role_list = ET.SubElement(xml_vnclass, 'THEMROLES')
    for db_role in db_frameset.verbnetrole_set.all():
        role, *selrestr_split = db_role.name.split(' ')
        xml_role = ET.SubElement(xml_role_list, 'THEMROLE', {'type': role})
        if selrestr_split:
            xml_role.append(role_selrestr(selrestr_split))

    # Frames
    xml_frames = ET.SubElement(xml_vnclass, 'FRAMES')
    for db_frame in db_frameset.verbnetframe_set.filter(removed=False):
        frame = ET.SubElement(xml_frames, 'FRAME')
        ET.SubElement(frame, 'DESCRIPTION', primary=db_frame.syntax, syntax=db_frame.roles_syntax)

        # Example
        examples = ET.SubElement(frame, 'EXAMPLES')
        example = ET.SubElement(examples, 'EXAMPLE')
        example.text = db_frame.example

        # Syntax
        syntax = ET.SubElement(frame, 'SYNTAX')
        syntax.text = db_frame.roles_syntax

        total_frames += 1
        output = io.StringIO()
        print(example.text, file=output)
        try:
            parsed_frame = merge_primary_and_syntax(db_frame.syntax, db_frame.roles_syntax, output)
            syntax = xml_of_syntax(parsed_frame)
            ET.tostring(syntax)
            frame.remove(frame.find('SYNTAX'))
            frame.append(syntax)
            handled_frames += 1
        except Exception as e:
            print('Oops')
            print(output.getvalue())
            print(e)
            print()
            pass

        # Semantics
        semantics = ET.SubElement(frame, 'SEMANTICS')
        semantics.text = db_frame.semantics

    if db_frameset.children.filter(removed=False):
        xml_subclass_list = ET.SubElement(xml_vnclass, 'SUBCLASSES')

    for db_childfs in db_frameset.children.filter(removed=False):
        xml_subclass = export_subclass(db_childfs, classname=classname)
        xml_subclass_list.append(xml_subclass)

    return xml_vnclass