def main():
    parser = argparse.ArgumentParser(
        description=
        "Split a synset - delete the synset and add two (or more) new synsets")
    parser.add_argument('synset',
                        metavar='SYNSET_ID',
                        type=str,
                        nargs="?",
                        help="The ID of the synset to change")
    parser.add_argument(
        '--definition',
        type=str,
        action='append',
        help="The definition of the new synsets (repeat for each synset)")
    parser.add_argument(
        '--reason',
        type=str,
        nargs="?",
        help="The reason for this change including issue number")

    args = parser.parse_args()

    wn = change_manager.load_wordnet()

    if not args.synset:
        args.synset = "ewn-" + input("Enter synset ID: ewn-")
    synset = wn.synset_by_id(args.synset)

    if not synset:
        print("Cannot find synset")
        exit(-1)

    if not args.definition:
        args.definition = []
        print("Enter definitions (empty line to finish)")
        while True:
            d1 = input("Definition: ")
            if d1:
                args.definition.append(d1)
            else:
                break

    if not args.definition:
        print("No new definitions")
        exit(-1)

    if not args.reason:
        args.reason = input("Reason for deletion (#IssueNo): ")

    new_ids = []
    for definition in args.definition:
        new_ids.append(
            change_manager.add_synset(wn, definition, synset.lexfile,
                                      synset.pos))

    change_manager.delete_synset(
        wn, synset, [wn.synset_for_id(new_id) for new_id in new_ids],
        args.reason)
    change_manager.save_all_xml(wn)
Example #2
0
def main():
    print("")
    print("         ,ww                             ")
    print("   wWWWWWWW_)  Welcome to EWE            ")
    print("   `WWWWWW'    - English WordNet Editor  ")
    print("    II  II                               ")
    print("")

    wn = change_manager.load_wordnet()

    while main_menu(wn):
        pass
def main():
    parser = argparse.ArgumentParser(
        description="Add or remove an entry from a synset")
    parser.add_argument('synset',
                        metavar='SYNSET_ID',
                        type=str,
                        help="The ID of the synset to change")
    parser.add_argument('lemma',
                        metavar='LEMMA',
                        type=str,
                        help="The lemma to change")
    parser.add_argument('--add',
                        action='store_true',
                        help="Add this relation as a new relation")
    parser.add_argument('--delete',
                        action='store_true',
                        help="Remove this relation (do not replace or change)")
    parser.add_argument(
        '-n',
        metavar='N',
        type=int,
        default=-1,
        help=
        "The position of this synset within the list of senses for the entry")
    parser.add_argument('-i',
                        metavar='IDX',
                        type=int,
                        default=-1,
                        help="The position of this lemma in the synset")

    args = parser.parse_args()

    wn = change_manager.load_wordnet()

    synset = wn.synset_by_id(args.synset)

    if not synset:
        print("Could not find synset")
        sys.exit(-1)

    if args.add:
        change_manager.add_entry(wn, synset, args.lemma, args.i, args.n)
    elif args.delete:
        change_manager.delete_entry(
            wn, synset, "ewn-%s-%s" % (change_manager.escape_lemma(
                args.lemma), synset.part_of_speech.value))
    else:
        print("No action chosen")
        sys.exit(-1)
Example #4
0
def main():
    parser = argparse.ArgumentParser(description="Add or remove a synset")
    parser.add_argument('synset',
                        metavar='SYNSET_ID',
                        type=str,
                        help="The ID of the synset to change")
    parser.add_argument('--add',
                        action='store_true',
                        help="Add this relation as a new relation")
    parser.add_argument('--delete',
                        action='store_true',
                        help="Remove this relation (do not replace or change)")
    parser.add_argument('--reason',
                        type=str,
                        help="The reason for a deletion or merge")

    args = parser.parse_args()

    wn = change_manager.load_wordnet()

    synset = wn.synset_by_id(args.synset)

    if not synset:
        print("Could not find synset")
        sys.exit(-1)

    if args.add:
        change_manager.add_synset(wn, synset, args.defintion)
    elif args.delete:
        if not args.reason:
            print("Please give a reason for deletion")
            sys.exit(-1)
        change_manager.delete_synset(wn, synset)

        with open("src/deprecations.csv", 'a') as f:
            writer = csv.writer(f)
            writer.writerow([synset.id, synset.ili, '', '', args.reason])
    else:
        print("No action chosen")
        sys.exit(-1)
