From 29d0b1fe34c47c12ceb1c5181a8ec86042548073 Mon Sep 17 00:00:00 2001 From: Kiril Kovachev Date: Sat, 16 Dec 2023 21:07:17 +0000 Subject: [PATCH] Rename {{infl of}} to {{verbal noun}} when inflection is indef sg vnoun --- one-time-tasks/verbal_noun_rename.py | 49 ++++++++++++++++------------ 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/one-time-tasks/verbal_noun_rename.py b/one-time-tasks/verbal_noun_rename.py index 9fd6408..dc14626 100644 --- a/one-time-tasks/verbal_noun_rename.py +++ b/one-time-tasks/verbal_noun_rename.py @@ -10,10 +10,6 @@ with open("verbal_nouns.json") as f: GRAVE = chr(0x300) ACUTE = chr(0x301) -# Consume an iterator. For doing side effects using a generator expression in one line. -def do(iter): - for _ in iter: pass - def get_verbal_nouns(verb: str) -> str: return VERBAL_NOUNS[verb] @@ -30,13 +26,18 @@ def fix_infl_template(template: mwparserfromhell.nodes.Template): indef = ["indefinite", "indef", "indf", "indefinite state"] singular = ["singular", "s", "sg"] + definite = ["definite", "def", "defn", "definite state"] + plural = ["plural", "p", "pl"] is_indef = has_inflection(indef) is_singular = has_inflection(singular) + is_def = has_inflection(definite) + is_plural = has_inflection(plural) if "vnoun" in template.params or "verbal noun" in template.params: - if is_indef and is_singular: - do(remove_positional_by_value(i) for i in indef) - do(remove_positional_by_value(s) for s in singular) + if is_indef and is_singular or not is_def and not is_plural: # s|indef|vnoun or |vnoun by itself + for _ in range(len(template.params)-2): + del template.params[2] # Keep only the language code and the original verb form + template.name = "verbal noun of" else: verb = str(template.get(2)).replace(GRAVE, "").replace(ACUTE, "") try: @@ -51,19 +52,25 @@ def fix_infl_template(template: mwparserfromhell.nodes.Template): except ValueError: print(f"Verb {verb} has more than one possible verbal noun: {verbal_noun_list}", file=sys.stderr) -for page in kovachevbot.iterate_safe(kovachevbot.iterate_category("Bulgarian non-lemma forms")): - page: pywikibot.Page - parsed = mwparserfromhell.parse(page.text) +def main(): + with open("verbal_noun_list.json") as f: + ENTRIES = json.load(f) - bulgarian = parsed.get_sections([2], "Bulgarian")[0] - for template in bulgarian.filter_templates(): - template: mwparserfromhell.nodes.Template + for page in kovachevbot.iterate_safe(kovachevbot.pages_from_titles(ENTRIES)): + page: pywikibot.Page + parsed = mwparserfromhell.parse(page.text) - if template.name == "infl of" or template.name == "inflection of": - fix_infl_template(template) - - out = str(parsed) - if out != page.text: - page.text = out - page.save("Update verbal noun forms' {{infl of}} to point to the verbal noun / turn 'indefinite singular verbal noun' to 'verbal noun'") - \ No newline at end of file + bulgarian = parsed.get_sections([2], "Bulgarian")[0] + for template in bulgarian.filter_templates(): + template: mwparserfromhell.nodes.Template + + if template.name == "infl of" or template.name == "inflection of": + fix_infl_template(template) + + out = str(parsed) + if out != page.text: + page.text = out + page.save("Update verbal noun forms' {{infl of}} to point to the verbal noun / use {{verbal noun of}}") + +if __name__ == "__main__": + main() \ No newline at end of file