From 89a094fb34a68fffda28ff1a872a61e5af652f6b Mon Sep 17 00:00:00 2001 From: amir-zeldes Date: Thu, 12 Aug 2021 15:34:58 -0400 Subject: [PATCH 1/8] add slots --- depedit/depedit.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/depedit/depedit.py b/depedit/depedit.py index 29766b2..f0dd92f 100644 --- a/depedit/depedit.py +++ b/depedit/depedit.py @@ -40,6 +40,8 @@ def escape(string, symbol_to_mask, border_marker): class ParsedToken: + __slots__ = ['id', 'text', 'lemma', 'pos', 'cpos', 'morph', 'head', 'func', 'edep', 'head2', 'func2', 'storage', 'storage2', 'num', 'child_funcs', 'position', 'is_super_tok', 'sentence'] + def __init__(self, tok_id, text, lemma, pos, cpos, morph, head, func, head2, func2, num, child_funcs, position, is_super_tok=False, tokoffset=0): self.id = tok_id self.text = text @@ -81,6 +83,7 @@ def __repr__(self): class Sentence: + __slots__ = ['sentence_string','length','annotations','input_annotations','sent_num','offset','depedit'] def __init__(self, sentence_string="", sent_num=0, tokoffset=0, depedit_object=None): self.sentence_string = sentence_string @@ -208,6 +211,7 @@ def validate(self): class DefinitionMatcher: + __slots__ = ['def_text','def_index','groups','defs','sent_def'] def __init__(self, def_text, def_index): self.def_text = escape(def_text, "&", "/") @@ -270,6 +274,7 @@ def match(self, token): class Definition: + __slots__ = ['value','match_type','compiled_re','match_func','negative','criterion'] def __init__(self, criterion, value, negative=False): # Handle conllu criterion aliases: @@ -342,6 +347,7 @@ def return_true(definition, test_val): class Match: + __slots__ = ['def_index','token','groups','sent_def'] def __init__(self, def_index, token, groups): self.def_index = def_index From fadd9ea6ef38ac0208845f36167843554ed4e81a Mon Sep 17 00:00:00 2001 From: amir-zeldes Date: Thu, 12 Aug 2021 15:35:58 -0400 Subject: [PATCH 2/8] better handling of multiple edeps --- depedit/depedit.py | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/depedit/depedit.py b/depedit/depedit.py index f0dd92f..931a82f 100644 --- a/depedit/depedit.py +++ b/depedit/depedit.py @@ -56,9 +56,11 @@ def __init__(self, tok_id, text, lemma, pos, cpos, morph, head, func, head2, fun self.func2 = func2 if ":" in head2: # edep format try: - h, d = head2.split(":", maxsplit=1) - h = str(float(h) + tokoffset) - self.edep.append([h, d]) + edeps = head2.split("|") + for edep in edeps: + h, d = edep.split(":", maxsplit=1) + h = str(float(h) + tokoffset) + self.edep.append([h, d]) except ValueError: pass self.storage = "" # Storage field for temporary values, never read or written to/from conllu @@ -846,7 +848,16 @@ def execute_action(self, result_sets, action_list, transformation): result[node_position].edep[index][1] = value elif prop == "edom": if "||" in value: - result[node_position].edep.append(value.split("||", maxsplit=1)) + h, rel = value.split("||", maxsplit=1) + new_rels = [] + for dom in result[node_position].edep: + if dom[0] != h: # Leave out any existing edeps with the same head unless they are substrings + new_rels.append(dom) + elif dom[1].startswith(rel) or rel.startswith(dom[1]): + new_rels.append(dom) + new_rels.append([h, rel]) + #result[node_position].edep.append([h, rel]) + result[node_position].edep = new_rels else: sys.stderr.write("WARN: skipped attempt to write edom; value does not follow the format HEAD||EDEP (e.g. 8.0||nsubj:xsubj)\n") elif prop == "ehead": From 9ef35fd59d3b5d83c6429098682668bd423cf750 Mon Sep 17 00:00:00 2001 From: amir-zeldes Date: Thu, 12 Aug 2021 15:36:25 -0400 Subject: [PATCH 3/8] better handling of 8 column format --- depedit/depedit.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/depedit/depedit.py b/depedit/depedit.py index 931a82f..9a5855a 100644 --- a/depedit/depedit.py +++ b/depedit/depedit.py @@ -977,14 +977,15 @@ def order_edep(multi_edep_string): tok_head_string = tok_head_string.replace(".0", "") if "." in tok_id: tok_head_string = "_" - fields = (tok_id, tok.text, tok.lemma, tok.pos, tok.cpos, tok.morph, tok_head_string, tok.func) + fields = [tok_id, tok.text, tok.lemma, tok.pos, tok.cpos, tok.morph, tok_head_string, tok.func] if self.input_mode != "8col": if enhanced or tok.edep != []: if tok.edep != []: tok.head2 = tok_ehead_string elif tok.head2 == "_": tok.head2 = ":".join([tok_head_string, tok.func]) # Default edep column contents - fields += (tok.head2, tok.func2) + func2 = tok.func2 if len(tok.func2) > 0 else "_" + fields += [tok.head2, func2] output_tree_lines.append("\t".join(fields)) return output_tree_lines From b6809d195c3f704b4a4149ede6e78dc90105faa5 Mon Sep 17 00:00:00 2001 From: amir-zeldes Date: Thu, 12 Aug 2021 15:37:39 -0400 Subject: [PATCH 4/8] better ordering of comment lines --- depedit/depedit.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/depedit/depedit.py b/depedit/depedit.py index 9a5855a..617b5f1 100644 --- a/depedit/depedit.py +++ b/depedit/depedit.py @@ -98,17 +98,26 @@ def __init__(self, sentence_string="", sent_num=0, tokoffset=0, depedit_object=N def print_annos(self): anno_dict = dict((k, v) for k, v in iteritems(self.annotations)) + if "text" in self.input_annotations and "text" in self.annotations: + self.input_annotations["text"] = self.annotations["text"] if self.depedit.kill not in ["comments", "both"]: anno_dict.update(dict((k, v) for k, v in iteritems(self.input_annotations))) sorted_keys = sorted(list(iterkeys(anno_dict))) + newdoc_anno = [] + sent_id = [] if "sent_id" in sorted_keys: # Ensure sent_id is first + sent_id = ["sent_id"] sorted_keys.remove("sent_id") - sorted_keys = ["sent_id"] + sorted_keys if "newdoc id" in sorted_keys: # Ensure newdoc id is first + newdoc_anno = ["newdoc id"] sorted_keys.remove("newdoc id") - sorted_keys = ["newdoc id"] + sorted_keys + global_specs = [k for k in sorted_keys if k.startswith("global.")] + meta = sorted([k for k in sorted_keys if k.startswith("meta::")]) + others = [k for k in sorted_keys if not k.startswith("meta::") and not k.startswith("global.") and k != "text"] + text = ["text"] if "text" in sorted_keys else [] + sorted_keys = newdoc_anno + global_specs + meta + sent_id + sorted(others) + text return ["# " + key.strip() + " = " + anno_dict[key].strip() for key in sorted_keys] From 98851eced227eda2435a77a94b55e21d6e15ab7e Mon Sep 17 00:00:00 2001 From: amir-zeldes Date: Thu, 12 Aug 2021 15:38:26 -0400 Subject: [PATCH 5/8] set empty edep should be _ * set edep to nothing previously produced a blank field --- depedit/depedit.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/depedit/depedit.py b/depedit/depedit.py index 617b5f1..d905973 100644 --- a/depedit/depedit.py +++ b/depedit/depedit.py @@ -973,7 +973,9 @@ def order_edep(multi_edep_string): else: tok_head_string = str(Decimal(tok.head) - tokoffset) tok_id = str(Decimal(tok.id) - tokoffset) - if len(tok.edep) == 0: + if tok.head2 not in ["","_"]: # explicitly set head2 field + tok_ehead_string = tok.head2 + elif len(tok.edep) == 0: tok_ehead_string = "_" tok.head2 = "_" else: From 447b48642e3fc2a47d9906189c2aaa835232fd94 Mon Sep 17 00:00:00 2001 From: amir-zeldes Date: Thu, 12 Aug 2021 15:39:18 -0400 Subject: [PATCH 6/8] add `-=` operator * Allows removing a specific key from a key-value field regardless of value * Useful for removing FEATS and MISC properties --- depedit/depedit.py | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/depedit/depedit.py b/depedit/depedit.py index d905973..edef032 100644 --- a/depedit/depedit.py +++ b/depedit/depedit.py @@ -161,6 +161,8 @@ def parse_transformation(self, transformation_text, depedit_container, line): def handle_aliases(orig_action): for source, target in iteritems(ALIASES): orig_action = orig_action.replace(":" + source + "=", ":" + target + "=") + orig_action = orig_action.replace(":" + source + "+=", ":" + target + "+=") + orig_action = orig_action.replace(":" + source + "-=", ":" + target + "-=") return orig_action @staticmethod @@ -213,7 +215,7 @@ def validate(self): for action in self.actions: commands = action.split(";") for command in commands: # Node action - if re.match(r"(#[0-9]+([>~]|><)#[0-9]+|#[0-9]+:(func|lemma|text|pos|cpos|morph|storage2?|edom|head|head2|func2|num|form|upos|upostag|xpos|xpostag|feats|deprel|deps|misc|edep|ehead)\+?=[^;]*)$", command) is None: + if re.match(r"(#[0-9]+([>~]|><)#[0-9]+|#[0-9]+:(func|lemma|text|pos|cpos|morph|storage2?|edom|head|head2|func2|num|form|upos|upostag|xpos|xpostag|feats|deprel|deps|misc|edep|ehead)[\+-]?=[^;]*)$", command) is None: if re.match(r"#S:[A-Za-z_]+=[A-Za-z_]+$|last$|once$", command) is None: # Sentence annotation action or quit report += "Column 3 invalid action definition: " + command + " and the action was " + action if "#" not in action: @@ -797,9 +799,13 @@ def execute_action(self, result_sets, action_list, transformation): prop = action[action.find(":") + 1:action.find("=")] value = action[action.find("=") + 1:].strip() add_val = False + subtract_val = False if prop.endswith("+"): # Add annotation, e.g. feats+=... add_val = True prop = prop[:-1] + elif prop.endswith("-"): # Remove annotation, e.g. feats-=... + subtract_val = True + prop = prop[:-1] group_num_matches = re.findall(r"(\$[0-9]+[LU]?)", value) if group_num_matches is not None: for g in group_num_matches: @@ -841,6 +847,20 @@ def execute_action(self, result_sets, action_list, transformation): value = "|".join(sorted(kv,key=lambda x:x.lower())) else: value = "|".join(new_vals) + elif subtract_val: + old_val = getattr(result[node_position],prop) + new_vals = sorted(value.split("|")) + new_vals_keys = [v.split("=")[0] for v in new_vals] + if old_val != "_": # Some values already exist + kv = [] + for ov in sorted(old_val.split("|")): + if not ov.split("=")[0] in new_vals_keys: # Else this needs to be overwritten + kv.append(ov) + value = "|".join(sorted(kv,key=lambda x:x.lower())) + if value == "": + value = "_" + else: + value = "_" if prop == "edep": if value == "": # Set empty edep result[node_position].edep = [] From baaa95ba1c9b55bbea84492f38032dd94e0ceaf4 Mon Sep 17 00:00:00 2001 From: amir-zeldes Date: Thu, 12 Aug 2021 15:40:32 -0400 Subject: [PATCH 7/8] spaces --- depedit/depedit.py | 2333 ++++++++++++++++++++++---------------------- 1 file changed, 1166 insertions(+), 1167 deletions(-) diff --git a/depedit/depedit.py b/depedit/depedit.py index edef032..ba9d414 100644 --- a/depedit/depedit.py +++ b/depedit/depedit.py @@ -25,1206 +25,1205 @@ __version__ = "3.1.0.0" ALIASES = {"form":"text","upostag":"pos","xpostag":"cpos","feats":"morph","deprel":"func","deps":"head2","misc":"func2", - "xpos": "cpos","upos":"pos"} + "xpos": "cpos","upos":"pos"} def escape(string, symbol_to_mask, border_marker): - inside = False - output = "" - # Scan the string looking for border or symbol to mask - for char in string: - if char == border_marker: - inside = not inside - output += "%%%%%" if char == symbol_to_mask and inside else char - return output + inside = False + output = "" + # Scan the string looking for border or symbol to mask + for char in string: + if char == border_marker: + inside = not inside + output += "%%%%%" if char == symbol_to_mask and inside else char + return output class ParsedToken: - __slots__ = ['id', 'text', 'lemma', 'pos', 'cpos', 'morph', 'head', 'func', 'edep', 'head2', 'func2', 'storage', 'storage2', 'num', 'child_funcs', 'position', 'is_super_tok', 'sentence'] - - def __init__(self, tok_id, text, lemma, pos, cpos, morph, head, func, head2, func2, num, child_funcs, position, is_super_tok=False, tokoffset=0): - self.id = tok_id - self.text = text - self.pos = pos - self.cpos = cpos - self.lemma = lemma - self.morph = morph - self.head = head - self.func = func - self.edep = [] - self.head2 = head2 - self.func2 = func2 - if ":" in head2: # edep format - try: - edeps = head2.split("|") - for edep in edeps: - h, d = edep.split(":", maxsplit=1) - h = str(float(h) + tokoffset) - self.edep.append([h, d]) - except ValueError: - pass - self.storage = "" # Storage field for temporary values, never read or written to/from conllu - self.storage2 = "" # Storage field for temporary values, never read or written to/from conllu - self.num = num - self.child_funcs = child_funcs - self.position = position - self.is_super_tok = is_super_tok - - def __getattr__(self, item): - if item.startswith("#S:"): - key = item.split(":",1)[1] - if key in self.sentence.annotations: - return self.sentence.annotations[key] - elif key in self.sentence.input_annotations: - return self.sentence.input_annotations[key] - else: - return "" - - def __repr__(self): - return str(self.text) + " (" + str(self.pos) + "/" + str(self.lemma) + ") " + "<-" + str(self.func) + __slots__ = ['id', 'text', 'lemma', 'pos', 'cpos', 'morph', 'head', 'func', 'edep', 'head2', 'func2', 'storage', 'storage2', 'num', 'child_funcs', 'position', 'is_super_tok', 'sentence'] + + def __init__(self, tok_id, text, lemma, pos, cpos, morph, head, func, head2, func2, num, child_funcs, position, is_super_tok=False, tokoffset=0): + self.id = tok_id + self.text = text + self.pos = pos + self.cpos = cpos + self.lemma = lemma + self.morph = morph + self.head = head + self.func = func + self.edep = [] + self.head2 = head2 + self.func2 = func2 + if ":" in head2: # edep format + try: + edeps = head2.split("|") + for edep in edeps: + h, d = edep.split(":", maxsplit=1) + h = str(float(h) + tokoffset) + self.edep.append([h, d]) + except ValueError: + pass + self.storage = "" # Storage field for temporary values, never read or written to/from conllu + self.storage2 = "" # Storage field for temporary values, never read or written to/from conllu + self.num = num + self.child_funcs = child_funcs + self.position = position + self.is_super_tok = is_super_tok + + def __getattr__(self, item): + if item.startswith("#S:"): + key = item.split(":",1)[1] + if key in self.sentence.annotations: + return self.sentence.annotations[key] + elif key in self.sentence.input_annotations: + return self.sentence.input_annotations[key] + else: + return "" + + def __repr__(self): + return str(self.text) + " (" + str(self.pos) + "/" + str(self.lemma) + ") " + "<-" + str(self.func) class Sentence: - __slots__ = ['sentence_string','length','annotations','input_annotations','sent_num','offset','depedit'] - - def __init__(self, sentence_string="", sent_num=0, tokoffset=0, depedit_object=None): - self.sentence_string = sentence_string - self.length = 0 - self.annotations = {} # Dictionary to keep sentence annotations added by DepEdit rules - self.input_annotations = {} # Dictionary with original sentence annotations (i.e. comment lines) in input conll - self.sent_num = sent_num - self.offset = tokoffset - self.depedit = depedit_object - - def print_annos(self): - anno_dict = dict((k, v) for k, v in iteritems(self.annotations)) - if "text" in self.input_annotations and "text" in self.annotations: - self.input_annotations["text"] = self.annotations["text"] - if self.depedit.kill not in ["comments", "both"]: - anno_dict.update(dict((k, v) for k, v in iteritems(self.input_annotations))) - sorted_keys = sorted(list(iterkeys(anno_dict))) - newdoc_anno = [] - sent_id = [] - if "sent_id" in sorted_keys: - # Ensure sent_id is first - sent_id = ["sent_id"] - sorted_keys.remove("sent_id") - if "newdoc id" in sorted_keys: - # Ensure newdoc id is first - newdoc_anno = ["newdoc id"] - sorted_keys.remove("newdoc id") - global_specs = [k for k in sorted_keys if k.startswith("global.")] - meta = sorted([k for k in sorted_keys if k.startswith("meta::")]) - others = [k for k in sorted_keys if not k.startswith("meta::") and not k.startswith("global.") and k != "text"] - text = ["text"] if "text" in sorted_keys else [] - sorted_keys = newdoc_anno + global_specs + meta + sent_id + sorted(others) + text - return ["# " + key.strip() + " = " + anno_dict[key].strip() for key in sorted_keys] + __slots__ = ['sentence_string','length','annotations','input_annotations','sent_num','offset','depedit'] + + def __init__(self, sentence_string="", sent_num=0, tokoffset=0, depedit_object=None): + self.sentence_string = sentence_string + self.length = 0 + self.annotations = {} # Dictionary to keep sentence annotations added by DepEdit rules + self.input_annotations = {} # Dictionary with original sentence annotations (i.e. comment lines) in input conll + self.sent_num = sent_num + self.offset = tokoffset + self.depedit = depedit_object + + def print_annos(self): + anno_dict = dict((k, v) for k, v in iteritems(self.annotations)) + if "text" in self.input_annotations and "text" in self.annotations: + self.input_annotations["text"] = self.annotations["text"] + if self.depedit.kill not in ["comments", "both"]: + anno_dict.update(dict((k, v) for k, v in iteritems(self.input_annotations))) + sorted_keys = sorted(list(iterkeys(anno_dict))) + newdoc_anno = [] + sent_id = [] + if "sent_id" in sorted_keys: + # Ensure sent_id is first + sent_id = ["sent_id"] + sorted_keys.remove("sent_id") + if "newdoc id" in sorted_keys: + # Ensure newdoc id is first + newdoc_anno = ["newdoc id"] + sorted_keys.remove("newdoc id") + global_specs = [k for k in sorted_keys if k.startswith("global.")] + meta = sorted([k for k in sorted_keys if k.startswith("meta::")]) + others = [k for k in sorted_keys if not k.startswith("meta::") and not k.startswith("global.") and k != "text"] + text = ["text"] if "text" in sorted_keys else [] + sorted_keys = newdoc_anno + global_specs + meta + sent_id + sorted(others) + text + return ["# " + key.strip() + " = " + anno_dict[key].strip() for key in sorted_keys] class Transformation: - def parse_transformation(self, transformation_text, depedit_container, line): - split_trans = transformation_text.split("\t") - if len(split_trans) < 3: - return None - definition_string, relation_string, action_string = split_trans - if "~#" in action_string and "edep=" not in action_string: - sys.stderr.write("WARN: action specifies enhanced edge (~) but no edep label on line " + str(line) + "\n") - elif "~#" not in action_string and "edep=" in action_string and not action_string.endswith("edep=") and \ - not "edep=;" in action_string and not "ehead=" in action_string: - sys.stderr.write("WARN: action specifies an edep label but no enhanced edge (~) on line " + str(line) + "\n") - match_variables = re.findall(r'\{([^}]+)\}',definition_string) - for m in match_variables: - if m in depedit_container.variables: - definition_string = definition_string.replace("{"+m+"}",depedit_container.variables[m]) - else: - sys.stderr.write("! Definition contains undefined variable: {" + m + "}") - quit() - relation_string = self.normalize_shorthand(relation_string) - action_string = self.normalize_shorthand(action_string) - definition_string = escape(definition_string, ";", "/") - definitions_list = definition_string.split(";") - escaped_definitions = [] - for _def in definitions_list: - escaped_definitions.append(_def.replace("%%%%%", ";")) - definitions = [] - for def_index, esc_string in enumerate(escaped_definitions): - definitions.append(DefinitionMatcher(esc_string, def_index + 1)) - relations = relation_string.split(";") - actions = action_string.strip().split(";") - aliased_actions = [] - for action in actions: - aliased_actions.append(self.handle_aliases(action)) - return [definitions, relations, aliased_actions] - - @staticmethod - def handle_aliases(orig_action): - for source, target in iteritems(ALIASES): - orig_action = orig_action.replace(":" + source + "=", ":" + target + "=") - orig_action = orig_action.replace(":" + source + "+=", ":" + target + "+=") - orig_action = orig_action.replace(":" + source + "-=", ":" + target + "-=") - return orig_action - - @staticmethod - def normalize_shorthand(criterion_string): - criterion_string = criterion_string.replace('.*', '.1,1000') - temp = "" - while temp != criterion_string: - temp = criterion_string - criterion_string = re.sub(r'(#[0-9]+)(>|\.(?:[0-9]+(?:,[0-9]+)?)?)(#[0-9]+)([>~]|\.(?:[0-9]+(?:,[0-9]+)?)?)', - r'\1\2\3;\3\4', criterion_string) - return criterion_string - - def __init__(self, transformation_text, line, depedit_container): - self.transformation_text = transformation_text - instructions = self.parse_transformation(transformation_text, depedit_container, line) - if instructions is None: - sys.stderr.write("Depedit says: error in configuration file\n" - "Malformed instruction on line " + str(line) + " (instruction lines must contain exactly two tabs)\n") - sys.exit() - self.definitions, self.relations, self.actions = instructions - self.line = line - - def __repr__(self): - return " | ".join([str(self.definitions), str(self.relations), str(self.actions)]) - - def validate(self): - report = "" - for definition in self.definitions: - node = escape(definition.def_text, "&", "/") - criteria = (_crit.replace("%%%%%", "&") for _crit in node.split("&")) - for criterion in criteria: - if re.match(r"(text|pos|cpos|lemma|morph|storage2?|edom|func|head|func2|head2|num|form|upos|upostag|xpos|xpostag|feats|deprel|deps|misc|edep|ehead)!?=/[^/=]*/", criterion) is None: - if re.match(r"position!?=/(first|last|mid)/", criterion) is None: - if re.match(r"#S:[A-Za-z_]+!?=/[^/\t]+/",criterion) is None: - report += "Invalid node definition in column 1: " + criterion - for relation in self.relations: - if relation == "none" and len(self.relations) == 1: - if len(self.definitions) > 1: - report += "Column 2 setting 'none' invalid with more than one definition in column 1" - elif relation == "none": - report += "Setting 'none' invalid in column 2 when multiple relations are defined" - else: - criteria = relation.split(";") - for criterion in criteria: - criterion = criterion.strip() - if not re.match(r"(#[0-9]+(([>~]|\.([0-9]+(,[0-9]+)?)?)#[0-9]+)+|#[0-9]+:(text|pos|cpos|lemma|morph|storage2?|edom|" - r"func|head|func2|head2|num|form|upos|upostag|xpos|xpostag|feats|deprel|deps|misc|edep|ehead)==#[0-9]+)", - criterion): - report += "Column 2 relation setting invalid criterion: " + criterion + "." - for action in self.actions: - commands = action.split(";") - for command in commands: # Node action - if re.match(r"(#[0-9]+([>~]|><)#[0-9]+|#[0-9]+:(func|lemma|text|pos|cpos|morph|storage2?|edom|head|head2|func2|num|form|upos|upostag|xpos|xpostag|feats|deprel|deps|misc|edep|ehead)[\+-]?=[^;]*)$", command) is None: - if re.match(r"#S:[A-Za-z_]+=[A-Za-z_]+$|last$|once$", command) is None: # Sentence annotation action or quit - report += "Column 3 invalid action definition: " + command + " and the action was " + action - if "#" not in action: - report += " (no node declaration with #)" - return report + def parse_transformation(self, transformation_text, depedit_container, line): + split_trans = transformation_text.split("\t") + if len(split_trans) < 3: + return None + definition_string, relation_string, action_string = split_trans + if "~#" in action_string and "edep=" not in action_string: + sys.stderr.write("WARN: action specifies enhanced edge (~) but no edep label on line " + str(line) + "\n") + elif "~#" not in action_string and "edep=" in action_string and not action_string.endswith("edep=") and \ + not "edep=;" in action_string and not "ehead=" in action_string: + sys.stderr.write("WARN: action specifies an edep label but no enhanced edge (~) on line " + str(line) + "\n") + match_variables = re.findall(r'\{([^}]+)\}',definition_string) + for m in match_variables: + if m in depedit_container.variables: + definition_string = definition_string.replace("{"+m+"}",depedit_container.variables[m]) + else: + sys.stderr.write("! Definition contains undefined variable: {" + m + "}") + quit() + relation_string = self.normalize_shorthand(relation_string) + action_string = self.normalize_shorthand(action_string) + definition_string = escape(definition_string, ";", "/") + definitions_list = definition_string.split(";") + escaped_definitions = [] + for _def in definitions_list: + escaped_definitions.append(_def.replace("%%%%%", ";")) + definitions = [] + for def_index, esc_string in enumerate(escaped_definitions): + definitions.append(DefinitionMatcher(esc_string, def_index + 1)) + relations = relation_string.split(";") + actions = action_string.strip().split(";") + aliased_actions = [] + for action in actions: + aliased_actions.append(self.handle_aliases(action)) + return [definitions, relations, aliased_actions] + + @staticmethod + def handle_aliases(orig_action): + for source, target in iteritems(ALIASES): + orig_action = orig_action.replace(":" + source + "=", ":" + target + "=") + orig_action = orig_action.replace(":" + source + "+=", ":" + target + "+=") + orig_action = orig_action.replace(":" + source + "-=", ":" + target + "-=") + return orig_action + + @staticmethod + def normalize_shorthand(criterion_string): + criterion_string = criterion_string.replace('.*', '.1,1000') + temp = "" + while temp != criterion_string: + temp = criterion_string + criterion_string = re.sub(r'(#[0-9]+)(>|\.(?:[0-9]+(?:,[0-9]+)?)?)(#[0-9]+)([>~]|\.(?:[0-9]+(?:,[0-9]+)?)?)', + r'\1\2\3;\3\4', criterion_string) + return criterion_string + + def __init__(self, transformation_text, line, depedit_container): + self.transformation_text = transformation_text + instructions = self.parse_transformation(transformation_text, depedit_container, line) + if instructions is None: + sys.stderr.write("Depedit says: error in configuration file\n" + "Malformed instruction on line " + str(line) + " (instruction lines must contain exactly two tabs)\n") + sys.exit() + self.definitions, self.relations, self.actions = instructions + self.line = line + + def __repr__(self): + return " | ".join([str(self.definitions), str(self.relations), str(self.actions)]) + + def validate(self): + report = "" + for definition in self.definitions: + node = escape(definition.def_text, "&", "/") + criteria = (_crit.replace("%%%%%", "&") for _crit in node.split("&")) + for criterion in criteria: + if re.match(r"(text|pos|cpos|lemma|morph|storage2?|edom|func|head|func2|head2|num|form|upos|upostag|xpos|xpostag|feats|deprel|deps|misc|edep|ehead)!?=/[^/=]*/", criterion) is None: + if re.match(r"position!?=/(first|last|mid)/", criterion) is None: + if re.match(r"#S:[A-Za-z_]+!?=/[^/\t]+/",criterion) is None: + report += "Invalid node definition in column 1: " + criterion + for relation in self.relations: + if relation == "none" and len(self.relations) == 1: + if len(self.definitions) > 1: + report += "Column 2 setting 'none' invalid with more than one definition in column 1" + elif relation == "none": + report += "Setting 'none' invalid in column 2 when multiple relations are defined" + else: + criteria = relation.split(";") + for criterion in criteria: + criterion = criterion.strip() + if not re.match(r"(#[0-9]+(([>~]|\.([0-9]+(,[0-9]+)?)?)#[0-9]+)+|#[0-9]+:(text|pos|cpos|lemma|morph|storage2?|edom|" + r"func|head|func2|head2|num|form|upos|upostag|xpos|xpostag|feats|deprel|deps|misc|edep|ehead)==#[0-9]+)", + criterion): + report += "Column 2 relation setting invalid criterion: " + criterion + "." + for action in self.actions: + commands = action.split(";") + for command in commands: # Node action + if re.match(r"(#[0-9]+([>~]|><)#[0-9]+|#[0-9]+:(func|lemma|text|pos|cpos|morph|storage2?|edom|head|head2|func2|num|form|upos|upostag|xpos|xpostag|feats|deprel|deps|misc|edep|ehead)[\+-]?=[^;]*)$", command) is None: + if re.match(r"#S:[A-Za-z_]+=[A-Za-z_]+$|last$|once$", command) is None: # Sentence annotation action or quit + report += "Column 3 invalid action definition: " + command + " and the action was " + action + if "#" not in action: + report += " (no node declaration with #)" + return report class DefinitionMatcher: - __slots__ = ['def_text','def_index','groups','defs','sent_def'] - - def __init__(self, def_text, def_index): - self.def_text = escape(def_text, "&", "/") - self.def_index = def_index - self.groups = [] - self.defs = [] - self.sent_def = False - if def_text.startswith("#S:"): - self.sent_def = True - - def_items = self.def_text.split("&") - for def_item in def_items: - def_item = def_item.replace("%%%%%", "&") - criterion = def_item.split("=", 1)[0] - negative_criterion = (criterion[-1] == "!") - if negative_criterion: - criterion = criterion[:-1] - - def_value = def_item.split("=", 1)[1][1:-1] - - # Ensure regex is anchored - if def_value[0] != "^": - def_value = "^" + def_value - if def_value[-1] != "$": - def_value += "$" - if "^(?i)" in def_value: - def_value = def_value.replace("^(?i)","(?i)^") # ensure case insensitive flag is initial - self.defs.append(Definition(criterion, def_value, negative_criterion)) - - def __repr__(self): - return "#" + str(self.def_index) + ": " + self.def_text - - def match(self, token): - potential_groups = [] - for def_item in self.defs: - if def_item.criterion == "edep": - tok_value = [e[1] for e in token.edep] # Get list of edeprels - elif def_item.criterion == "edom": - tok_value = ["||".join(e) for e in token.edep] # Get list of edeprels and their heads - else: - tok_value = getattr(token, def_item.criterion) - if def_item.criterion in ["head","ehead"] and len(tok_value) > 0: - tok_value = str(Decimal(tok_value) - token.sentence.offset) - if tok_value.endswith('.0'): - tok_value = tok_value.replace(".0","") - match_obj = def_item.match_func(def_item, tok_value) - - if match_obj is None: - return False - elif not match_obj: - return False - elif match_obj is True: - pass - elif match_obj is not None: - if len(match_obj.groups()) > 0: - potential_groups.append(match_obj.groups()) - - self.groups = potential_groups - return True + __slots__ = ['def_text','def_index','groups','defs','sent_def'] + + def __init__(self, def_text, def_index): + self.def_text = escape(def_text, "&", "/") + self.def_index = def_index + self.groups = [] + self.defs = [] + self.sent_def = False + if def_text.startswith("#S:"): + self.sent_def = True + + def_items = self.def_text.split("&") + for def_item in def_items: + def_item = def_item.replace("%%%%%", "&") + criterion = def_item.split("=", 1)[0] + negative_criterion = (criterion[-1] == "!") + if negative_criterion: + criterion = criterion[:-1] + + def_value = def_item.split("=", 1)[1][1:-1] + + # Ensure regex is anchored + if def_value[0] != "^": + def_value = "^" + def_value + if def_value[-1] != "$": + def_value += "$" + if "^(?i)" in def_value: + def_value = def_value.replace("^(?i)","(?i)^") # ensure case insensitive flag is initial + self.defs.append(Definition(criterion, def_value, negative_criterion)) + + def __repr__(self): + return "#" + str(self.def_index) + ": " + self.def_text + + def match(self, token): + potential_groups = [] + for def_item in self.defs: + if def_item.criterion == "edep": + tok_value = [e[1] for e in token.edep] # Get list of edeprels + elif def_item.criterion == "edom": + tok_value = ["||".join(e) for e in token.edep] # Get list of edeprels and their heads + else: + tok_value = getattr(token, def_item.criterion) + if def_item.criterion in ["head","ehead"] and len(tok_value) > 0: + tok_value = str(Decimal(tok_value) - token.sentence.offset) + if tok_value.endswith('.0'): + tok_value = tok_value.replace(".0","") + match_obj = def_item.match_func(def_item, tok_value) + + if match_obj is None: + return False + elif not match_obj: + return False + elif match_obj is True: + pass + elif match_obj is not None: + if len(match_obj.groups()) > 0: + potential_groups.append(match_obj.groups()) + + self.groups = potential_groups + return True class Definition: - __slots__ = ['value','match_type','compiled_re','match_func','negative','criterion'] - - def __init__(self, criterion, value, negative=False): - # Handle conllu criterion aliases: - if criterion.startswith("#S:"): # Sentence annotation - self.criterion = criterion - else: - self.criterion = ALIASES.get(criterion, criterion) - self.value = value - self.match_type = "" - self.compiled_re = None - self.match_func = None - self.negative = negative - self.set_match_type(criterion) - - def set_match_type(self, criterion): - value = self.value[1:-1] - if self.value == "^.*$" and not self.negative: - self.match_func = self.return_true - elif re.escape(value) == value: # No regex operators within expression - if criterion in ["edep","edom"]: - self.match_func = self.return_not_in if self.negative else self.return_in - else: - self.match_func = self.return_exact_negative if self.negative else self.return_exact - self.value = value - else: # regex - self.compiled_re = re.compile(self.value) - if criterion in ["edep","edom"]: - self.match_func = self.return_regex_not_in if self.negative else self.return_regex_in - else: - self.match_func = self.return_regex_negative if self.negative else self.return_regex - - @staticmethod - def return_exact(definition, test_val): - return test_val == definition.value - - @staticmethod - def return_exact_negative(definition, test_val): - return test_val != definition.value - - @staticmethod - def return_regex(definition, test_val): - return definition.compiled_re.search(test_val) - - @staticmethod - def return_regex_negative(definition, test_val): - return definition.compiled_re.search(test_val) is None - - @staticmethod - def return_in(definition, test_val): - return any([definition.value == v for v in test_val]) - - @staticmethod - def return_not_in(definition, test_val): - return all([definition.value != v for v in test_val]) - - @staticmethod - def return_regex_in(definition, test_val): - matchers = [definition.compiled_re.search(v) for v in test_val if v is not None] - successful = [m for m in matchers if m is not None] - successful.sort(key=lambda x: x.endpos - x.pos, reverse=True) - return successful[0] if len(successful) > 0 else None - - @staticmethod - def return_regex_not_in(definition, test_val): - return all([definition.compiled_re.search(v) is None for v in test_val]) - - @staticmethod - def return_true(definition, test_val): - return True + __slots__ = ['value','match_type','compiled_re','match_func','negative','criterion'] + + def __init__(self, criterion, value, negative=False): + # Handle conllu criterion aliases: + if criterion.startswith("#S:"): # Sentence annotation + self.criterion = criterion + else: + self.criterion = ALIASES.get(criterion, criterion) + self.value = value + self.match_type = "" + self.compiled_re = None + self.match_func = None + self.negative = negative + self.set_match_type(criterion) + + def set_match_type(self, criterion): + value = self.value[1:-1] + if self.value == "^.*$" and not self.negative: + self.match_func = self.return_true + elif re.escape(value) == value: # No regex operators within expression + if criterion in ["edep","edom"]: + self.match_func = self.return_not_in if self.negative else self.return_in + else: + self.match_func = self.return_exact_negative if self.negative else self.return_exact + self.value = value + else: # regex + self.compiled_re = re.compile(self.value) + if criterion in ["edep","edom"]: + self.match_func = self.return_regex_not_in if self.negative else self.return_regex_in + else: + self.match_func = self.return_regex_negative if self.negative else self.return_regex + + @staticmethod + def return_exact(definition, test_val): + return test_val == definition.value + + @staticmethod + def return_exact_negative(definition, test_val): + return test_val != definition.value + + @staticmethod + def return_regex(definition, test_val): + return definition.compiled_re.search(test_val) + + @staticmethod + def return_regex_negative(definition, test_val): + return definition.compiled_re.search(test_val) is None + + @staticmethod + def return_in(definition, test_val): + return any([definition.value == v for v in test_val]) + + @staticmethod + def return_not_in(definition, test_val): + return all([definition.value != v for v in test_val]) + + @staticmethod + def return_regex_in(definition, test_val): + matchers = [definition.compiled_re.search(v) for v in test_val if v is not None] + successful = [m for m in matchers if m is not None] + successful.sort(key=lambda x: x.endpos - x.pos, reverse=True) + return successful[0] if len(successful) > 0 else None + + @staticmethod + def return_regex_not_in(definition, test_val): + return all([definition.compiled_re.search(v) is None for v in test_val]) + + @staticmethod + def return_true(definition, test_val): + return True class Match: - __slots__ = ['def_index','token','groups','sent_def'] + __slots__ = ['def_index','token','groups','sent_def'] - def __init__(self, def_index, token, groups): - self.def_index = def_index - self.token = token - self.groups = groups - self.sent_def = False # Whether this is a sentence annotation match + def __init__(self, def_index, token, groups): + self.def_index = def_index + self.token = token + self.groups = groups + self.sent_def = False # Whether this is a sentence annotation match - def __repr__(self): - return "#" + str(self.def_index) + ": " + str(self.token) + def __repr__(self): + return "#" + str(self.def_index) + ": " + str(self.token) class DepEdit: - def __init__(self, config_file="", options=None): - self.variables = {} - self.transformations = [] - self.user_transformation_counter = 0 - self.quiet = False - self.kill = None - if options is not None: - if "quiet" in options.__dict__ or options.quiet is not None: - self.quiet = options.quiet - if "kill" in options.__dict__ or options.kill is not None: - if options.kill in ["supertoks", "comments", "both"]: - self.kill = options.kill - if config_file != "": - self.read_config_file(config_file) - self.docname = self.input_mode = None - - def read_config_file(self, config_file, clear_transformations=False): - """ - Function to read configuration file. Can be invoked after initialization. - - :param config_file: The file to read instructions from. - :param clear_transformations: Whether to discard previous instructions. - :return: void - """ - - if clear_transformations: - self.transformations = [] - self.user_transformation_counter = 0 - if isinstance(config_file, str): - if sys.version_info[0] < 3: - config_file = open(config_file).readlines() - else: - config_file = open(config_file, encoding="utf8").readlines() - - line_num = 0 - for instruction in config_file: - instruction = instruction.strip() - line_num += 1 - match_variable = re.match(r'\{([^}]+)\}=/([^\n]+)/',instruction) - if match_variable is not None: - key = match_variable.group(1) - val = match_variable.group(2) - self.add_variable(key,val) - elif len(instruction) > 0 and not instruction.startswith(";") and not instruction.startswith("#") \ - or instruction.startswith("#S:"): - self.transformations.append(Transformation(instruction, line_num, self)) - - trans_report = "" - for transformation in self.transformations: - temp_report = transformation.validate() - if temp_report != "": - trans_report += "On line " + str(transformation.line) + ": " + temp_report + "\n" - if len(trans_report) > 0: - trans_report = "Depedit says: error in configuration file\n\n" + trans_report - sys.stderr.write(trans_report) - sys.exit() - - def process_sentence(self, conll_tokens, stepwise=False): - for i, transformation in enumerate(self.transformations): - if stepwise: - if sys.version_info[0] < 3: - print(("# Rule " + str(i+1) + ": " + str(transformation)+"\n").encode("utf-8"),end="") - else: - print("# Rule " + str(i+1) + ": " + str(transformation)+'\n',end="") - - node_matches = defaultdict(list) - for def_matcher in transformation.definitions: - for token in conll_tokens: - if not token.is_super_tok and def_matcher.match(token): - if def_matcher.sent_def: - if len(node_matches[def_matcher.def_index])==0: # Only add a sentence anno definition once - node_matches[def_matcher.def_index] = [Match(def_matcher.def_index, token, def_matcher.groups)] - node_matches[def_matcher.def_index][0].sent_def = True - else: - node_matches[def_matcher.def_index].append(Match(def_matcher.def_index, token, def_matcher.groups)) - result_sets = [] - for relation in transformation.relations: - if not self.matches_relation(node_matches, relation, result_sets): - result_sets = [] - result_sets = self.merge_sets(result_sets, len(transformation.definitions), len(transformation.relations)) - self.add_groups(result_sets) - if len(result_sets) > 0: - for action in transformation.actions: - if "><" not in action: - retval = self.execute_action(result_sets, action, transformation) - else: - retval = self.execute_supertoken(result_sets, action, transformation, conll_tokens) - if retval == "last": # Explicit instruction to cease processing - return - if stepwise: - print("\n".join(self.serialize_output_tree(conll_tokens, 0))+"\n") - - def matches_relation(self, node_matches, relation, result_sets): - if len(relation) == 0: - return False - operator = field = None - if "==" in relation: - m = re.search(r':(.+)==', relation) - operator = m.group() - field = m.group(1) - elif "." in relation: - if re.match(r'.*\.[0-9]', relation): - m = re.match(r'.*\.[0-9]*,?[0-9]*#', relation) - operator = m.group() - operator = operator[operator.find("."):operator.rfind("#")] - else: - operator = "." - elif ">" in relation: - operator = ">" - elif "~" in relation: - operator = "~" - - matches = defaultdict(list) - - hits = 0 - if relation == "none": # Unary operation on one node - node1 = 1 - for matcher1 in node_matches[node1]: - tok1 = matcher1.token - hits += 1 - result = {} - matches[node1].append(tok1) - result[node1] = tok1 - result["rel"] = relation - result["matchers"] = [matcher1] - result["ID2matcher"] = {node1:matcher1} - result_sets.append(result) - elif "==" in relation: - node1 = relation.split(operator)[0] - node2 = relation.split(operator)[1] - node1 = int(node1.replace("#", "")) - node2 = int(node2.replace("#", "")) - - for matcher1 in node_matches[node1]: - tok1 = matcher1.token - for matcher2 in node_matches[node2]: - tok2 = matcher2.token - if self.test_relation(tok1, tok2, field): - result_sets.append({node1: tok1, node2: tok2, "rel": relation, "matchers": [matcher1, matcher2], - "ID2matcher":{node1:matcher1, node2:matcher2}}) - matches[node1].append(tok1) - matches[node2].append(tok2) - hits += 1 - - for option in [node1, node2]: - matchers_to_remove = [] - for matcher in node_matches[option]: - if matcher.token not in matches[option]: - matchers_to_remove.append(matcher) - for matcher in matchers_to_remove: - node_matches[option].remove(matcher) - else: - node1 = relation.split(operator)[0] - node2 = relation.split(operator)[1] - - node1=int(node1.replace("#", "")) - node2=int(node2.replace("#", "")) - for matcher1 in node_matches[node1]: - tok1 = matcher1.token - for matcher2 in node_matches[node2]: - tok2 = matcher2.token - if self.test_relation(tok1, tok2, operator) or matcher1.sent_def: # Sentence dominance always True - result_sets.append({node1: tok1, node2: tok2, "rel": relation, "matchers": [matcher1, matcher2], - "ID2matcher":{node1:matcher1, node2:matcher2}}) - matches[node1].append(tok1) - matches[node2].append(tok2) - hits += 1 - - for option in node1, node2: - matchers_to_remove = [] - for matcher in node_matches[option]: - if matcher.token not in matches[option]: - matchers_to_remove.append(matcher) - for matcher in matchers_to_remove: - node_matches[option].remove(matcher) - - if hits == 0: # No solutions found for this relation - return False - else: - return True - - @staticmethod - def test_relation(node1, node2, operator): - if operator == ".": - if int(float(node2.id)) == int(float(node1.id))+1: - return True - else: - return False - elif operator == ">": - if float(node2.head) == float(node1.id): - return True - else: - return False - elif operator == "~": - try: - eheads = [int(float(e[0])) for e in node2.edep if e[0] is not None] # ignore root edep - if int(float(node1.id)) in eheads: - return True - return False - except ValueError: # Node has no ehead or non-numeric ehead value, so float conversion fails - return False - elif "." in operator: - if int(float(node2.id)) == int(float(node1.id)): # Same node - return False - m = re.match(r'\.([0-9]+)(,[0-9]+)?',operator) - if len(m.groups()) > 1: - min_dist = int(m.group(1)) - if not m.group(2) is None: - max_dist = int(m.group(2).replace(",","")) - else: - max_dist = min_dist - if max_dist >= int(float(node2.id)) - int(float(node1.id)) >= min_dist: - return True - else: - return False - else: - dist = int(m.group(1)) - if int(float(node2.id)) - int(float(node1.id)) == dist: - return True - else: - return False - else: - val1 = getattr(node1,operator) - val2 = getattr(node2,operator) - return val1 == val2 - - def merge_sets(self, sets, node_count, rel_count): - - solutions = [] - bins = [] - for set_to_merge in sets: - new_set = {"rels": [], "matchers": []} - for key in set_to_merge: - if key == "rel": - new_set["rels"].append(set_to_merge[key]) - elif key == "matchers": - new_set["matchers"] += set_to_merge[key] - else: - new_set[key] = set_to_merge[key] - - for my_bin in copy(bins): - if self.bins_compatible(new_set, my_bin): - candidate = self.merge_bins(new_set, my_bin) - bins.append(copy(candidate)) - bins.append(copy(new_set)) - - for my_bin in bins: - if len(my_bin) == node_count + 3: - if len(my_bin["rels"]) == rel_count: # All required relations have been fulfilled - solutions.append(my_bin) - else: # Some node pair has multiple relations, check that all are fulfilled - for set_to_merge in sets: - if set_to_merge["rel"] not in my_bin["rels"]: # This relation was missing - node_ids = list((key) for key in set_to_merge if isinstance(key, int)) - # Check that the missing rel connects nodes that are already in my_bin - ids_are_in_bin = list((nid in my_bin) for nid in node_ids) - if all(ids_are_in_bin): - nodes_are_identical = list((set_to_merge[nid] == my_bin[nid]) for nid in node_ids) - if all(nodes_are_identical): - my_bin["rels"].append(set_to_merge["rel"]) - if len(my_bin["rels"]) == rel_count: # Check if we now have all required relations - solutions.append(my_bin) - - merged_bins = [] - for solution in solutions: - self.merge_solutions(solution, merged_bins, rel_count) - self.prune_merged_bins(merged_bins, rel_count) - return merged_bins - - @staticmethod - def merge_solutions(solution, merged, rel_count): - merges_to_add = [] - if solution not in merged: - merged.append(solution) - if len(solution["rels"]) != rel_count: # Otherwise this solution is completed - # This is an incomplete solution, try to merge it into the merged solutions list - for candidate in merged: - if candidate != solution: - for key in solution: - if key != "rels" and key != "matchers": - if key in candidate: # This is a position, e.g. #1, that is also in the candidate in merged - # Check that they are compatible, e.g. #1 is the same token - if solution[key] == candidate[key]: - rels_in_candidate = (rel in candidate["rels"] for rel in solution["rels"]) - if not all(rels_in_candidate): - rels = solution["rels"] + candidate["rels"] - matchers = [] - for matcher in solution["matchers"]: - matchers.append(matcher) - for matcher in candidate["matchers"]: - if matcher not in matchers: - matchers.append(matcher) - merged_solution = copy(solution) - merged_solution.update(candidate) - merged_solution["rels"] = rels - merged_solution["matchers"] = matchers - merges_to_add.append(merged_solution) - merged.extend(merges_to_add) - solution["rels"].sort() - - @staticmethod - def bins_compatible(bin1, bin2): - overlap = False - non_overlap = False - for key in bin1: - if key in bin2: - if bin1[key] == bin2[key]: - overlap = True - if key not in bin2: - non_overlap = True - if overlap and non_overlap: - return True - else: - return False - - @staticmethod - def merge_bins(bin1, bin2): - """ - Merge bins we know are compatible, e.g. bin1 has #1+#2 and bin2 has #2+#3 - - :param bin1: a bin dictionary mapping indices to tokens, a list of relations 'rels' and matcher objects 'matchers' - :param bin2: a bin dictionary mapping indices to tokens, a list of relations 'rels' and matcher objects 'matchers' - :return: the merged bin with data from both input bins - """ - for matcher in bin1["matchers"]: - skip = False - for matcher2 in bin2["matchers"]: - if matcher2.def_index == matcher.def_index: - skip = True - elif matcher.token == matcher2.token: - skip = True # Same token can't serve two roles in a merged bin - if not skip: - if matcher not in bin2["matchers"]: - bin2["matchers"].append(matcher) - for key in bin1: - if key != "rels": - if key not in bin2: - out_bin = copy(bin2) - out_bin[key] = bin1[key] - for rel in bin1["rels"]: - new_rel = deepcopy(rel) - out_bin["rels"] = bin2["rels"] + [new_rel] - return out_bin - - @staticmethod - def prune_merged_bins(merged_bins, rel_count): - """ - Deletes bins with too few relationships matched after merging is complete - - :param merged_bins: candidates for bins representing complete related chains of nodes - :param rel_count: how many relations the current transformation has - any bins with less will be discarded now - :return: void - """ - bins_to_delete = [] - for merged_bin in merged_bins: - if len(merged_bin["rels"]) < rel_count: - bins_to_delete.append(merged_bin) - for bin_to_delete in bins_to_delete: - merged_bins.remove(bin_to_delete) - - @staticmethod - def add_groups(result_sets): - for result in result_sets: - groups = [] - sorted_matchers = sorted(result["matchers"], key=lambda x: x.def_index) - for matcher in sorted_matchers: - for group in matcher.groups: - for g in group: - if g is not None: - if "\\" in g: - g = re.sub(r'\\', r'\\\\', g) - groups.append(g) - result["groups"] = groups[:] - - def execute_supertoken(self, result_sets, action_list, transformation, conll_tokens): - def remove_misc(token, anno): - miscs = token.func2.split("|") - filtered = [] - for a in miscs: - if not a.startswith(anno+"="): - filtered.append(a) - if len(filtered) == 0: - token.func2 = "_" - else: - token.func2 = "|".join(filtered) - - for res in result_sets: - begin_idx = conll_tokens.index(res[1]) - if "." in res[1].num or "." in res[2].num: # Ellipsis tokens cannot form supertokens - continue - super_id = res[1].num + "-" + res[2].num - if any([t.num==super_id for t in conll_tokens]): # Do not produce already existing supertokens - continue - super_text = res[1].text + res[2].text - misc = "_" if "SpaceAfter=No" not in res[2].func2 else "SpaceAfter=No" - remove_misc(res[1],"SpaceAfter") - remove_misc(res[2],"SpaceAfter") - supertok = ParsedToken(super_id, super_text, "_", "_", "_", "_", "_", "_", "_", misc, super_id, [], "", is_super_tok=True) - conll_tokens.insert(begin_idx, supertok) - - def execute_action(self, result_sets, action_list, transformation): - actions = action_list.split(";") - for result in result_sets: - if len(result) > 0: - for action in actions: - if action == "last": # Completely ends processing of this sentence - return "last" - elif action == "once": # Stop executing action but return to rule cascade - return None - elif ":" in action: # Unary instruction - if action.startswith("#S:"): # Sentence annotation instruction - key_val = action.split(":")[1] - key, val = key_val.split("=", 1) - result[1].sentence.annotations[key] = val - else: # node instruction - node_position = int(action[1:action.find(":")]) - if not self.quiet: - if node_position in result["ID2matcher"]: - if result["ID2matcher"][node_position].sent_def: - sys.stdout.write("! Warning: Rule is applying a *token* transformation to a *sentence* annotation node:\n") - sys.stdout.write(" " + transformation.transformation_text + "\n") - sys.stdout.write(" Applying the transformation to first token in sentence.\n") - prop = action[action.find(":") + 1:action.find("=")] - value = action[action.find("=") + 1:].strip() - add_val = False - subtract_val = False - if prop.endswith("+"): # Add annotation, e.g. feats+=... - add_val = True - prop = prop[:-1] - elif prop.endswith("-"): # Remove annotation, e.g. feats-=... - subtract_val = True - prop = prop[:-1] - group_num_matches = re.findall(r"(\$[0-9]+[LU]?)", value) - if group_num_matches is not None: - for g in group_num_matches: - no_dollar = g[1:] - case = "" - if no_dollar[-1] == "U": - case = "upper" - no_dollar = no_dollar[0:-1] - elif no_dollar[-1] == "L": - case = "lower" - no_dollar = no_dollar[0:-1] - group_num = int(no_dollar) - try: - group_value = result["groups"][group_num - 1] - if case == "lower": - group_value = group_value.lower() - elif case == "upper": - group_value = group_value.upper() - except IndexError: - sys.stderr.write("The action '" + action + "' refers to a missing regex bracket group '$" + - str(group_num) + "'\n") - sys.exit() - group_str = str(group_num) - if case == "lower": - group_str += "L" - elif case == "upper": - group_str += "U" - value = re.sub(r"\$" + group_str, group_value, value) - if add_val: - old_val = getattr(result[node_position],prop) - new_vals = sorted(value.split("|")) - new_vals_keys = [v.split("=")[0] for v in new_vals] - if old_val != "_": # Some values already exist - kv = [] - for ov in sorted(old_val.split("|")): - if not ov.split("=")[0] in new_vals_keys: # Else this needs to be overwritten - kv.append(ov) - kv += new_vals - value = "|".join(sorted(kv,key=lambda x:x.lower())) - else: - value = "|".join(new_vals) - elif subtract_val: - old_val = getattr(result[node_position],prop) - new_vals = sorted(value.split("|")) - new_vals_keys = [v.split("=")[0] for v in new_vals] - if old_val != "_": # Some values already exist - kv = [] - for ov in sorted(old_val.split("|")): - if not ov.split("=")[0] in new_vals_keys: # Else this needs to be overwritten - kv.append(ov) - value = "|".join(sorted(kv,key=lambda x:x.lower())) - if value == "": - value = "_" - else: - value = "_" - if prop == "edep": - if value == "": # Set empty edep - result[node_position].edep = [] - elif len(result[node_position].edep) == 0: - result[node_position].edep.append([None,value]) - sys.stderr.write("WARN: added an enhanced label before adding its edge in transformation:\n" + - str(transformation) + "\n") - else: # There is an edge waiting for a label - # Get first edge with None label (FIFO) - try: - index = [i for i, dep in enumerate(result[node_position].edep) if dep[-1] is None][0] - except IndexError: # All are filled, overwrite top of stack - index = -1 - result[node_position].edep[index][1] = value - elif prop == "edom": - if "||" in value: - h, rel = value.split("||", maxsplit=1) - new_rels = [] - for dom in result[node_position].edep: - if dom[0] != h: # Leave out any existing edeps with the same head unless they are substrings - new_rels.append(dom) - elif dom[1].startswith(rel) or rel.startswith(dom[1]): - new_rels.append(dom) - new_rels.append([h, rel]) - #result[node_position].edep.append([h, rel]) - result[node_position].edep = new_rels - else: - sys.stderr.write("WARN: skipped attempt to write edom; value does not follow the format HEAD||EDEP (e.g. 8.0||nsubj:xsubj)\n") - elif prop == "ehead": - result[node_position].edep.append([value, None]) - else: - setattr(result[node_position], prop, value) - else: - if ">" in action: # Binary instruction; head relation - operator = ">" - elif "~" in action: - operator = "~" - else: - continue - node1 = int(action.split(operator)[0].replace("#", "")) - node2 = int(action.split(operator)[1].replace("#", "")) - tok1 = result[node1] - tok2 = result[node2] - if tok1 != tok2: - if operator == ">": - tok2.head = tok1.id - else: - if tok1.id not in [e[0] for e in tok2.edep] or True: # Experimental: remove True to disallow overwriting edeps - # This is a new enhanced edge - if len(tok2.edep) == 0: - tok2.edep.append([tok1.id, None]) # Add an enhanced edge, with a pending label None - elif tok2.edep[-1][0] is None: # There is an existing label with a pending parent - tok2.edep[-1][0] = tok1.id - else: - tok2.edep.append([tok1.id, None]) # Add an enhanced edge, with a pending label None - - def add_variable(self, key, value): - self.variables[key] = value - - def add_transformation(self, *args, **kwargs): - """ - Flexible function for adding transformations to an imported DepEdit object, rather than reading them from a configuration file - - :param args: a string specifying a transformation line (three specs separated by two tabs), or a tuples of such strings - :param kwargs: alternatively, a dictionary supplying three lists for the keys: 'nodes', 'rels', 'actions' - :return: void - """ - - if len(args)>0: # Single string transformation(s) - - if not isinstance(args,list): # Make list out of input tuple - args = list(arg for arg in args) - if isinstance(args[0], list): # Flatten list in case user provided a list - args = args[0] - for transformation_string in args: - try: - self.user_transformation_counter += 1 - user_line_number = "u" + str(self.user_transformation_counter) - new_transformation = Transformation(transformation_string,user_line_number, self) - self.transformations.append(new_transformation) - except: - raise IOError("Invalid transformation - must be a string") - elif "nodes" in kwargs and "rels" in kwargs and "actions" in kwargs: - if not (isinstance(kwargs["nodes"], list) and (isinstance(kwargs["nodes"], list)) and (isinstance(kwargs["nodes"], list))): - raise IOError("Invalid transformation - must supply three lists in values for keys: nodes, rels, actions") - else: - node_clause = ";".join(kwargs["nodes"]) - rel_clause = ";".join(kwargs["rels"]) - actions_clause = ";".join(kwargs["actions"]) - transformation_string = "\t".join([node_clause,rel_clause,actions_clause]) - - self.user_transformation_counter += 1 - user_line_number = "u" + str(self.user_transformation_counter) - new_transformation = Transformation(transformation_string, user_line_number, self) - self.transformations.append(new_transformation) - - def serialize_output_tree(self, tokens, tokoffset, enhanced=False): - def order_edep(multi_edep_string): - # edep with | must be ordered by ehead without duplicates - parts = multi_edep_string.split("|") - d = {} - # sort by len, meaning we prefer longer edeps for duplicates with same ehead - for p in sorted(parts,key=lambda x: len(x)): - if ":" in p: - eh, ed = p.split(":",maxsplit=1) - d[eh] = ed - else: # Non-UD edeps field, warn and return naive sort - sys.stderr.write("WARN: Non-standard value in column 9: enhanced dependencies should contain ':'\n") - sys.stderr.write(multi_edep_string + "\n") - return "|".join(sorted(parts)) - try: - sorted_keys = sorted(list(iterkeys(d)), key=lambda x: float(x)) - except ValueError: - sys.stderr.write("WARN: Non-numeric enhanced head in column 9:\n") - sys.stderr.write(multi_edep_string + "\n") - return "|".join(sorted(parts)) - vals = [":".join([k, d[k]]) for k in sorted_keys] - return "|".join(vals) - - output_tree_lines = [] - for tok in tokens: - if tok.is_super_tok: - if self.kill in ["both", "supertoks"]: - continue - tok_head_string = tok.head - tok_id = tok.id - elif tok.head == "0": - tok_head_string = "0" - tok_id = str(Decimal(tok.id) - tokoffset) - else: - tok_head_string = str(Decimal(tok.head) - tokoffset) - tok_id = str(Decimal(tok.id) - tokoffset) - if tok.head2 not in ["","_"]: # explicitly set head2 field - tok_ehead_string = tok.head2 - elif len(tok.edep) == 0: - tok_ehead_string = "_" - tok.head2 = "_" - else: - tok_ehead_string = [":".join([str(Decimal(ehead[0]) - tokoffset).replace(".0", ""),ehead[1]]) for ehead in tok.edep] - tok_ehead_string = "|".join(tok_ehead_string) - if "-" in tok_ehead_string: - tok_ehead_string = re.sub(r'-[0-9]+(?=:)', '0', tok_ehead_string) - tok_ehead_string = order_edep(tok_ehead_string) - tok_id = tok_id.replace(".0", "") - tok_head_string = tok_head_string.replace(".0", "") - if "." in tok_id: - tok_head_string = "_" - fields = [tok_id, tok.text, tok.lemma, tok.pos, tok.cpos, tok.morph, tok_head_string, tok.func] - if self.input_mode != "8col": - if enhanced or tok.edep != []: - if tok.edep != []: - tok.head2 = tok_ehead_string - elif tok.head2 == "_": - tok.head2 = ":".join([tok_head_string, tok.func]) # Default edep column contents - func2 = tok.func2 if len(tok.func2) > 0 else "_" - fields += [tok.head2, func2] - output_tree_lines.append("\t".join(fields)) - return output_tree_lines - - def make_sent_id(self, sent_id): - return self.docname + "-" + str(sent_id) - - def make_sent_text(self, sentence_tokens): - toks = [] - word = "" - skip = 0 - super_space_after = True - for tok in sentence_tokens: - if tok.is_super_tok: - word = tok.text - start, end = tok.num.split("-") - skip = int(end) - int(start) + 1 - if "SpaceAfter=No" in tok.func2: - super_space_after = False - if tok.id.endswith(".0"): - if skip > 0: - skip -= 1 - if skip == 0: - if "SpaceAfter=No" not in tok.func2 and super_space_after: - word += " " - toks.append(word) - super_space_after = True - continue - word = tok.text - if "SpaceAfter=No" not in tok.func2: - word += " " - toks.append(word) - return "".join(toks) - - def run_depedit(self, infile, filename="file", sent_id=False, docname=False, stepwise=False, enhanced=False, sent_text=False): - - children = defaultdict(list) - child_funcs = defaultdict(list) - conll_tokens = [0] - self.input_mode = "10col" - self.docname = filename - tokoffset = supertok_offset = sentlength = supertok_length = 0 - output_lines = [] - sentence_lines = [] - current_sentence = Sentence(sent_num=1, depedit_object=self) - - def _process_sentence(stepwise=False, enhanced=False): - current_sentence.length = sentlength - conll_tokens[-1].position = "last" - sentence_tokens = conll_tokens[tokoffset + supertok_offset + 1:] - self.process_sentence(sentence_tokens,stepwise=stepwise) - if sent_id: - #output_lines.append(self.make_sent_id(current_sentence.sent_num)) - current_sentence.annotations["sent_id"] = self.make_sent_id(current_sentence.sent_num) - if sent_text: - current_sentence.annotations["text"] = self.make_sent_text(sentence_tokens) - transformed = current_sentence.print_annos() + self.serialize_output_tree(sentence_tokens, tokoffset, enhanced=enhanced) - output_lines.extend(transformed) - - # Check if DepEdit has been fed an unsplit string programmatically - if isinstance(infile, str): - infile = infile.splitlines() - - in_data = [] - for myline in infile: - in_data.append(myline) - myline = myline.strip() - if sentlength > 0 and "\t" not in myline: - _process_sentence(stepwise=stepwise, enhanced=enhanced) - sentence_lines = [] - tokoffset += sentlength - supertok_offset += supertok_length - current_sentence = Sentence(sent_num=current_sentence.sent_num + 1,tokoffset=tokoffset, depedit_object=self) - sentlength = supertok_length = 0 - if myline.startswith("#"): # Preserve comment lines unless kill requested - if self.kill not in ["comments", "both"] and "=" not in myline: - output_lines.append(myline.strip()) - if "=" in myline: - key, val = myline[1:].split("=",1) - current_sentence.input_annotations[key.strip()] = val.strip() - elif not myline: - output_lines.append("") - elif myline.find("\t") > 0: # Only process lines that contain tabs (i.e. conll tokens) - sentence_lines.append(myline.strip()) - cols = myline.split("\t") - if "-" in cols[0]: # potential conllu super-token, just preserve - super_tok = True - tok_id = cols[0] - head_id = cols[6] - else: - super_tok = False - tok_id = str(float(cols[0]) + tokoffset) - if cols[6] == "_": - if not self.quiet and "." not in cols[0]: - sys.stderr.write("DepEdit WARN: head not set for token " + tok_id + " in " + filename + "\n") - head_id = str(0 + tokoffset) - else: - head_id = str(float(cols[6]) + tokoffset) - args = (tok_id,) + tuple(cols[1:6]) + (head_id, cols[7]) - if len(cols) > 8: - # Collect token from line; note that head2 is parsed as a string, often "_" for monoplanar trees - args += (cols[8], cols[9]) - else: # Attempt to read as 8 column Malt input - args += (cols[6], cols[7]) - self.input_mode = "8col" - args += (cols[0], [], "mid", super_tok, tokoffset) - this_tok = ParsedToken(*args) - if cols[0] == "1" and not super_tok: - this_tok.position = "first" - this_tok.sentence = current_sentence - conll_tokens.append(this_tok) - if super_tok: - supertok_length += 1 - else: - sentlength += 1 - children[str(float(head_id) + tokoffset)].append(tok_id) - child_funcs[(float(head_id) + tokoffset)].append(cols[7]) - - if sentlength > 0: # Possible final sentence without trailing new line - _process_sentence(stepwise=stepwise, enhanced=enhanced) - - if docname: - newdoc = '# newdoc id = ' + self.docname - output_lines.insert(0, newdoc) - - # Trailing whitespace - rev = "".join(in_data)[::-1] - white = re.match(r'\s*',rev).group() - - return "\n".join(output_lines).strip() + white + def __init__(self, config_file="", options=None): + self.variables = {} + self.transformations = [] + self.user_transformation_counter = 0 + self.quiet = False + self.kill = None + if options is not None: + if "quiet" in options.__dict__ or options.quiet is not None: + self.quiet = options.quiet + if "kill" in options.__dict__ or options.kill is not None: + if options.kill in ["supertoks", "comments", "both"]: + self.kill = options.kill + if config_file != "": + self.read_config_file(config_file) + self.docname = self.input_mode = None + + def read_config_file(self, config_file, clear_transformations=False): + """ + Function to read configuration file. Can be invoked after initialization. + + :param config_file: The file to read instructions from. + :param clear_transformations: Whether to discard previous instructions. + :return: void + """ + + if clear_transformations: + self.transformations = [] + self.user_transformation_counter = 0 + if isinstance(config_file, str): + if sys.version_info[0] < 3: + config_file = open(config_file).readlines() + else: + config_file = open(config_file, encoding="utf8").readlines() + + line_num = 0 + for instruction in config_file: + instruction = instruction.strip() + line_num += 1 + match_variable = re.match(r'\{([^}]+)\}=/([^\n]+)/',instruction) + if match_variable is not None: + key = match_variable.group(1) + val = match_variable.group(2) + self.add_variable(key,val) + elif len(instruction) > 0 and not instruction.startswith(";") and not instruction.startswith("#") \ + or instruction.startswith("#S:"): + self.transformations.append(Transformation(instruction, line_num, self)) + + trans_report = "" + for transformation in self.transformations: + temp_report = transformation.validate() + if temp_report != "": + trans_report += "On line " + str(transformation.line) + ": " + temp_report + "\n" + if len(trans_report) > 0: + trans_report = "Depedit says: error in configuration file\n\n" + trans_report + sys.stderr.write(trans_report) + sys.exit() + + def process_sentence(self, conll_tokens, stepwise=False): + for i, transformation in enumerate(self.transformations): + if stepwise: + if sys.version_info[0] < 3: + print(("# Rule " + str(i+1) + ": " + str(transformation)+"\n").encode("utf-8"),end="") + else: + print("# Rule " + str(i+1) + ": " + str(transformation)+'\n',end="") + + node_matches = defaultdict(list) + for def_matcher in transformation.definitions: + for token in conll_tokens: + if not token.is_super_tok and def_matcher.match(token): + if def_matcher.sent_def: + if len(node_matches[def_matcher.def_index])==0: # Only add a sentence anno definition once + node_matches[def_matcher.def_index] = [Match(def_matcher.def_index, token, def_matcher.groups)] + node_matches[def_matcher.def_index][0].sent_def = True + else: + node_matches[def_matcher.def_index].append(Match(def_matcher.def_index, token, def_matcher.groups)) + result_sets = [] + for relation in transformation.relations: + if not self.matches_relation(node_matches, relation, result_sets): + result_sets = [] + result_sets = self.merge_sets(result_sets, len(transformation.definitions), len(transformation.relations)) + self.add_groups(result_sets) + if len(result_sets) > 0: + for action in transformation.actions: + if "><" not in action: + retval = self.execute_action(result_sets, action, transformation) + else: + retval = self.execute_supertoken(result_sets, action, transformation, conll_tokens) + if retval == "last": # Explicit instruction to cease processing + return + if stepwise: + print("\n".join(self.serialize_output_tree(conll_tokens, 0))+"\n") + + def matches_relation(self, node_matches, relation, result_sets): + if len(relation) == 0: + return False + operator = field = None + if "==" in relation: + m = re.search(r':(.+)==', relation) + operator = m.group() + field = m.group(1) + elif "." in relation: + if re.match(r'.*\.[0-9]', relation): + m = re.match(r'.*\.[0-9]*,?[0-9]*#', relation) + operator = m.group() + operator = operator[operator.find("."):operator.rfind("#")] + else: + operator = "." + elif ">" in relation: + operator = ">" + elif "~" in relation: + operator = "~" + + matches = defaultdict(list) + + hits = 0 + if relation == "none": # Unary operation on one node + node1 = 1 + for matcher1 in node_matches[node1]: + tok1 = matcher1.token + hits += 1 + result = {} + matches[node1].append(tok1) + result[node1] = tok1 + result["rel"] = relation + result["matchers"] = [matcher1] + result["ID2matcher"] = {node1:matcher1} + result_sets.append(result) + elif "==" in relation: + node1 = relation.split(operator)[0] + node2 = relation.split(operator)[1] + node1 = int(node1.replace("#", "")) + node2 = int(node2.replace("#", "")) + + for matcher1 in node_matches[node1]: + tok1 = matcher1.token + for matcher2 in node_matches[node2]: + tok2 = matcher2.token + if self.test_relation(tok1, tok2, field): + result_sets.append({node1: tok1, node2: tok2, "rel": relation, "matchers": [matcher1, matcher2], + "ID2matcher":{node1:matcher1, node2:matcher2}}) + matches[node1].append(tok1) + matches[node2].append(tok2) + hits += 1 + + for option in [node1, node2]: + matchers_to_remove = [] + for matcher in node_matches[option]: + if matcher.token not in matches[option]: + matchers_to_remove.append(matcher) + for matcher in matchers_to_remove: + node_matches[option].remove(matcher) + else: + node1 = relation.split(operator)[0] + node2 = relation.split(operator)[1] + + node1=int(node1.replace("#", "")) + node2=int(node2.replace("#", "")) + for matcher1 in node_matches[node1]: + tok1 = matcher1.token + for matcher2 in node_matches[node2]: + tok2 = matcher2.token + if self.test_relation(tok1, tok2, operator) or matcher1.sent_def: # Sentence dominance always True + result_sets.append({node1: tok1, node2: tok2, "rel": relation, "matchers": [matcher1, matcher2], + "ID2matcher":{node1:matcher1, node2:matcher2}}) + matches[node1].append(tok1) + matches[node2].append(tok2) + hits += 1 + + for option in node1, node2: + matchers_to_remove = [] + for matcher in node_matches[option]: + if matcher.token not in matches[option]: + matchers_to_remove.append(matcher) + for matcher in matchers_to_remove: + node_matches[option].remove(matcher) + + if hits == 0: # No solutions found for this relation + return False + else: + return True + + @staticmethod + def test_relation(node1, node2, operator): + if operator == ".": + if int(float(node2.id)) == int(float(node1.id))+1: + return True + else: + return False + elif operator == ">": + if float(node2.head) == float(node1.id): + return True + else: + return False + elif operator == "~": + try: + eheads = [int(float(e[0])) for e in node2.edep if e[0] is not None] # ignore root edep + if int(float(node1.id)) in eheads: + return True + return False + except ValueError: # Node has no ehead or non-numeric ehead value, so float conversion fails + return False + elif "." in operator: + if int(float(node2.id)) == int(float(node1.id)): # Same node + return False + m = re.match(r'\.([0-9]+)(,[0-9]+)?',operator) + if len(m.groups()) > 1: + min_dist = int(m.group(1)) + if not m.group(2) is None: + max_dist = int(m.group(2).replace(",","")) + else: + max_dist = min_dist + if max_dist >= int(float(node2.id)) - int(float(node1.id)) >= min_dist: + return True + else: + return False + else: + dist = int(m.group(1)) + if int(float(node2.id)) - int(float(node1.id)) == dist: + return True + else: + return False + else: + val1 = getattr(node1,operator) + val2 = getattr(node2,operator) + return val1 == val2 + + def merge_sets(self, sets, node_count, rel_count): + + solutions = [] + bins = [] + for set_to_merge in sets: + new_set = {"rels": [], "matchers": []} + for key in set_to_merge: + if key == "rel": + new_set["rels"].append(set_to_merge[key]) + elif key == "matchers": + new_set["matchers"] += set_to_merge[key] + else: + new_set[key] = set_to_merge[key] + + for my_bin in copy(bins): + if self.bins_compatible(new_set, my_bin): + candidate = self.merge_bins(new_set, my_bin) + bins.append(copy(candidate)) + bins.append(copy(new_set)) + + for my_bin in bins: + if len(my_bin) == node_count + 3: + if len(my_bin["rels"]) == rel_count: # All required relations have been fulfilled + solutions.append(my_bin) + else: # Some node pair has multiple relations, check that all are fulfilled + for set_to_merge in sets: + if set_to_merge["rel"] not in my_bin["rels"]: # This relation was missing + node_ids = list((key) for key in set_to_merge if isinstance(key, int)) + # Check that the missing rel connects nodes that are already in my_bin + ids_are_in_bin = list((nid in my_bin) for nid in node_ids) + if all(ids_are_in_bin): + nodes_are_identical = list((set_to_merge[nid] == my_bin[nid]) for nid in node_ids) + if all(nodes_are_identical): + my_bin["rels"].append(set_to_merge["rel"]) + if len(my_bin["rels"]) == rel_count: # Check if we now have all required relations + solutions.append(my_bin) + + merged_bins = [] + for solution in solutions: + self.merge_solutions(solution, merged_bins, rel_count) + self.prune_merged_bins(merged_bins, rel_count) + return merged_bins + + @staticmethod + def merge_solutions(solution, merged, rel_count): + merges_to_add = [] + if solution not in merged: + merged.append(solution) + if len(solution["rels"]) != rel_count: # Otherwise this solution is completed + # This is an incomplete solution, try to merge it into the merged solutions list + for candidate in merged: + if candidate != solution: + for key in solution: + if key != "rels" and key != "matchers": + if key in candidate: # This is a position, e.g. #1, that is also in the candidate in merged + # Check that they are compatible, e.g. #1 is the same token + if solution[key] == candidate[key]: + rels_in_candidate = (rel in candidate["rels"] for rel in solution["rels"]) + if not all(rels_in_candidate): + rels = solution["rels"] + candidate["rels"] + matchers = [] + for matcher in solution["matchers"]: + matchers.append(matcher) + for matcher in candidate["matchers"]: + if matcher not in matchers: + matchers.append(matcher) + merged_solution = copy(solution) + merged_solution.update(candidate) + merged_solution["rels"] = rels + merged_solution["matchers"] = matchers + merges_to_add.append(merged_solution) + merged.extend(merges_to_add) + solution["rels"].sort() + + @staticmethod + def bins_compatible(bin1, bin2): + overlap = False + non_overlap = False + for key in bin1: + if key in bin2: + if bin1[key] == bin2[key]: + overlap = True + if key not in bin2: + non_overlap = True + if overlap and non_overlap: + return True + else: + return False + + @staticmethod + def merge_bins(bin1, bin2): + """ + Merge bins we know are compatible, e.g. bin1 has #1+#2 and bin2 has #2+#3 + + :param bin1: a bin dictionary mapping indices to tokens, a list of relations 'rels' and matcher objects 'matchers' + :param bin2: a bin dictionary mapping indices to tokens, a list of relations 'rels' and matcher objects 'matchers' + :return: the merged bin with data from both input bins + """ + for matcher in bin1["matchers"]: + skip = False + for matcher2 in bin2["matchers"]: + if matcher2.def_index == matcher.def_index: + skip = True + elif matcher.token == matcher2.token: + skip = True # Same token can't serve two roles in a merged bin + if not skip: + if matcher not in bin2["matchers"]: + bin2["matchers"].append(matcher) + for key in bin1: + if key != "rels": + if key not in bin2: + out_bin = copy(bin2) + out_bin[key] = bin1[key] + for rel in bin1["rels"]: + new_rel = deepcopy(rel) + out_bin["rels"] = bin2["rels"] + [new_rel] + return out_bin + + @staticmethod + def prune_merged_bins(merged_bins, rel_count): + """ + Deletes bins with too few relationships matched after merging is complete + + :param merged_bins: candidates for bins representing complete related chains of nodes + :param rel_count: how many relations the current transformation has - any bins with less will be discarded now + :return: void + """ + bins_to_delete = [] + for merged_bin in merged_bins: + if len(merged_bin["rels"]) < rel_count: + bins_to_delete.append(merged_bin) + for bin_to_delete in bins_to_delete: + merged_bins.remove(bin_to_delete) + + @staticmethod + def add_groups(result_sets): + for result in result_sets: + groups = [] + sorted_matchers = sorted(result["matchers"], key=lambda x: x.def_index) + for matcher in sorted_matchers: + for group in matcher.groups: + for g in group: + if g is not None: + if "\\" in g: + g = re.sub(r'\\', r'\\\\', g) + groups.append(g) + result["groups"] = groups[:] + + def execute_supertoken(self, result_sets, action_list, transformation, conll_tokens): + def remove_misc(token, anno): + miscs = token.func2.split("|") + filtered = [] + for a in miscs: + if not a.startswith(anno+"="): + filtered.append(a) + if len(filtered) == 0: + token.func2 = "_" + else: + token.func2 = "|".join(filtered) + + for res in result_sets: + begin_idx = conll_tokens.index(res[1]) + if "." in res[1].num or "." in res[2].num: # Ellipsis tokens cannot form supertokens + continue + super_id = res[1].num + "-" + res[2].num + if any([t.num==super_id for t in conll_tokens]): # Do not produce already existing supertokens + continue + super_text = res[1].text + res[2].text + misc = "_" if "SpaceAfter=No" not in res[2].func2 else "SpaceAfter=No" + remove_misc(res[1],"SpaceAfter") + remove_misc(res[2],"SpaceAfter") + supertok = ParsedToken(super_id, super_text, "_", "_", "_", "_", "_", "_", "_", misc, super_id, [], "", is_super_tok=True) + conll_tokens.insert(begin_idx, supertok) + + def execute_action(self, result_sets, action_list, transformation): + actions = action_list.split(";") + for result in result_sets: + if len(result) > 0: + for action in actions: + if action == "last": # Completely ends processing of this sentence + return "last" + elif action == "once": # Stop executing action but return to rule cascade + return None + elif ":" in action: # Unary instruction + if action.startswith("#S:"): # Sentence annotation instruction + key_val = action.split(":")[1] + key, val = key_val.split("=", 1) + result[1].sentence.annotations[key] = val + else: # node instruction + node_position = int(action[1:action.find(":")]) + if not self.quiet: + if node_position in result["ID2matcher"]: + if result["ID2matcher"][node_position].sent_def: + sys.stdout.write("! Warning: Rule is applying a *token* transformation to a *sentence* annotation node:\n") + sys.stdout.write(" " + transformation.transformation_text + "\n") + sys.stdout.write(" Applying the transformation to first token in sentence.\n") + prop = action[action.find(":") + 1:action.find("=")] + value = action[action.find("=") + 1:].strip() + add_val = False + subtract_val = False + if prop.endswith("+"): # Add annotation, e.g. feats+=... + add_val = True + prop = prop[:-1] + elif prop.endswith("-"): # Remove annotation, e.g. feats-=... + subtract_val = True + prop = prop[:-1] + group_num_matches = re.findall(r"(\$[0-9]+[LU]?)", value) + if group_num_matches is not None: + for g in group_num_matches: + no_dollar = g[1:] + case = "" + if no_dollar[-1] == "U": + case = "upper" + no_dollar = no_dollar[0:-1] + elif no_dollar[-1] == "L": + case = "lower" + no_dollar = no_dollar[0:-1] + group_num = int(no_dollar) + try: + group_value = result["groups"][group_num - 1] + if case == "lower": + group_value = group_value.lower() + elif case == "upper": + group_value = group_value.upper() + except IndexError: + sys.stderr.write("The action '" + action + "' refers to a missing regex bracket group '$" + + str(group_num) + "'\n") + sys.exit() + group_str = str(group_num) + if case == "lower": + group_str += "L" + elif case == "upper": + group_str += "U" + value = re.sub(r"\$" + group_str, group_value, value) + if add_val: + old_val = getattr(result[node_position],prop) + new_vals = sorted(value.split("|")) + new_vals_keys = [v.split("=")[0] for v in new_vals] + if old_val != "_": # Some values already exist + kv = [] + for ov in sorted(old_val.split("|")): + if not ov.split("=")[0] in new_vals_keys: # Else this needs to be overwritten + kv.append(ov) + kv += new_vals + value = "|".join(sorted(kv,key=lambda x:x.lower())) + else: + value = "|".join(new_vals) + elif subtract_val: + old_val = getattr(result[node_position],prop) + new_vals = sorted(value.split("|")) + new_vals_keys = [v.split("=")[0] for v in new_vals] + if old_val != "_": # Some values already exist + kv = [] + for ov in sorted(old_val.split("|")): + if not ov.split("=")[0] in new_vals_keys: # Else this needs to be overwritten + kv.append(ov) + value = "|".join(sorted(kv,key=lambda x:x.lower())) + if value == "": + value = "_" + else: + value = "_" + if prop == "edep": + if value == "": # Set empty edep + result[node_position].edep = [] + elif len(result[node_position].edep) == 0: + result[node_position].edep.append([None,value]) + sys.stderr.write("WARN: added an enhanced label before adding its edge in transformation:\n" + + str(transformation) + "\n") + else: # There is an edge waiting for a label + # Get first edge with None label (FIFO) + try: + index = [i for i, dep in enumerate(result[node_position].edep) if dep[-1] is None][0] + except IndexError: # All are filled, overwrite top of stack + index = -1 + result[node_position].edep[index][1] = value + elif prop == "edom": + if "||" in value: + h, rel = value.split("||", maxsplit=1) + new_rels = [] + for dom in result[node_position].edep: + if dom[0] != h: # Leave out any existing edeps with the same head unless they are substrings + new_rels.append(dom) + elif dom[1].startswith(rel) or rel.startswith(dom[1]): + new_rels.append(dom) + new_rels.append([h, rel]) + #result[node_position].edep.append([h, rel]) + result[node_position].edep = new_rels + else: + sys.stderr.write("WARN: skipped attempt to write edom; value does not follow the format HEAD||EDEP (e.g. 8.0||nsubj:xsubj)\n") + elif prop == "ehead": + result[node_position].edep.append([value, None]) + else: + setattr(result[node_position], prop, value) + else: + if ">" in action: # Binary instruction; head relation + operator = ">" + elif "~" in action: + operator = "~" + else: + continue + node1 = int(action.split(operator)[0].replace("#", "")) + node2 = int(action.split(operator)[1].replace("#", "")) + tok1 = result[node1] + tok2 = result[node2] + if tok1 != tok2: + if operator == ">": + tok2.head = tok1.id + else: + if tok1.id not in [e[0] for e in tok2.edep] or True: # Experimental: remove True to disallow overwriting edeps + # This is a new enhanced edge + if len(tok2.edep) == 0: + tok2.edep.append([tok1.id, None]) # Add an enhanced edge, with a pending label None + elif tok2.edep[-1][0] is None: # There is an existing label with a pending parent + tok2.edep[-1][0] = tok1.id + else: + tok2.edep.append([tok1.id, None]) # Add an enhanced edge, with a pending label None + + def add_variable(self, key, value): + self.variables[key] = value + + def add_transformation(self, *args, **kwargs): + """ + Flexible function for adding transformations to an imported DepEdit object, rather than reading them from a configuration file + + :param args: a string specifying a transformation line (three specs separated by two tabs), or a tuples of such strings + :param kwargs: alternatively, a dictionary supplying three lists for the keys: 'nodes', 'rels', 'actions' + :return: void + """ + + if len(args)>0: # Single string transformation(s) + + if not isinstance(args,list): # Make list out of input tuple + args = list(arg for arg in args) + if isinstance(args[0], list): # Flatten list in case user provided a list + args = args[0] + for transformation_string in args: + try: + self.user_transformation_counter += 1 + user_line_number = "u" + str(self.user_transformation_counter) + new_transformation = Transformation(transformation_string,user_line_number, self) + self.transformations.append(new_transformation) + except: + raise IOError("Invalid transformation - must be a string") + elif "nodes" in kwargs and "rels" in kwargs and "actions" in kwargs: + if not (isinstance(kwargs["nodes"], list) and (isinstance(kwargs["nodes"], list)) and (isinstance(kwargs["nodes"], list))): + raise IOError("Invalid transformation - must supply three lists in values for keys: nodes, rels, actions") + else: + node_clause = ";".join(kwargs["nodes"]) + rel_clause = ";".join(kwargs["rels"]) + actions_clause = ";".join(kwargs["actions"]) + transformation_string = "\t".join([node_clause,rel_clause,actions_clause]) + + self.user_transformation_counter += 1 + user_line_number = "u" + str(self.user_transformation_counter) + new_transformation = Transformation(transformation_string, user_line_number, self) + self.transformations.append(new_transformation) + + def serialize_output_tree(self, tokens, tokoffset, enhanced=False): + def order_edep(multi_edep_string): + # edep with | must be ordered by ehead without duplicates + parts = multi_edep_string.split("|") + d = {} + # sort by len, meaning we prefer longer edeps for duplicates with same ehead + for p in sorted(parts,key=lambda x: len(x)): + if ":" in p: + eh, ed = p.split(":",maxsplit=1) + d[eh] = ed + else: # Non-UD edeps field, warn and return naive sort + sys.stderr.write("WARN: Non-standard value in column 9: enhanced dependencies should contain ':'\n") + sys.stderr.write(multi_edep_string + "\n") + return "|".join(sorted(parts)) + try: + sorted_keys = sorted(list(iterkeys(d)), key=lambda x: float(x)) + except ValueError: + sys.stderr.write("WARN: Non-numeric enhanced head in column 9:\n") + sys.stderr.write(multi_edep_string + "\n") + return "|".join(sorted(parts)) + vals = [":".join([k, d[k]]) for k in sorted_keys] + return "|".join(vals) + + output_tree_lines = [] + for tok in tokens: + if tok.is_super_tok: + if self.kill in ["both", "supertoks"]: + continue + tok_head_string = tok.head + tok_id = tok.id + elif tok.head == "0": + tok_head_string = "0" + tok_id = str(Decimal(tok.id) - tokoffset) + else: + tok_head_string = str(Decimal(tok.head) - tokoffset) + tok_id = str(Decimal(tok.id) - tokoffset) + if tok.head2 not in ["","_"]: # explicitly set head2 field + tok_ehead_string = tok.head2 + elif len(tok.edep) == 0: + tok_ehead_string = "_" + tok.head2 = "_" + else: + tok_ehead_string = [":".join([str(Decimal(ehead[0]) - tokoffset).replace(".0", ""),ehead[1]]) for ehead in tok.edep] + tok_ehead_string = "|".join(tok_ehead_string) + if "-" in tok_ehead_string: + tok_ehead_string = re.sub(r'-[0-9]+(?=:)', '0', tok_ehead_string) + tok_ehead_string = order_edep(tok_ehead_string) + tok_id = tok_id.replace(".0", "") + tok_head_string = tok_head_string.replace(".0", "") + if "." in tok_id: + tok_head_string = "_" + fields = [tok_id, tok.text, tok.lemma, tok.pos, tok.cpos, tok.morph, tok_head_string, tok.func] + if self.input_mode != "8col": + if enhanced or tok.edep != []: + if tok.edep != []: + tok.head2 = tok_ehead_string + elif tok.head2 == "_": + tok.head2 = ":".join([tok_head_string, tok.func]) # Default edep column contents + func2 = tok.func2 if len(tok.func2) > 0 else "_" + fields += [tok.head2, func2] + output_tree_lines.append("\t".join(fields)) + return output_tree_lines + + def make_sent_id(self, sent_id): + return self.docname + "-" + str(sent_id) + + def make_sent_text(self, sentence_tokens): + toks = [] + word = "" + skip = 0 + super_space_after = True + for tok in sentence_tokens: + if tok.is_super_tok: + word = tok.text + start, end = tok.num.split("-") + skip = int(end) - int(start) + 1 + if "SpaceAfter=No" in tok.func2: + super_space_after = False + if tok.id.endswith(".0"): + if skip > 0: + skip -= 1 + if skip == 0: + if "SpaceAfter=No" not in tok.func2 and super_space_after: + word += " " + toks.append(word) + super_space_after = True + continue + word = tok.text + if "SpaceAfter=No" not in tok.func2: + word += " " + toks.append(word) + return "".join(toks) + + def run_depedit(self, infile, filename="file", sent_id=False, docname=False, stepwise=False, enhanced=False, sent_text=False): + + children = defaultdict(list) + child_funcs = defaultdict(list) + conll_tokens = [0] + self.input_mode = "10col" + self.docname = filename + tokoffset = supertok_offset = sentlength = supertok_length = 0 + output_lines = [] + sentence_lines = [] + current_sentence = Sentence(sent_num=1, depedit_object=self) + + def _process_sentence(stepwise=False, enhanced=False): + current_sentence.length = sentlength + conll_tokens[-1].position = "last" + sentence_tokens = conll_tokens[tokoffset + supertok_offset + 1:] + self.process_sentence(sentence_tokens,stepwise=stepwise) + if sent_id: + #output_lines.append(self.make_sent_id(current_sentence.sent_num)) + current_sentence.annotations["sent_id"] = self.make_sent_id(current_sentence.sent_num) + if sent_text: + current_sentence.annotations["text"] = self.make_sent_text(sentence_tokens) + transformed = current_sentence.print_annos() + self.serialize_output_tree(sentence_tokens, tokoffset, enhanced=enhanced) + output_lines.extend(transformed) + + # Check if DepEdit has been fed an unsplit string programmatically + if isinstance(infile, str): + infile = infile.splitlines() + + in_data = [] + for myline in infile: + in_data.append(myline) + myline = myline.strip() + if sentlength > 0 and "\t" not in myline: + _process_sentence(stepwise=stepwise, enhanced=enhanced) + sentence_lines = [] + tokoffset += sentlength + supertok_offset += supertok_length + current_sentence = Sentence(sent_num=current_sentence.sent_num + 1,tokoffset=tokoffset, depedit_object=self) + sentlength = supertok_length = 0 + if myline.startswith("#"): # Preserve comment lines unless kill requested + if self.kill not in ["comments", "both"] and "=" not in myline: + output_lines.append(myline.strip()) + if "=" in myline: + key, val = myline[1:].split("=",1) + current_sentence.input_annotations[key.strip()] = val.strip() + elif not myline: + output_lines.append("") + elif myline.find("\t") > 0: # Only process lines that contain tabs (i.e. conll tokens) + sentence_lines.append(myline.strip()) + cols = myline.split("\t") + if "-" in cols[0]: # potential conllu super-token, just preserve + super_tok = True + tok_id = cols[0] + head_id = cols[6] + else: + super_tok = False + tok_id = str(float(cols[0]) + tokoffset) + if cols[6] == "_": + if not self.quiet and "." not in cols[0]: + sys.stderr.write("DepEdit WARN: head not set for token " + tok_id + " in " + filename + "\n") + head_id = str(0 + tokoffset) + else: + head_id = str(float(cols[6]) + tokoffset) + args = (tok_id,) + tuple(cols[1:6]) + (head_id, cols[7]) + if len(cols) > 8: + # Collect token from line; note that head2 is parsed as a string, often "_" for monoplanar trees + args += (cols[8], cols[9]) + else: # Attempt to read as 8 column Malt input + args += (cols[6], cols[7]) + self.input_mode = "8col" + args += (cols[0], [], "mid", super_tok, tokoffset) + this_tok = ParsedToken(*args) + if cols[0] == "1" and not super_tok: + this_tok.position = "first" + this_tok.sentence = current_sentence + conll_tokens.append(this_tok) + if super_tok: + supertok_length += 1 + else: + sentlength += 1 + children[str(float(head_id) + tokoffset)].append(tok_id) + child_funcs[(float(head_id) + tokoffset)].append(cols[7]) + + if sentlength > 0: # Possible final sentence without trailing new line + _process_sentence(stepwise=stepwise, enhanced=enhanced) + + if docname: + newdoc = '# newdoc id = ' + self.docname + output_lines.insert(0, newdoc) + + # Trailing whitespace + rev = "".join(in_data)[::-1] + white = re.match(r'\s*',rev).group() + + return "\n".join(output_lines).strip() + white def main(): - depedit_version = "DepEdit V" + __version__ - - parser = argparse.ArgumentParser(prog=None if globals().get('__spec__') is None else 'python -m {}'.format(__spec__.name.partition('.')[0])) - parser.add_argument('file', action="store", - help="Input single file name or glob pattern to process a batch (e.g. *.conll10)") - parser.add_argument('-c', '--config', action="store", dest="config", default="config.ini", - help="Configuration file defining transformation") - parser.add_argument('-d', '--docname', action="store_true", dest="docname", - help="Begin output with # newdoc id =...") - parser.add_argument('-t', '--text', action="store_true", help="Add # text =...") - parser.add_argument('-s', '--sent_id', action="store_true", dest="sent_id", help="Add running sentence ID comments") - parser.add_argument('--enhanced', action="store_true", help="Add enhanced dependencies column when absent in input") - parser.add_argument('-k', '--kill', action="store", choices=["supertoks", "comments", "both"], - help="Remove supertokens or commments from output") - parser.add_argument('-q', '--quiet', action="store_true", dest="quiet", help="Do not output warnings and messages") - parser.add_argument('--stepwise', action="store_true", help="Output sentence repeatedly after each step (useful for debugging)") - group = parser.add_argument_group('Batch mode options') - group.add_argument('-o', '--outdir', action="store", dest="outdir", default="", - help="Output directory in batch mode") - group.add_argument('-e', '--extension', action="store", dest="extension", default="", - help="Extension for output files in batch mode") - group.add_argument('-i', '--infix', action="store", dest="infix", default=".depedit", - help="Infix to denote edited files in batch mode (default: .depedit)") - parser.add_argument('--version', action='version', version=depedit_version) - options = parser.parse_args() - - if options.extension.startswith("."): # Ensure user specified extension does not include leading '.' - options.extension = options.extension[1:] - try: - config_file = io.open(options.config, encoding="utf8") - except IOError: - sys.stderr.write("\nConfiguration file not found (specify with -c or use the default 'config.ini')\n") - sys.exit() - depedit = DepEdit(config_file=config_file, options=options) - if sys.platform == "win32": # Print \n new lines in Windows - import msvcrt - msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY) - files = glob(options.file) - if len(files) == 0: - sys.stderr.write("File(s) not found:\n" + options.file) - sys.exit() - for filename in files: - infile = io.open(filename, encoding="utf8") - basename = os.path.basename(filename) - docname = basename[:basename.rfind(".")] if options.docname or options.sent_id else filename - output_trees = depedit.run_depedit(infile, docname, sent_id=options.sent_id, docname=options.docname, - stepwise=options.stepwise, enhanced=options.enhanced, sent_text=options.text) - if len(files) == 1: - # Single file being processed, just print to STDOUT - if sys.version_info[0] < 3: - print(output_trees.encode("utf-8")) - else: - sys.stdout.buffer.write(output_trees.encode("utf8")) - else: - # Multiple files, add '.depedit' or other infix from options before extension and write to file - if options.outdir != "": - if not options.outdir.endswith(os.sep): - options.outdir += os.sep - outname = options.outdir + basename - if "." in filename: - extension = outname[outname.rfind(".") + 1:] - if options.extension != "": - extension = options.extension - outname = outname[:outname.rfind(".")] - outname += options.infix + "." + extension - else: - outname += options.infix + "." + options.extension if options.extension else options.infix - if sys.version_info[0] < 3: - with io.open(outname, 'wb') as f: - f.write(output_trees.encode("utf-8")) - else: - with io.open(outname, 'w', encoding="utf8", newline="\n") as f: - f.write(output_trees) + depedit_version = "DepEdit V" + __version__ + + parser = argparse.ArgumentParser(prog=None if globals().get('__spec__') is None else 'python -m {}'.format(__spec__.name.partition('.')[0])) + parser.add_argument('file', action="store", + help="Input single file name or glob pattern to process a batch (e.g. *.conll10)") + parser.add_argument('-c', '--config', action="store", dest="config", default="config.ini", + help="Configuration file defining transformation") + parser.add_argument('-d', '--docname', action="store_true", dest="docname", + help="Begin output with # newdoc id =...") + parser.add_argument('-t', '--text', action="store_true", help="Add # text =...") + parser.add_argument('-s', '--sent_id', action="store_true", dest="sent_id", help="Add running sentence ID comments") + parser.add_argument('--enhanced', action="store_true", help="Add enhanced dependencies column when absent in input") + parser.add_argument('-k', '--kill', action="store", choices=["supertoks", "comments", "both"], + help="Remove supertokens or commments from output") + parser.add_argument('-q', '--quiet', action="store_true", dest="quiet", help="Do not output warnings and messages") + parser.add_argument('--stepwise', action="store_true", help="Output sentence repeatedly after each step (useful for debugging)") + group = parser.add_argument_group('Batch mode options') + group.add_argument('-o', '--outdir', action="store", dest="outdir", default="", + help="Output directory in batch mode") + group.add_argument('-e', '--extension', action="store", dest="extension", default="", + help="Extension for output files in batch mode") + group.add_argument('-i', '--infix', action="store", dest="infix", default=".depedit", + help="Infix to denote edited files in batch mode (default: .depedit)") + parser.add_argument('--version', action='version', version=depedit_version) + options = parser.parse_args() + + if options.extension.startswith("."): # Ensure user specified extension does not include leading '.' + options.extension = options.extension[1:] + try: + config_file = io.open(options.config, encoding="utf8") + except IOError: + sys.stderr.write("\nConfiguration file not found (specify with -c or use the default 'config.ini')\n") + sys.exit() + depedit = DepEdit(config_file=config_file, options=options) + if sys.platform == "win32": # Print \n new lines in Windows + import msvcrt + msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY) + files = glob(options.file) + if len(files) == 0: + sys.stderr.write("File(s) not found:\n" + options.file) + sys.exit() + for filename in files: + infile = io.open(filename, encoding="utf8") + basename = os.path.basename(filename) + docname = basename[:basename.rfind(".")] if options.docname or options.sent_id else filename + output_trees = depedit.run_depedit(infile, docname, sent_id=options.sent_id, docname=options.docname, + stepwise=options.stepwise, enhanced=options.enhanced, sent_text=options.text) + if len(files) == 1: + # Single file being processed, just print to STDOUT + if sys.version_info[0] < 3: + print(output_trees.encode("utf-8")) + else: + sys.stdout.buffer.write(output_trees.encode("utf8")) + else: + # Multiple files, add '.depedit' or other infix from options before extension and write to file + if options.outdir != "": + if not options.outdir.endswith(os.sep): + options.outdir += os.sep + outname = options.outdir + basename + if "." in filename: + extension = outname[outname.rfind(".") + 1:] + if options.extension != "": + extension = options.extension + outname = outname[:outname.rfind(".")] + outname += options.infix + "." + extension + else: + outname += options.infix + "." + options.extension if options.extension else options.infix + if sys.version_info[0] < 3: + with io.open(outname, 'wb') as f: + f.write(output_trees.encode("utf-8")) + else: + with io.open(outname, 'w', encoding="utf8", newline="\n") as f: + f.write(output_trees) if __name__ == "__main__": main() - From d417064d5bb829d38c940029d9b62c57b85aeddf Mon Sep 17 00:00:00 2001 From: amir-zeldes Date: Thu, 12 Aug 2021 16:08:55 -0400 Subject: [PATCH 8/8] V3.2.0 --- README.md | 18 ++++++- depedit/depedit.py | 2 +- docs/DepEdit_user_guide.pdf | Bin 439668 -> 440423 bytes examples/eng_enhance.ini | 95 +++++++++++++++++++++++------------- examples/eng_morph.ini | 68 ++++++++++++++++++++------ setup.py | 4 +- 6 files changed, 135 insertions(+), 52 deletions(-) diff --git a/README.md b/README.md index a702af2..8a389d2 100644 --- a/README.md +++ b/README.md @@ -58,4 +58,20 @@ Batch mode options: .depedit) ``` -For more information see https://corpling.uis.georgetown.edu/depedit/ and read the included User Guide PDF in doc/. \ No newline at end of file +For more information see https://corpling.uis.georgetown.edu/depedit/ and read the included User Guide PDF in doc/. + +## Citing + +If you are using DepEdit in a scholarly paper, please cite the following reference: + +``` + @InProceedings{PengZeldes2020, + author = {Siyao Peng and Amir Zeldes}, + title = {All Roads Lead to {UD}: Converting {S}tanford and {P}enn Parses to {E}nglish {U}niversal {D}ependencies with Multilayer Annotations}, + booktitle = {Proceedings of the Joint Workshop on Linguistic Annotation, Multiword Expressions and Constructions ({LAW}-{MWE}-{C}x{G}-2018)}, + year = {2018}, + pages = {167--177}, + address = {Santa Fe, NM}, + url = {https://www.aclweb.org/anthology/W18-4918} + } + ``` \ No newline at end of file diff --git a/depedit/depedit.py b/depedit/depedit.py index ba9d414..11cd8ef 100644 --- a/depedit/depedit.py +++ b/depedit/depedit.py @@ -22,7 +22,7 @@ import io from six import iteritems, iterkeys -__version__ = "3.1.0.0" +__version__ = "3.2.0.0" ALIASES = {"form":"text","upostag":"pos","xpostag":"cpos","feats":"morph","deprel":"func","deps":"head2","misc":"func2", "xpos": "cpos","upos":"pos"} diff --git a/docs/DepEdit_user_guide.pdf b/docs/DepEdit_user_guide.pdf index 1f4903d52adba85c38993313efc3db525799d445..91b582da8e95531e97ab941f422da2d7c646f28d 100644 GIT binary patch delta 159426 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 {v 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
?* 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 Be?hWyfp2X$GbWKcTGqG@0Z@ak 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 MWoHo=*VNJaA6c!yfB*mh diff --git a/examples/eng_enhance.ini b/examples/eng_enhance.ini index 3e6da52..c3f214a 100644 --- a/examples/eng_enhance.ini +++ b/examples/eng_enhance.ini @@ -5,30 +5,35 @@ # set a variable for transitive verbal lemmas that trigger subject control for `xcomp` {$subject_control}=/promise|threaten|offer|propose/ -# erase any existing enhanced dependencies in the input -head2=/.*/ none #1:head2=;#1:edep= +# erase any existing enhanced dependencies in the input except for ellipsis nodes +num!=/.*\..*/&head2=/.*/ none #1:head2=;#1:edep= # store desired lemma form for `conj`, `case` and `mark` augmentation # use lowercase of lemma by default -lemma=/(.*)/ none #1:head2=$1L +lemma=/(.*)/ none #1:storage2=$1L # for participles used as mark/case, use the lowercased word form, not the verbal lemma -text=/(.*)/&xpos=/VB[GN]/ none #1:head2=$1L +text=/(.*)/&xpos=/VB[GN]/ none #1:storage2=$1L # for non-alphabetic words set to empty to avoid validation errors -text=/.*[^A-Za-z]/ none #1:head2= +text=/.*[^A-Za-z]/ none #1:storage2= # try known mappings for specific non-alphabetic cases -text=/[–-]+/ none #1:head2=to -text=/\u002F+/ none #1:head2=slash -text=/\+/ none #1:head2=plus -text=/-/ none #1:head2=minus -text=/@/ none #1:head2=at -text=/vs/ none #1:head2=versus -text=/:/ none #1:head2=colon -text=/±/ none #1:head2=plus_minus -text=/à/ none #1:head2=a -text=/ca?\./ none #1:head2=circa +text=/[–-]+/ none #1:storage2=to +text=/\u002F+/ none #1:storage2=slash +text=/\+/ none #1:storage2=plus +text=/-/ none #1:storage2=minus +text=/@/ none #1:storage2=at +text=/[Vv][Ss]\.?/ none #1:storage2=versus +text=/:/ none #1:storage2=colon +text=/±/ none #1:storage2=plus_minus +text=/à/ none #1:storage2=a +text=/ca?\./ none #1:storage2=circa +text=/&/ none #1:storage2=and +text=/n'/ none #1:storage2=and +text=/cuz/ none #1:storage2=because +text=/x/&func=/case/ none #1:storage2=by # default edep - duplicate the regular dependency text=/.*/;func=/(.*)/ #1>#2 #1~#2;#2:edep=$1 +func=/root/ none #1:ehead=0;#1:edep=root # annotate tokens internally to mark whether they have certain dependents xpos=/[VN].*|JJ.?|RB.?/;func=/aux.*/ #1>#2 #1:storage+=hasaux @@ -38,29 +43,35 @@ xpos=/VBN/;func=/aux:pass/ #1>#2 #1:storage+=haspass xpos=/[NP].*/;func=/case/ #1>#2 #1:storage+=hascase # handle augmented `case` -# two and three word `fixed` expressions -text=/.*/;func=/^(obl|nmod)$/;head2=/(.*)/&func=/(case)/;func=/fixed/&head2=/(.*)/;func=/fixed/&head2=/(.*)/ #1>#2>#3>#4;#3>#5;#4.#5 #1~#2;#2:edep=$1:$2_$4_$5;#3:storage=hasdblfixed -text=/.*/;func=/^(obl|nmod)$/;head2=/(.*)/&func=/(case)/&storage!=/hasdblfixed/;func=/fixed/&head2=/(.*)/ #1>#2>#3>#4 #1~#2;#2:edep=$1:$2_$4;#3:storage=hasfixed +# combo case + mark +func=/advcl/;func=/case/&storage2=/(.*)/;func=/mark/&xpos=/W.*/&storage2=/(.*)/;text=/.*/ #1>#2;#1>#3;#2.#3;#4>#1 #4~#1;#1:edep=advcl:$1_$2;#2:storage=hasdblfixed +# combo mark-fixed + mark +func=/advcl/;func=/mark/&storage2=/(.*)/;func=/fixed/&storage2=/(.*)/;func=/mark/&storage2=/(.*)/;text=/.*/ #1>#2>#3;#1>#4;#2.#3.#4;#5>#1 #5~#1;#1:edep=advcl:$1_$2_$3;#2:storage=hasdblfixed +# two and three word `fixed` and `goeswith` expressions +text=/.*/;func=/^(obl|nmod)$/;storage2=/(.*)/&func=/(case)/;func=/fixed/&storage2=/(.*)/;func=/fixed/&storage2=/(.*)/ #1>#2>#3>#4;#3>#5;#4.#5 #1~#2;#2:edep=$1:$2_$4_$5;#3:storage=hasdblfixed +text=/.*/;func=/^(obl|nmod)$/;storage2=/(.*)/&func=/(case)/&storage!=/hasdblfixed/;func=/fixed/&storage2=/(.*)/ #1>#2>#3>#4 #1~#2;#2:edep=$1:$2_$4;#3:storage=hasfixed +text=/.*/;func=/^(obl|nmod)$/;storage2=/(.*)/&func=/(case)/&storage!=/hasdblfixed/;func=/goeswith/&storage2=/(.*)/ #1>#2>#3>#4 #1~#2;#2:edep=$1:$2$4;#3:storage=hasgoeswith # all other regular cases - and ruling out genitive 's as the augmentation (xpos=POS) -text=/.*/;func=/^(obl|nmod)$/;head2=/(.*)/&func=/(case)/&xpos!=/POS/&storage!=/hasfixed/ #1>#2>#3 #1~#2;#2:edep=$1:$2;#3:storage= -text=/.*/;func=/^(obl|nmod)$/;head2=/(.*)/&func=/(case)/&xpos!=/POS/&storage!=/hasfixed/;func=/conj/&storage!=/.*hascase.*/ #1>#2>#3;#2>#4 #1~#4;#4:edep=$1:$2 +text=/.*/;func=/^(obl|nmod)$/;storage2=/(.*)/&func=/(case)/&xpos!=/POS/&storage!=/hasfixed/ #1>#2>#3 #1~#2;#2:edep=$1:$2;#3:storage= +text=/.*/;func=/^(obl|nmod)$/;storage2=/(.*)/&func=/(case)/&xpos!=/POS/&storage!=/hasfixed/;func=/conj/&storage!=/.*hascase.*/ #1>#2>#3;#2>#4 #1~#4;#4:edep=$1:$2 # handle double case, e.g. obl:out_of for "out of X", rather than obl:out -text=/.*/;func=/^(obl|nmod)$/;func=/case/&xpos!=/POS/&head2=/(.*)/;func=/case/&xpos!=/POS/&head2=/(.*)/ #3.*#4;#1>#2;#2>#3;#2>#4 #1~#2;#2:edep=$1:$2_$3;#3:storage=;#4:storage= +text=/.*/;func=/^(obl|nmod)$/;func=/case/&xpos!=/POS/&storage2=/(.*)/;func=/case/&xpos!=/POS/&storage2=/(.*)/ #3.*#4;#1>#2;#2>#3;#2>#4 #1~#2;#2:edep=$1:$2_$3;#3:storage=;#4:storage= # handle augmented `mark` # two and three word `fixed` expressions -text=/.*/;func=/^(advcl|acl)$/;head2=/(.*)/&func=/(mark)/;func=/fixed/&head2=/(.*)/;func=/fixed/&head2=/(.*)/ #1>#2>#3>#4;#3>#5;#4.#5 #1~#2;#2:edep=$1:$2_$4_$5;#3:storage=hasdblfixed -text=/.*/;func=/^(advcl|acl)$/;head2=/(.*)/&func=/(mark)/&storage!=/hasdblfixed/;func=/fixed/&head2=/(.*)/ #1>#2>#3>#4 #1~#2;#2:edep=$1:$2_$4;#3:storage=hasfixed +text=/.*/;func=/^(advcl|acl)$/;storage2=/(.*)/&func=/(mark)/;func=/fixed/&storage2=/(.*)/;func=/fixed/&storage2=/(.*)/ #1>#2>#3>#4;#3>#5;#4.#5 #1~#2;#2:edep=$1:$2_$4_$5;#3:storage=hasdblfixed +text=/.*/;func=/^(advcl|acl)$/;storage2=/(.*)/&func=/(mark)/&storage!=/hasdblfixed/;func=/fixed/&storage2=/(.*)/ #1>#2>#3>#4 #1~#2;#2:edep=$1:$2_$4;#3:storage=hasfixed +text=/.*/;func=/^(advcl|acl)$/;storage2=/(.*)/&func=/(mark)/&storage!=/hasdblfixed/;func=/goeswith/&storage2=/(.*)/ #1>#2>#3>#4 #1~#2;#2:edep=$1:$2$4;#3:storage=hasgoeswith # all other regular cases - and ruling out genitive 's as the augmentation (xpos=POS) -text=/.*/;func=/^(advcl|acl)$/;head2=/(.*)/&func=/(mark)/&xpos!=/POS/&storage!=/hasfixed/ #1>#2>#3 #1~#2;#2:edep=$1:$2;#3:storage= -text=/.*/;func=/^(advcl|acl)$/;head2=/(.*)/&func=/(mark)/&xpos!=/POS/&storage!=/hasfixed/;func=/conj/&storage!=/.*hascase.*/ #1>#2>#3;#2>#4 #1~#4;#4:edep=$1:$2 +text=/.*/;func=/^(advcl|acl)$/;storage2=/(.*)/&func=/(mark)/&xpos!=/POS/&storage!=/hasfixed/ #1>#2>#3 #1~#2;#2:edep=$1:$2;#3:storage= +text=/.*/;func=/^(advcl|acl)$/;storage2=/(.*)/&func=/(mark)/&xpos!=/POS/&storage!=/hasfixed/;func=/conj/&storage!=/.*hascase.*/ #1>#2>#3;#2>#4 #1~#4;#4:edep=$1:$2 # handle double mark, e.g. acl:for_to in "for X to Y", rather than acl:for -text=/.*/;func=/^(advcl|acl)$/;func=/mark/&xpos!=/POS/&head2=/(.*)/;func=/mark/&xpos!=/POS/&head2=/(.*)/ #3.*#4;#1>#2;#2>#3;#2>#4 #1~#2;#2:edep=$1:$2_$3;#3:storage=;#4:storage= +text=/.*/;func=/^(advcl|acl)$/;func=/mark/&xpos!=/POS/&storage2=/(.*)/;func=/mark/&xpos!=/POS/&storage2=/(.*)/ #3.*#4;#1>#2;#2>#3;#2>#4 #1~#2;#2:edep=$1:$2_$3;#3:storage=;#4:storage= # augment `conj` with `cc` lemma # two and three word `fixed` expressions -text=/.*/;func=/^(conj)$/;head2=/(.*)/&func=/(cc)/;func=/fixed/&head2=/(.*)/;func=/fixed/&head2=/(.*)/ #1>#2>#3>#4;#3>#5;#4.#5 #1~#2;#2:edep=$1:$2_$4_$5;#3:storage=hasdblfixed -text=/.*/;func=/^(conj)$/;head2=/(.*)/&func=/(cc)/&storage!=/hasdblfixed/;func=/fixed/&head2=/(.*)/ #1>#2>#3>#4 #1~#2;#2:edep=$1:$2_$4;#3:storage=hasfixed +text=/.*/;func=/^(conj)$/;storage2=/(.*)/&func=/(cc)/;func=/fixed/&storage2=/(.*)/;func=/fixed/&storage2=/(.*)/ #1>#2>#3>#4;#3>#5;#4.#5 #1~#2;#2:edep=$1:$2_$4_$5;#3:storage=hasdblfixed +text=/.*/;func=/^(conj)$/;storage2=/(.*)/&func=/(cc)/&storage!=/hasdblfixed/;func=/fixed/&storage2=/(.*)/ #1>#2>#3>#4 #1~#2;#2:edep=$1:$2_$4;#3:storage=hasfixed # all other regular cases -text=/.*/;func=/^(conj)$/;head2=/(.*)/&func=/(cc)/&storage!=/hasfixed/ #1>#2>#3 #1~#2;#2:edep=$1:$2;#3:storage= +text=/.*/;func=/^(conj)$/;storage2=/(.*)/&func=/(cc)/&storage!=/hasfixed/ #1>#2>#3 #1~#2;#2:edep=$1:$2;#3:storage= # multiple conj text=/.*/;func=/conj/&edep=/.*conj:([^|]+).*/;func=/conj/&edep!=/.*conj:.*/ #1>#2;#1>#3;#3.*#2 #1~#3;#3:edep=conj:$1 @@ -91,7 +102,7 @@ func=/(.subj).*/;text=/.*/;func=/conj/&storage!=/.*hassubj.*/;func=/xcomp/&stora # coord general - duplicate all resulting deps and edeps on `conj`; note that `parataxis` is not carried over text=/.*/;func=/(.*)/&func!=/parataxis/;func=/conj/ #1>#2>#3 #1~#3;#3:edep=$1 -text=/.*/;edep=/(.*)/&edep!=/conj.*/&func!=/parataxis/;func=/conj/ #1~#2;#2>#3 #1~#3;#3:edep=$1 +text=/.*/;edep=/(.*)/&edep!=/conj.*/&func!=/parataxis/;func=/conj|root/ #1~#2;#2>#3 #1~#3;#3:edep=$1 # coord subjects text=/.*/;func=/(.subj.*)/;func=/conj/ #1>#2>#3 #1~#3;#3:edep=$1 @@ -120,7 +131,7 @@ text=/.*/;func=/acl:relcl/;func=/(.*)/&xpos=/^W(DT|P.?)$/ #1>#2>#3 #1~#3;#3:edep # relative in embedded PP ("to which") text=/.*/;func=/acl:relcl/;func=/(nmod|obl)/&xpos=/^W(DT|P.?)$/;func=/case/&lemma=/(.*)/ #1>#2>#3>#4 #2~#1;#1:edep=$1:$3 # coordinate matrix NP with embedded PP ([X and Y] to which Z) -text=/.*/;func=/acl:relcl/;func=/(nmod|obl)/&xpos=/^W(DT|P.?)$/;func=/case/&lemma=/(.*)/;func=/conj/&storage!=/.*hascase.*/ #1>#2>#3>#4;#1>#5 #2~#5;#5:edep=$1:$3 +text=/.*/;func=/acl:relcl/;func=/(nmod|obl)/&xpos=/^W(DT|P.?)$/;func=/case/&lemma=/(.*)/;func=/conj/&storage!=/.*hascase.*/ #1>#2>#3>#4;#1>#5;#5.*#3 #2~#5;#5:edep=$1:$3 # relative pronoun in PP embedded in NP ("... most of whom") text=/.*/;func=/acl:relcl/;func=/.*/;func=/(nmod)/&xpos=/^W(DT|P.?)$/;func=/case/&lemma=/(.*)/ #1>#2>#3>#4>#5 #4:edep= text=/.*/;func=/acl:relcl/;func=/.*/;func=/(nmod)/&xpos=/^W(DT|P.?)$/;func=/case/&lemma=/(.*)/ #1>#2>#3>#4>#5 #1~#4;#4:edep=ref;#3~#1;#1:edep=$1:$3 @@ -128,6 +139,24 @@ text=/.*/;func=/acl:relcl/;func=/.*/;func=/(nmod)/&xpos=/^W(DT|P.?)$/;func=/case func=/(.*)/;func=/acl:relcl/;func=/.*/;func=/(nmod)/&xpos=/^W(DT|P.?)$/;func=/case/&lemma=/(.*)/;func=/conj/;text=/.*/ #1>#2>#3>#4>#5;#2>#6;#7>#1 #1:edep=;#7~#1;#1:edep=$1 # coord general - duplicate all resulting deps and edeps on `conj`; note that `parataxis` is not carried over -text=/.*/;func=/(.*)/&func!=/parataxis/;func=/conj/ #1>#2>#3 #1~#3;#3:edep=$1 -text=/.*/;edep=/(.*)/&edep!=/conj.*/&func!=/parataxis/;func=/conj/ #1~#2;#2>#3 #1~#3;#3:edep=$1 +text=/.*/;func=/(.*)/&func!=/parataxis|root/;func=/conj/ #1>#2>#3 #1~#3;#3:edep=$1 +#text=/.*/;edep=/(.*)/&edep!=/conj.*/&func!=/parataxis|root/;func=/conj/ #1~#2;#2>#3 #1~#3;#3:edep=$1 edom=/.*?([0-9.]+\|\|(nmod|obl|conj):[a-z]+).*/&edep!=/conj.*/;func=/conj/ #1>#2 #2:edom=$1 + +# coord unlike coordination +# compound + amod +text=/.*/;func=/compound/;func=/conj/&xpos=/J.*|V.N/&edom=/(.*?[0-9.]+\|\|)compound(.*)/ #1>#2>#3;#1~#3 #3:edom=$1amod$2 +# amod + compound +text=/.*/;func=/amod/;func=/conj/&xpos=/NN.*/&edom=/(.*?[0-9.]+\|\|)amod(.*)/ #1>#2>#3;#1~#3 #3:edom=$1compound$2 +# nsubj + csubj +text=/.*/;func=/nsubj/;func=/conj/&xpos=/V.G/&edom=/(.*?[0-9.]+\|\|)nsubj(.*)/ #1>#2>#3;#1~#3 #3:edom=$1csubj$2 + +# supertokens (=multiword tokens, MWTs) +# uncomment the following lines to introduce MWTs for words like "don't" to data which lacks them +#text=/^(?i)gon|wan/;text=/^(?i)na/ #1.#2 #1><#2 +#text=/^(?i)dun/;text=/^(?i)no/ #1.#2 #1><#2 +#text=/^(?i)out|got/;text=/^(?i)ta/ #1.#2 #1><#2 +#text=/^(?i)c'?m/&misc=/.*SpaceAfter.No.*/;text=/^(?i)on/ #1.#2 #1><#2 +#misc=/.*SpaceAfter.No.*/;text=/^(?i)[^A-Za-z]?(ll|d|m|ve|s)/&xpos=/VBP|MD|VHP|VBZ|VHZ/ #1.#2 #1><#2 +#misc=/.*SpaceAfter.No.*/;xpos=/POS/ #1.#2 #1><#2 +#misc=/.*SpaceAfter.No.*/;lemma=/n[o']?t/ #1.#2 #1><#2 diff --git a/examples/eng_morph.ini b/examples/eng_morph.ini index 2b4a246..653d316 100644 --- a/examples/eng_morph.ini +++ b/examples/eng_morph.ini @@ -1,9 +1,12 @@ +morph=/.*/ none #1:morph=_ + {$negstems}=/imposs|improb|immort|inevit|incomp|indirec|inadeq|insuff|ineff|incong|incoh|inacc|invol[iu]|infreq|inapp|indist|infin|intol|dislik|dys|dismount|disadvant|disinteg|disresp|disagr|disjoin|disprov|disinterest|discomfort|dishonest|disband|disentangl/ {$neglemmas}=/nowhere|never|nothing|none|undo|uncover|unclench|no|not|n't|ne|pas/ +{$subjunctive}=/advise|ask|command|demand|desire|insist|order|prefer|propose|recommend|request|suggest|command|demand|order|proposal|recommendation|request|suggestion|advisable|best|crucial|desirable|essential|imperative|important|necessary|unthinkable|urgent|vital|adamant|anxious|determined|eager|keen/ # Fixed values from CoreNLP -xpos=/^NNP?$/ none #1:morph+=Number=Sing -xpos=/^NNP?S$/ none #1:morph+=Number=Plur +xpos=/^NNP?$/&func!=/goeswith/ none #1:morph+=Number=Sing +xpos=/^NNP?S$/&func!=/goeswith/ none #1:morph+=Number=Plur xpos=/^VBZ$/ none #1:morph+=Mood=Ind|Number=Sing|Person=3|Tense=Pres|VerbForm=Fin xpos=/^VBD$/ none #1:morph+=VerbForm=Fin|Mood=Ind|Tense=Past xpos=/^VBN$/ none #1:morph+=Tense=Past|VerbForm=Part @@ -12,7 +15,7 @@ xpos=/^MD$/ none #1:morph+=VerbForm=Fin xpos=/^JJ$/ none #1:morph+=Degree=Pos xpos=/^JJR$/ none #1:morph+=Degree=Cmp xpos=/^JJS$/ none #1:morph+=Degree=Sup -xpos=/^CD$/ none #1:morph+=NumType=Card +xpos=/^CD$/&func!=/goeswith/ none #1:morph+=NumType=Card text=/^(?i)am$/&xpos=/^VBP$/ none #1:morph+=VerbForm=Fin|Mood=Ind|Tense=Pres|Person=1|Number=Sing text=/^(?i)was$/&xpos=/^VBD$/ none #1:morph+=VerbForm=Fin|Mood=Ind|Tense=Past|Number=Sing text=/^(?i)i$/&xpos=/^PRP$/ none #1:morph+=Number=Sing|Person=1|PronType=Prs|Case=Nom @@ -27,14 +30,14 @@ text=/^(?i)h?'?im$/&xpos=/^PRP$/ none #1:morph+=Number=Sing|Person=3|Gender=Masc text=/^(?i)her$/&xpos=/^PRP$/ none #1:morph+=Number=Sing|Person=3|Gender=Fem|PronType=Prs|Case=Acc text=/^(?i)['u]s$/&xpos=/^PRP$/ none #1:morph+=Number=Plur|Person=1|PronType=Prs|Case=Acc text=/^(?i)(th)?'?em$/&xpos=/^PRP$/ none #1:morph+=Number=Plur|Person=3|PronType=Prs|Case=Acc -text=/^(?i)my|mine$/&xpos=/^PRP\$$/ none #1:morph+=Number=Sing|Person=1|Poss=Yes|PronType=Prs -text=/^(?i)yours?$/&xpos=/^PRP\$$/ none #1:morph+=Person=2|Poss=Yes|PronType=Prs -text=/^(?i)his$/&xpos=/^PRP\$$/ none #1:morph+=Number=Sing|Person=3|Gender=Masc|Poss=Yes|PronType=Prs +text=/^(?i)my|mine$/&xpos=/^PRP\$?$/ none #1:morph+=Number=Sing|Person=1|Poss=Yes|PronType=Prs +text=/^(?i)yours?$/&xpos=/^PRP\$?$/ none #1:morph+=Person=2|Poss=Yes|PronType=Prs +text=/^(?i)his$/&xpos=/^PRP\$?$/ none #1:morph+=Number=Sing|Person=3|Gender=Masc|Poss=Yes|PronType=Prs text=/^(?i)her$/&xpos=/^PRP\$$/ none #1:morph+=Number=Sing|Person=3|Gender=Fem|Poss=Yes|PronType=Prs -text=/^(?i)hers$/&xpos=/^PRP\$$/ none #1:morph+=Number=Sing|Person=3|Gender=Fem|Poss=Yes|PronType=Prs +text=/^(?i)hers$/&xpos=/^PRP$/ none #1:morph+=Number=Sing|Person=3|Gender=Fem|Poss=Yes|PronType=Prs text=/^(?i)its$/&xpos=/^PRP\$$/ none #1:morph+=Number=Sing|Person=3|Gender=Neut|Poss=Yes|PronType=Prs -text=/^(?i)ours?$/&xpos=/^PRP\$$/ none #1:morph+=Number=Plur|Person=1|Poss=Yes|PronType=Prs -text=/^(?i)theirs?$/&xpos=/^PRP\$$/ none #1:morph+=Number=Plur|Person=3|Poss=Yes|PronType=Prs +text=/^(?i)ours?$/&xpos=/^PRP\$?$/ none #1:morph+=Number=Plur|Person=1|Poss=Yes|PronType=Prs +text=/^(?i)theirs?$/&xpos=/^PRP\$?$/ none #1:morph+=Number=Plur|Person=3|Poss=Yes|PronType=Prs text=/^(?i)myself$/&xpos=/^PRP$/ none #1:morph+=Number=Sing|Person=1|PronType=Prs text=/^(?i)yourself$/&xpos=/^PRP$/ none #1:morph+=Number=Sing|Person=2|PronType=Prs text=/^(?i)himself$/&xpos=/^PRP$/ none #1:morph+=Number=Sing|Person=3|Gender=Masc|PronType=Prs @@ -53,10 +56,14 @@ xpos=/^RB$/&lemma!=/^(thus|even|as|not|over|very|yet|only|namely|already|also|on xpos=/^RBR$/ none #1:morph+=Degree=Cmp xpos=/^RBS$/ none #1:morph+=Degree=Sup +# Fractions +lemma=/½|¼|⅓|[0-9]*\.[0-9]+|half|third|quarter|fifth|sixth|seventh|eighth|nineth|tenth|hundredth|thousandth|millionth|billionth/&xpos=/CD|NNS?/ none #1:morph+=NumType=Frac # Ordinals lemma=/^(first|second|third|fourth|fifth|sixth|seventh|eigth|ninth|tenth|([0-9,.]+(th|st|nd|rd)))$/&xpos=/JJ|RB/ none #1:morph+=NumType=Ord +lemma=/^(First|Second|Third|Fourth|Fifth|Sixth|Seventh|Eigth|Ninth|Tenth|([0-9,.]+(th|st|nd|rd)))$/&xpos=/NNP/&upos=/ADJ/ none #1:morph+=NumType=Ord # Multiplicative adverbs lemma=/^(once|twice|thrice)$/&xpos=/RB/ none #1:morph+=NumType=Mult +lemma=/^(Once|Twice|Thrice)$/&xpos=/NNP/&upos=/ADV/ none #1:morph+=NumType=Mult # Reflexives lemma=/^(myself|yourself|himself|herself|itself|ourselves|yourselves|themselves)$/&func!=/.*npmod/ none #1:morph+=Reflex=Yes;#1:morph+=Case=Acc @@ -92,7 +99,17 @@ xpos=/W.*/;func=/acl:relcl/ #1>#2 #1:morph+=PronType=Rel # Possessive 'whose' relative xpos=/WP\$/&func=/nmod:poss/;func=/acl:relcl/;func=/.*/ #2>#3>#1;#1.*#2 #1:morph+=PronType=Rel +# Subjunctive mood +xpos=/VB/;xpos=/MD/ #1>#2 #1:storage=not_subjv +xpos=/.*/;xpos=/VB/&lemma=/be/&func=/aux.*|cop/;xpos=/MD/ #1>#2;#1>#3 #2:storage=not_subjv +xpos=/VB/;lemma=/whether/ #1>#2 #1:storage=not_subjv +; Note we are temporarily changing POS of subjunctives to VBP, so that they get Person morphology +lemma=/^({$subjunctive})$/;func=/ccomp/&lemma!=/be/&xpos=/VB/&storage!=/not_subjv/ #1.*#2;#1>#2 #2:morph+=Mood=Sub;#2:morph+=Tense=Pres;#2:morph+=VerbForm=Fin;#2:xpos=VBP +lemma=/^({$subjunctive})$/;func=/ccomp/;text=/be/&xpos=/VB/&storage!=/not_subjv/ #1.*#2;#1>#2>#3 #3:morph+=Mood=Sub;#3:morph+=Tense=Pres;#3:morph+=VerbForm=Fin;#3:xpos=VBP +lemma=/^({$subjunctive})$/;func=/acl/;text=/be/&xpos=/VB/&storage!=/not_subjv/;lemma=/that/&func=/mark/ #1.*#2;#1>#2;#2>#3;#2>#4 #3:morph+=Mood=Sub;#3:morph+=Tense=Pres;#3:morph+=VerbForm=Fin;#3:xpos=VBP + # Verb person and number +xpos=/VB.*/;func=/.*subj.*/ #1>#2 #1:storage=hassubj # Assume 3rd person xpos=/V.[PZD]/ none #1:morph+=Person=3|Number=Sing morph=/.*Plur.*/;func=/acl:relcl/&xpos=/V.[PZD]/;xpos=/WDT/&func=/[cn]subj.*/ #1>#2>#3 #2:morph+=Number=Plur|Person=3 @@ -106,17 +123,29 @@ xpos=/V.[PZD]/;func=/[cn]subj.*/;func=/conj/&morph=/.*Person.([0-9]).*/ #1>#2>#3 xpos=/V.[PZD]/&func=/cop|aux.*/;func=/[cn]subj.*/&morph=/.*Number.Plur.*/;text=/.*/ #3>#2;#3>#1 #1:morph+=Number=Plur xpos=/V.[PZD]/&func=/cop|aux.*/;func=/[cn]subj.*/&morph=/.*Person.([0-9]).*/;text=/.*/ #3>#2;#3>#1 #1:morph+=Person=$1 xpos=/VBZ/ none #1:morph+=Number=Sing|Person=3 +# Modal person +xpos=/MD/;func=/.subj/&xpos=/NNP?/ #1>#2 #1:morph+=Person=3;#1:morph+=Number=Sing +xpos=/MD/;func=/.subj/&xpos=/NNP?S/ #1>#2 #1:morph+=Person=3;#1:morph+=Number=Plur +xpos=/MD/;func=/.subj/&xpos=/NNP?/;xpos=/VB/ #3>#2;#3>#1 #1:morph+=Person=3;#1:morph+=Number=Sing +xpos=/MD/;func=/.subj/&xpos=/NNP?S/;xpos=/VB/ #3>#2;#3>#1 #1:morph+=Person=3;#1:morph+=Number=Plur +xpos=/MD/;func=/.subj/&morph=/.*Number.(Sing|Plur).*Person.([0-9])/ #1>#2 #1:morph+=Person=$2;#1:morph+=Number=$1 +xpos=/MD/;func=/.subj/&morph=/.*Number.(Sing|Plur).*Person.([0-9])/;xpos=/VB/ #3>#2;#3>#1 #1:morph+=Person=$2;#1:morph+=Number=$1 +xpos=/MD/&morph=/.*Number.(Sing|Plur).*Person.([0-9])/;xpos=/MD/&func=/conj/ #1>#2 #2:morph+=Person=$2;#2:morph+=Number=$1 +# Thank you +xpos=/VBP/&text=/^(?i)(thank|hope)$/&storage!=/.*hassubj.*/ none #1:morph+=Number=Sing;#1:morph+=Person=1 # VBP mistakenly labeled 3 Sing must be Plur -xpos=/VBP/&morph=/Sing.*3/ none #1:morph+=Number=Plur +xpos=/VBP/&morph=/.*Sing.*3.*/ none #1:morph+=Number=Plur +# Assign number to subjunctive 'be' +text=/.*/;morph=/.*Mood.Sub.*/&lemma=/be/;func=/nsubj.*/&xpos=/NNP?$/ #1>#2;#1>#3 #2:morph+=Number=Sing # Imperative -xpos=/VB/;func=/.*subj.*/ #1>#2 #1:storage=hassubj xpos=/VB/;func=/aux.*/&xpos=/VBP/ #1>#2 #1:storage+=hasfinaux xpos=/VB/;func=/mark/&xpos=/TO/ #1>#2 #1:storage+=hasto xpos=/.*/;func=/.*subj.*/;xpos=/VB/&func=/conj/ #1>#2;#1>#3 #3:storage+=hassubj xpos=/.*/;func=/aux.*/&xpos=/VBP/;xpos=/VB/&func=/conj/ #1>#2;#1>#3 #3:storage+=hasfinaux xpos=/VB/;func=/mark/&xpos=/TO/;xpos=/VB/&func=/conj/ #1>#2;#1>#3 #3:storage+=hasto -xpos=/VB/&storage!=/has.*/&func=/root|conj|parataxis|ccomp/ none #1:morph+=Mood=Imp|Person=2|VerbForm=Fin +xpos=/VB/&storage!=/has.*/&func=/root|parataxis|ccomp/ none #1:morph+=Mood=Imp|Person=2|VerbForm=Fin +morph=/.*Mood.Imp.*/&storage!=/.*hassubj.*/;xpos=/VB/&storage!=/has.*/&func=/conj/ #1>#2 #2:morph+=Mood=Imp|Person=2|VerbForm=Fin xpos=/VB/&storage!=/has.*/&func=/aux/&lemma=/do/;func=/advmod/&lemma=/n.?t/ #1>#2 #1:morph+=Mood=Imp|Person=2|VerbForm=Fin xpos=/VB/&morph!=/.*Mood.Imp.*/ none #1:morph+=VerbForm=Inf # Infinitive matrix clause root in non imp s_type @@ -127,6 +156,9 @@ xpos=/VB[PZD]/&morph=/.*Number.([^|]+).*Person.([0-9]).*/;func=/conj/&storage!=/ xpos=/VBP/&morph=/.*Number.Sing.*Person.3.*/&storage!=/.*hassubj.*/;#S:s_type=/q|wh/ #2>#1 #1:morph+=Person=2 storage=/has.*/ none #1:storage=_ +# Revert subjunctive xpos to VB +morph=/.*Mood.Sub.*/ none #1:xpos=VB;#1:morph+=VerbForm=Fin + # Gerund xpos=/VBG/ none #1:morph+=VerbForm=Ger xpos=/VBG/;lemma=/be/&func=/aux/ #1>#2 #1:morph+=Tense=Pres|VerbForm=Part @@ -142,6 +174,12 @@ lemma=/^(?i)(({$negstems}.*)|({$neglemmas})|(no[nt]-.*))$/ none #1:morph+=Polari lemma=/un.*/&xpos=/JJ.*|RB.*/&lemma!=/unique|under/ none #1:morph+=Polarity=Neg # NumForm -xpos=/CD/ none #1:morph+=NumForm=Word -xpos=/CD/&lemma=/[0-9.,]+/ none #1:morph+=NumForm=Digit -xpos=/CD/&lemma=/[XIVMCDL]+\.?/ none #1:morph+=NumForm=Roman +xpos=/CD/&func!=/goeswith/ none #1:morph+=NumForm=Word +xpos=/CD/&lemma=/[0-9.,]+/&func!=/goeswith/ none #1:morph+=NumForm=Digit +xpos=/CD/&lemma=/[XIVMCDL]+\.?/&func!=/goeswith/ none #1:morph+=NumForm=Roman + +# NNP amod +upos=/VERB/&xpos=/NNP.*/&func=/amod/&text=/.*ing/&lemma!=/.*ing/ none #1:morph=VerbForm=Ger +upos=/VERB/&xpos=/NNP.*/&func=/amod/&text=/.*ed/&lemma!=/.*ed/ none #1:morph=Tense=Past|VerbForm=Part +upos=/ADJ/&xpos=/NNP.*/&func=/amod/&text=/.*er/&lemma!=/.*er/ none #1:morph=Degree=Cmp +xpos=/NNP.*/&upos=/^ADJ$/&morph!=/.*Degree.*/ none #1:morph=Degree=Pos diff --git a/setup.py b/setup.py index 7837d5a..34fb148 100644 --- a/setup.py +++ b/setup.py @@ -3,14 +3,14 @@ setup( name = 'depedit', packages = ['depedit'], - version = '3.1.0.0', + version = '3.2.0.0', description = 'A simple configurable tool for manipulating dependency trees', author = 'Amir Zeldes', author_email = 'amir.zeldes@georgetown.edu', url = 'https://github.com/amir-zeldes/depedit', install_requires=["six"], license='Apache License, Version 2.0', - download_url = 'https://github.com/amir-zeldes/depedit/releases/tag/3.1.0.0', + download_url = 'https://github.com/amir-zeldes/depedit/releases/tag/3.2.0.0', keywords = ['NLP', 'parsing', 'syntax', 'dependencies', 'dependency', 'tree', 'treebank', 'conll', 'conllu', 'ud', 'enhanced'], classifiers = ['Programming Language :: Python', 'Programming Language :: Python :: 2',