Example #5
0
            return entry_id, "99"
    print("Failed to find target for satellite synset")
    exit(-1)


def assign_keys(wn, wn_file):
    swn = parse_wordnet(wn_file)
    for e in swn.entries:
        for s in e.senses:
            if not s.sense_key:
                lemma = e.lemma.written_form.replace(" ", "_").replace(
                    "&apos", "'").lower()
                ss_type = ss_types[e.lemma.part_of_speech]
                lex_filenum = lex_filenums[wn_file]
                lex_id = gen_lex_id(swn, e, s)
                if e.lemma.part_of_speech == PartOfSpeech.ADJECTIVE_SATELLITE:
                    head_word, head_id = get_head_word(wn, s)
                else:
                    head_word = ""
                    head_id = ""
                s.sense_key = "%s%%%d:%02d:%02d:%s:%s" % (
                    lemma, ss_type, lex_filenum, lex_id, head_word, head_id)
    with open(wn_file, "w") as outp:
        swn.to_xml(outp, True)


if __name__ == "__main__":
    wn = change_manager.load_wordnet()
    for f in glob("src/wn-*.xml"):
        assign_keys(wn, f)
Example #6
0
def main():
    parser = argparse.ArgumentParser(
        description=
        "Merge a synset - delete one or more synset and merge all properties. This may create weird or contradictory results so should be used with care"
    )
    parser.add_argument('synsets',
                        metavar='SYNSET_ID',
                        type=str,
                        nargs="*",
                        help="The ID of the synset to change")
    parser.add_argument(
        '--reason',
        type=str,
        nargs="?",
        help="The reason for this change including issue number")
    parser.add_argument('--lex_file',
                        type=str,
                        help="The lex file to write the new synset to")

    args = parser.parse_args()

    wn = change_manager.load_wordnet()

    if not args.synsets:
        args.synsets = []
        print("Enter synsets (empty line to finish)")
        while True:
            id1 = input("Enter synset ID: ewn-")
            if id1:
                args.synsets.append("ewn-" + id1)
            else:
                break

    if not args.synsets:
        print("Need at least one synset to merge")
        exit(-1)

    synsets = [wn.synset_by_id(ss) for ss in args.synsets]

    if any(s == None for s in synsets):
        print("Cannot find synset")
        exit(-1)

    if any(s.part_of_speech != synsets[0].part_of_speech for s in synsets):
        print("Merging across parts of speech is not correct!")
        exit(-1)

    if not args.lex_file and any(s.lex_name != synsets[0].lex_name
                                 for s in synsets):
        print("Merging across lex files: " + ", ".join(s.lex_name
                                                       for s in synsets))
        args.lex_file = input("Lex file : ")
    elif not args.lex_file:
        args.lex_file = synsets[0].lex_name

    if not args.reason:
        args.reason = input("Reason for deletion (#IssueNo): ")

    new_id = change_manager.merge_synset(wn, synsets, args.reason,
                                         args.lex_file)

    for synset in synsets:
        change_manager.delete_synset(wn, synset, [new_id], args.reason)
