plint

French poetry validator (local mirror of https://gitlab.com/a3nm/plint)
git clone https://a3nm.net/git/plint/
Log | Files | Refs | README

commit 3d39d38bc2ac95c11493ace4f98a046075bf276c
parent c97e04483dd536774e84a75b87099173df80be11
Author: Antoine Amarilli <a3nm@a3nm.net>
Date:   Sun, 18 Aug 2019 13:32:17 +0200

use argparse

Diffstat:
TODO | 53++++++++++++++++++++++++++++-------------------------
plint/__main__.py | 57++++++++++++++++++++++++++++-----------------------------
test.sh | 2+-
train_diaeresis/train_diaeresis.sh | 16++++++++++++----
4 files changed, 69 insertions(+), 59 deletions(-)

diff --git a/TODO b/TODO @@ -1,37 +1,13 @@ == Ongoing == -- fix the test (wrong version of frhyme) +- update the localization - migrate the readme to markdown -- ship the occurrence files directly - turn should_be_accepted into a test - Produce error reports first in a structured format (JSON) and translate that into text or into HTML - expand the corpus of classical poetry: more Racine, more other authors (Boileau, Corneille, Prudhomme, etc.) -possible sources: https://dramacode.github.io/ and -corneille_surena https://fr.wikisource.org/wiki/Sur%C3%A9na -corneille_pulcherie https://fr.wikisource.org/wiki/Pulch%C3%A9rie -corneille_tite_et_berenice https://fr.wikisource.org/wiki/Tite_et_B%C3%A9r%C3%A9nice -corneille_attila https://fr.wikisource.org/wiki/Attila -corneille_othon https://fr.wikisource.org/wiki/Othon/Texte_entier -corneille_sophonisbe https://fr.wikisource.org/wiki/Sophonisbe_(Corneille) -corneille_sertorius https://fr.wikisource.org/wiki/Sertorius -corneille_toison_dor https://fr.wikisource.org/wiki/La_Toison_d%E2%80%99or_(Corneille) -corneille_nicomede https://fr.wikisource.org/wiki/Nicom%C3%A8de -corneille_don_sanche_daragon https://fr.wikisource.org/wiki/Don_Sanche_d%E2%80%99Aragon -corneille_heraclius https://fr.wikisource.org/wiki/H%C3%A9raclius_empereur_d%E2%80%99Orient -corneille_theodore https://fr.wikisource.org/wiki/Th%C3%A9odore_vierge_et_martyre -corneille_rodogune https://fr.wikisource.org/wiki/Th%C3%A9odore_vierge_et_martyre -corneille_menteur_suite https://fr.wikisource.org/wiki/La_Suite_du_Menteur -corneille_menteur https://fr.wikisource.org/wiki/Le_Menteur -corneille_pompee https://fr.wikisource.org/wiki/Pomp%C3%A9e -corneille_polyeucte https://fr.wikisource.org/wiki/Polyeucte/%C3%89dition_Masson,_1887 -corneille_cinna https://fr.wikisource.org/wiki/Cinna_ou_la_Cl%C3%A9mence_d%E2%80%99Auguste -corneille_horace https://fr.wikisource.org/wiki/Horace_(Corneille) -corneille_cid https://fr.wikisource.org/wiki/Le_Cid -corneille_comedie_des_tuileries https://fr.wikisource.org/wiki/La_Com%C3%A9die_des_Tuileries - - fix problems in the new works - Train diaresesis.json on new works - check that diaeresis:permissive is indeed more permissive @@ -87,6 +63,33 @@ corneille_comedie_des_tuileries https://fr.wikisource.org/wiki/La_Com%C3%A9die_d == Other possible sources == +The following could be easily integrated, either from +https://dramacode.github.io/ or from the indicated URL: + +corneille_surena https://fr.wikisource.org/wiki/Sur%C3%A9na +corneille_pulcherie https://fr.wikisource.org/wiki/Pulch%C3%A9rie +corneille_tite_et_berenice https://fr.wikisource.org/wiki/Tite_et_B%C3%A9r%C3%A9nice +corneille_attila https://fr.wikisource.org/wiki/Attila +corneille_othon https://fr.wikisource.org/wiki/Othon/Texte_entier +corneille_sophonisbe https://fr.wikisource.org/wiki/Sophonisbe_(Corneille) +corneille_sertorius https://fr.wikisource.org/wiki/Sertorius +corneille_toison_dor https://fr.wikisource.org/wiki/La_Toison_d%E2%80%99or_(Corneille) +corneille_nicomede https://fr.wikisource.org/wiki/Nicom%C3%A8de +corneille_don_sanche_daragon https://fr.wikisource.org/wiki/Don_Sanche_d%E2%80%99Aragon +corneille_heraclius https://fr.wikisource.org/wiki/H%C3%A9raclius_empereur_d%E2%80%99Orient +corneille_theodore https://fr.wikisource.org/wiki/Th%C3%A9odore_vierge_et_martyre +corneille_rodogune https://fr.wikisource.org/wiki/Th%C3%A9odore_vierge_et_martyre +corneille_menteur_suite https://fr.wikisource.org/wiki/La_Suite_du_Menteur +corneille_menteur https://fr.wikisource.org/wiki/Le_Menteur +corneille_pompee https://fr.wikisource.org/wiki/Pomp%C3%A9e +corneille_polyeucte https://fr.wikisource.org/wiki/Polyeucte/%C3%89dition_Masson,_1887 +corneille_cinna https://fr.wikisource.org/wiki/Cinna_ou_la_Cl%C3%A9mence_d%E2%80%99Auguste +corneille_horace https://fr.wikisource.org/wiki/Horace_(Corneille) +corneille_cid https://fr.wikisource.org/wiki/Le_Cid +corneille_comedie_des_tuileries https://fr.wikisource.org/wiki/La_Com%C3%A9die_des_Tuileries + +Other ideas (trickier): + - https://fr.wikisource.org/wiki/Imitation_de_J%C3%A9sus-Christ/Texte_entier - https://fr.wikisource.org/wiki/Po%C3%A9sies_diverses_(Corneille) - corneille_andromede https://fr.wikisource.org/wiki/Androm%C3%A8de (but much free verse) diff --git a/plint/__main__.py b/plint/__main__.py @@ -2,19 +2,17 @@ from plint import localization, error, template, diaeresis import sys +import argparse -def run(): +def run(ocontext=None, weight=None, offset=0): is_ok = True f2 = None n_syllables = None - offset = 0 - if len(sys.argv) >= 4: - f2 = open(sys.argv[3], 'w') - if len(sys.argv) >= 5: - n_syllables = int(sys.argv[4]) - if len(sys.argv) == 6: - offset = int(sys.argv[5]) + if ocontext: + f2 = open(ocontext, 'w') + if weight: + n_syllables = int(weight) should_end = False while True: line = sys.stdin.readline() @@ -33,26 +31,27 @@ def run(): def main(): global template localization.init_locale() - if len(sys.argv) < 2 or len(sys.argv) > 6: - print("Usage: %s TEMPLATE [DFILE [OCONTEXT [NSYL [OFFSET]]]]" % sys.argv[0], - file=sys.stderr) - print("Check stdin according to TEMPLATE, report errors on stdout", - file=sys.stderr) - print("For internal use:", - file=sys.stderr) - print("DFILE is the diaeresis file, OCONTEXT is the context output file", - file=sys.stderr) - print("NSYL is the assigned weight to the last chunk (diaeresis training)", - file=sys.stderr) - print("OFFSET is to add after the last chunk (diaeresis training)", - file=sys.stderr) - sys.exit(2) - template_name = sys.argv[1] - if len(sys.argv) > 2: - diaeresis_name = sys.argv[2] - else: - diaeresis_name = "../data/diaeresis.json" - diaeresis.set_diaeresis(diaeresis_name) + parser = argparse.ArgumentParser( + description="Check poem on stdin according to a template") + parser.add_argument("template", + help="the file containing the template for the input poem", + type=str) + parser.add_argument("--diaeresis", type=str, + help="diaeresis training: diaeresis file to use", + default="../data/diaeresis.json") + parser.add_argument("--ocontext", type=str, + help="diaeresis training: output file where to write the contexts", + default=None) + parser.add_argument("--weight", type=int, + help="diaeresis training: fixed weight for a specific chunk", + default=None) + parser.add_argument("--offset", type=int, + help="diaeresis training: position of the specific chunk from the end", + default=0) + args = parser.parse_args() + + template_name = args.template + diaeresis.set_diaeresis(args.diaeresis) f = open(template_name) x = f.read() f.close() @@ -61,7 +60,7 @@ def main(): except error.TemplateLoadError as e: print("Could not load template %s: %s" % (template_name, e.msg), file=sys.stderr) sys.exit(2) - ok = run() + ok = run(ocontext=args.ocontext, weight=args.weight, offset=args.offset) sys.exit(0 if ok else 1) diff --git a/test.sh b/test.sh @@ -15,7 +15,7 @@ for a in plint/test_data/*.tpl; do echo "$a" >> test_temp.txt if [[ $a == *cyrano_full* ]] then - python3 -m plint $(pwd)/$a ../data/diaeresis_cyrano.json < $(pwd)/${a%.tpl} &>> test_temp.txt + python3 -m plint $(pwd)/$a --diaeresis=../data/diaeresis_cyrano.json < $(pwd)/${a%.tpl} &>> test_temp.txt else ./test_one.sh $(basename "${a%.tpl}") &>> test_temp.txt fi diff --git a/train_diaeresis/train_diaeresis.sh b/train_diaeresis/train_diaeresis.sh @@ -10,14 +10,22 @@ cd .. # go in the main folder if [ -f $DIR/diaeresis_verbs/final_syneresis -a -f $DIR/diaeresis_verbs/final_diaeresis ] then cat $DIR/diaeresis_verbs/final_syneresis | grep -vE -- '-vous$|-nous$' | - python3 -m plint <(echo 12) $DIR/diaeresis_empty.json $DIR/final_syneresis.ctx 1 0 + python3 -m plint <(echo 12) \ + --diaeresis=$DIR/diaeresis_empty.json --ocontext=$DIR/final_syneresis.ctx\ + --weight=1 --offset=0 cat $DIR/diaeresis_verbs/final_syneresis | grep -E -- '-vous$|-nous$' | - python3 -m plint <(echo 12) $DIR/diaeresis_empty.json $DIR/final_syneresis2.ctx 1 1 + python3 -m plint <(echo 12) \ + --diaeresis=$DIR/diaeresis_empty.json --ocontext=$DIR/final_syneresis2.ctx\ + --weight=1 --offset=1 cat $DIR/final_syneresis.ctx $DIR/final_syneresis2.ctx | sponge $DIR/final_syneresis.ctx cat $DIR/diaeresis_verbs/final_diaeresis | grep -vE -- '-vous$|-nous$' | - python3 -m plint <(echo 12) $DIR/diaeresis_empty.json $DIR/final_diaeresis.ctx 2 0 + python3 -m plint <(echo 12) \ + --diaeresis=$DIR/diaeresis_empty.json --ocontext=$DIR/final_diaeresis.ctx\ + --weight=2 --offset=0 cat $DIR/diaeresis_verbs/final_diaeresis | grep -E -- '-vous$|-nous$' | - python3 -m plint <(echo 12) $DIR/diaeresis_empty.json $DIR/final_diaeresis2.ctx 2 1 + python3 -m plint <(echo 12) \ + --diaeresis=$DIR/diaeresis_empty.json --ocontext=$DIR/final_diaeresis2.ctx\ + --weight=2 --offset=1 cat $DIR/final_diaeresis.ctx $DIR/final_diaeresis2.ctx | sponge $DIR/final_diaeresis.ctx fi