def main():
    parser = argparse.ArgumentParser(
        description="Add or remove an entry from a synset")
    parser.add_argument('synset',
                        metavar='SYNSET_ID',
                        type=str,
                        nargs="?",
                        help="The ID of the synset to change")
    parser.add_argument('lemma',
                        metavar='LEMMA',
                        type=str,
                        nargs="?",
                        help="The lemma to change")
    parser.add_argument('--add',
                        action='store_true',
                        help="Add this relation as a new relation")
    parser.add_argument('--delete',
                        action='store_true',
                        help="Remove this relation (do not replace or change)")
    parser.add_argument(
        '-n',
        metavar='N',
        type=int,
        default=-1,
        help=
        "The position of this synset within the list of senses for the entry")
    parser.add_argument('-i',
                        metavar='IDX',
                        type=int,
                        default=-1,
                        help="The position of this lemma in the synset")

    args = parser.parse_args()

    if args.add:
        action = "A"
    elif args.delete:
        action = "D"
    else:
        action = input("[A]dd/[D]elete? ").upper()
        if action != "A" and action != "D":
            print("Bad action")
            sys.exit(-1)

    wn = change_manager.load_wordnet()

    if not args.synset:
        synset_id = "ewn-" + input("Enter synset ID : ewn-")
    else:
        synset_id = args.synset

    synset = wn.synset_by_id(synset_id)

    entries = wn.members_by_id(synset_id)
    if entries:
        print("Entries: " + ", ".join(entries))
    else:
        print("No entries")

    if not args.lemma:
        if action == "A":
            lemma = input("New entry: ")
        elif action == "D":
            lemma = input("Entry to remove: ")
    else:
        lemma = args.lemma

    if not synset:
        print("Could not find synset")
        sys.exit(-1)

    if action == "A":
        change_manager.add_entry(wn, synset, lemma, args.i, args.n)
    elif action == "D":
        change_manager.delete_entry(
            wn, synset, "ewn-%s-%s" %
            (change_manager.escape_lemma(lemma), synset.part_of_speech.value))
Example #8
0
def main():
    parser = argparse.ArgumentParser(
        description="Change a relationship within the wordnet")
    parser.add_argument(
        'source_id',
        metavar='SOURCE_ID',
        type=str,
        nargs="?",
        help="The ID of the source synset (sense) for the relationship")
    parser.add_argument(
        'target_id',
        metavar='TARGET_ID',
        type=str,
        nargs="?",
        help="The ID of the target synset (sense) for the relationship")
    parser.add_argument('--new-source',
                        type=str,
                        help="The ID of the new source synset")
    parser.add_argument('--new-target',
                        type=str,
                        help="The ID of the new target synset")
    parser.add_argument('--new-relation',
                        type=str,
                        help="The type of the new relationship")
    parser.add_argument('--add',
                        action='store_true',
                        help="Add this relation as a new relation")
    parser.add_argument('--delete',
                        action='store_true',
                        help="Remove this relation (do not replace or change)")
    parser.add_argument('--reverse',
                        action='store_true',
                        help="Reverse this relation (swap source and target)")

    args = parser.parse_args()

    # Slightly speeds up the loading of WordNet
    wn = change_manager.load_wordnet()

    if not args.source_id:
        args.source_id = "ewn-" + input("Enter source synset ID: ewn-")

    if change_manager.sense_id_re.match(args.source_id):
        (source_id,
         source_entry_id) = change_manager.decompose_sense_id(args.source_id)
    else:
        source_id = args.source_id
        source_entry_id = None

    source_synset = wn.synset_by_id(source_id)

    if not source_synset:
        print("Could not find the source synset %s" % source_id)
        sys.exit(-1)

    if not args.target_id:
        args.target_id = "ewn-" + input("Enter target synset ID: ewn-")

    if change_manager.sense_id_re.match(args.target_id):
        (target_id,
         target_entry_id) = change_manager.decompose_sense_id(args.target_id)
    else:
        target_id = args.target_id
        target_entry_id = None

    target_synset = wn.synset_by_id(target_id)

    if not target_synset:
        print("Could not find the target synset %s" % target_id)
        sys.exit(-1)

    if not args.new_source and not args.new_target and not args.new_relation and not args.delete:
        mode = input(
            "[A]dd new relation/[D]elete existing relation/[R]everse relation/[C]hange relation: "
        ).lower()
        if mode == "a":
            args.add = True
            if not args.new_relation:
                args.new_relation = input("Enter new relation: ")
        elif mode == "c":
            mode = input("Change [S]ubject/[T]arget/[R]elation: ").lower()
            if mode == "s":
                args.new_source = with_ewn(
                    input("Enter new source (or blank for no change): ewn-"))
            elif mode == "t":
                args.new_target = with_ewn(
                    input("Enter new target (or blank for no change): ewn-"))
            elif mode == "r":
                args.new_relation = input(
                    "Enter new relation (or blank for no change): ewn-")
            else:
                print("Bad choice")
                sys.exit(-1)
        elif mode == "d":
            args.delete = True
        elif mode == "r":
            args.reverse = True
        else:
            print("Bad mode")
            sys.exit(-1)

    if args.new_source:
        if args.new_target or args.new_relation:
            print("Please perform a single change at a time")
            sys.exit(-1)
        if args.add or args.delete:
            print(
                "Specifying new source when adding or deleting does not make sense"
            )
            sys.exit(-1)

        if source_entry_id or target_entry_id:
            if not change_manager.sense_exists(wn, args.source_id):
                print("Source sense %d does not exist" % args.source_id)
                sys.exit(-1)
            if not change_manager.sense_exists(wn, args.target_id):
                print("Target sense %d does not exist" % args.target_id)
                sys.exit(-1)
            if not change_manager.sense_exists(wn, args.new_source):
                print("New source sense %d does not exist" % args.new_source)
                sys.exit(-1)
            change_manager.update_source_sense(wn, args.source_id,
                                               args.target_id, args.new_source)
        else:
            new_source = wn.synset_by_id(args.new_source)

            if not new_source:
                print("Could not find the new source synset %s" %
                      args.new_source)
                sys.exit(-1)

            change_manager.update_source(wn, source_synset, target_synset,
                                         new_source)

    elif args.new_target:
        if args.new_source or args.new_relation:
            print("Please perform a single change at a time")
            sys.exit(-1)
        if args.add or args.delete:
            print(
                "Specifying new source when adding or deleting does not make sense"
            )
            sys.exit(-1)
        if source_entry_id or target_entry_id:
            if not change_manager.sense_exists(wn, args.source_id):
                print("Source sense %d does not exist" % args.source_id)
                sys.exit(-1)
            if not change_manager.sense_exists(wn, args.target_id):
                print("Target sense %d does not exist" % args.target_id)
                sys.exit(-1)
            if not change_manager.sense_exists(wn, args.new_target):
                print("New target sense %d does not exist" % args.new_target)
                sys.exit(-1)
            change_manager.update_target_sense(wn, args.source_id,
                                               args.target_id, args.new_target)
        else:
            new_target = wn.synset_by_id(args.new_target)

            if not new_target:
                print("Could not find the new target synset %s" %
                      args.new_target)
                sys.exit(-1)

            change_manager.update_target(wn, source_synset, target_synset,
                                         new_target)

    elif args.new_relation:
        if args.new_source or args.new_target:
            print("Please perform a single change at a time")
            sys.exit(-1)

        if source_entry_id:
            if args.new_relation not in wordnet.SenseRelType._value2member_map_:
                print("Not a valid relation type %s" % args.new_relation)
                sys.exit(-1)
        else:
            if args.new_relation not in wordnet.SynsetRelType._value2member_map_:
                print("Not a valid relation type %s" % args.new_relation)
                sys.exit(-1)

        if args.add:
            if args.delete:
                print("Cannot both add and delete a relation")
                sys.exit(-1)
            if source_entry_id or target_entry_id:
                if not change_manager.sense_exists(wn, args.source_id):
                    print("Source sense %d does not exist" % args.source_id)
                    sys.exit(-1)
                if not change_manager.sense_exists(wn, args.target_id):
                    print("Target sense %d does not exist" % args.target_id)
                    sys.exit(-1)
                change_manager.add_sense_relation(
                    wn, args.source_id, args.target_id,
                    wordnet.SenseRelType(args.new_relation))
            else:
                change_manager.add_relation(
                    wn, source_synset, target_synset,
                    wordnet.SynsetRelType(args.new_relation))
        elif args.delete:
            if source_entry_id or target_entry_id:
                if not change_manager.sense_exists(wn, args.source_id):
                    print("Source sense %d does not exist" % args.source_id)
                    sys.exit(-1)
                if not change_manager.sense_exists(wn, args.target_id):
                    print("Target sense %d does not exist" % args.target_id)
                    sys.exit(-1)
                change_manager.delete_sense_relation(wn, args.source_id,
                                                     args.target_id)
            else:
                change_manager.delete_relation(wn, source_synset,
                                               target_synset)
        else:
            if source_entry_id or target_entry_id:
                if not change_manager.sense_exists(wn, args.source_id):
                    print("Source sense %d does not exist" % args.source_id)
                    sys.exit(-1)
                if not change_manager.sense_exists(wn, args.target_id):
                    print("Target sense %d does not exist" % args.target_id)
                    sys.exit(-1)
                change_manager.update_sense_relation(
                    wn, args.source_id, args.target_id,
                    wordnet.SenseRelType(args.new_relation))
            else:
                change_manager.update_relation(
                    wn, source_synset, target_synset,
                    wordnet.SynsetRelType(args.new_relation))
    elif args.delete:
        if args.add:
            print("Cannot both add and delete a relation")
            sys.exit(-1)
        if source_entry_id or target_entry_id:
            if not change_manager.sense_exists(wn, args.source_id):
                print("Source sense %d does not exist" % args.source_id)
                sys.exit(-1)
            if not change_manager.sense_exists(wn, args.target_id):
                print("Target sense %d does not exist" % args.target_id)
                sys.exit(-1)
            change_manager.delete_sense_relation(wn, args.source_id,
                                                 args.target_id)
        else:
            change_manager.delete_relation(wn, source_synset, target_synset)
    elif args.reverse:
        if source_entry_id or target_entry_id:
            if not change_manager.sense_exists(wn, args.source_id):
                print("Source sense %d does not exist" % args.source_id)
                sys.exit(-1)
            if not change_manager.sense_exists(wn, args.target_id):
                print("Target sense %d does not exist" % args.target_id)
                sys.exit(-1)
            change_manager.reverse_sense_rel(wn, args.source_id,
                                             args.target_id)
        else:
            change_manager.reverse_rel(wn, source_synset, target_synset)

    else:
        print("No change specified")
Example #9
0
def main():
    parser = argparse.ArgumentParser(description="Add or remove a synset")
    parser.add_argument('synset', metavar='SYNSET_ID', type=str, nargs="?",
                        help="The ID of the synset to change")
    parser.add_argument('--add', action='store_true',
                        help="Add this synset")
    parser.add_argument('--delete', action='store_true',
                        help="Remove this synset")
    parser.add_argument(
        '--reason',
        type=str,
        help="The reason for a deletion or merge (required for deletion)")
    parser.add_argument('--definition', type=str,
                        help="The definition of the new synset")
    parser.add_argument('--lexfile', type=str,
                        help="The lexicographer file to write the synset to")
    parser.add_argument('--pos', type=str,
                        help="The part of speech (n|v|a|r|s)")
    parser.add_argument(
        '--supersededby',
        type=str,
        help="The ID of the superseding synset (required for deletion)")

    args = parser.parse_args()

    wn = change_manager.load_wordnet()

    if not args.delete and not args.add:
        mode = input("(A)dd synset/(d)elete synset: ").lower()
        if mode == "a":
            args.add = True
        elif mode == "d":
            args.delete = True
        else:
            print("Bad mode: " + mode)
            sys.exit(-1)

    if args.delete:
        if not args.synset:
            args.synset = "ewn-" + input("Enter synset ID: ewn-")
        synset = wn.synset_by_id(args.synset)

        if not synset:
            print("Could not find synset")
            sys.exit(-1)

        if not args.reason:
            args.reason = input("Reason for deletion with (#IssueNo): ")

        if not args.supersededby:
            args.supersededby = "ewn-" + \
                input("Enter superseding synset ID: ewn-")

        supersede_synset = wn.synset_by_id(args.supersededby)

        if not supersede_synset:
            print("Could not find synset")
            sys.exit(-1)

    if args.add:
        if not args.definition:
            args.definition = input("Definition: ")
        if not args.lexfile:
            args.lexfile = input("Lexicographer file: ")
        if not args.pos:
            args.pos = input(
                "Part of speech (n)oun/(v)erb/(a)djective/adve(r)b/(s)atellite: ").lower()

    if args.add:
        new_id = change_manager.add_synset(
            wn, args.definition, args.lexfile, args.pos)
        print(
            "New synset created with ID %s. Please use change-entry and change-relation scripts to add entries and relations" %
            new_id)
    elif args.delete:
        if not args.reason:
            print("Please give a reason for deletion")
            sys.exit(-1)
        change_manager.delete_synset(wn, synset, supersede_synset, args.reason)
    else:
        print("No action chosen")
        sys.exit(-1)
    change_manager.save_all_xml(wn)
def main():
    parser = argparse.ArgumentParser(
        description="Add or remove an entry from a synset")
    parser.add_argument('synset',
                        metavar='SYNSET_ID',
                        type=str,
                        nargs="?",
                        help="The ID of the synset to change")
    parser.add_argument('lemma',
                        metavar='LEMMA',
                        type=str,
                        nargs="?",
                        help="The lemma to change")
    parser.add_argument('--add',
                        action='store_true',
                        help="Add this entry to a synset")
    parser.add_argument('--delete',
                        action='store_true',
                        help="Remove this entry from a synset")
    parser.add_argument('--move',
                        action='store_true',
                        help="Change this entry to another synset")
    parser.add_argument('--target', type=str, help="The target for a change")
    parser.add_argument(
        '-n',
        metavar='N',
        type=int,
        default=-1,
        help=
        "The position of this synset within the list of senses for the entry")
    parser.add_argument('-i',
                        metavar='IDX',
                        type=int,
                        default=-1,
                        help="The position of this lemma in the synset")

    args = parser.parse_args()

    if args.add:
        action = "A"
    elif args.delete:
        action = "D"
    elif args.move:
        action = "M"
    else:
        action = input("[A]dd/[D]elete/[M]ove? ").upper()
        if action != "A" and action != "D" and action != "M":
            print("Bad action")
            sys.exit(-1)

    wn = change_manager.load_wordnet()

    if not args.synset:
        synset_id = "oewn-" + input("Enter synset ID : oewn-")
    else:
        synset_id = args.synset

    synset = wn.synset_by_id(synset_id)

    entries = wn.members_by_id(synset_id)
    if entries:
        print("Entries: " + ", ".join(entries))
    else:
        print("No entries")

    if not args.lemma:
        if action == "A":
            lemma = input("New entry: ")
        elif action == "D":
            lemma = input("Entry to remove: ")
        elif action == "M":
            lemma = input("Entry to move: ")
    else:
        lemma = args.lemma

    if not synset:
        print("Could not find synset")
        sys.exit(-1)

    if action == "M" and not args.target:
        args.target = "oewn-" + input("Target synset: oewn-")

    if action == "A":
        change_manager.add_entry(wn, synset, lemma, args.i, args.n)
    elif action == "D":
        change_manager.delete_entry(
            wn, synset, "oewn-%s-%s" %
            (wordnet.escape_lemma(lemma), synset.part_of_speech.value))
    elif action == "M":
        target_synset = wn.synset_by_id(args.target)

        if not target_synset:
            print("Could not find synset")
            sys.exit(-1)

        if synset.lex_name == target_synset.lex_name:
            change_manager.change_entry(wn, synset, target_synset, lemma)
        else:
            print(
                "Moving across lexicographer files so implementing change as delete then add"
            )
            change_manager.delete_entry(
                wn, synset, "oewn-%s-%s" %
                (wordnet.escape_lemma(lemma), synset.part_of_speech.value))
            change_manager.add_entry(wn, target_synset, lemma, args.i, args.n)
    change_manager.save_all_xml(wn)