plint

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

commit 9fcc31862718ffc0225f742167b6055fdd9b279b
parent 7e705b5c19e761cd860a5ae5a2a51240c62753f3
Author: Antoine Amarilli <a3nm@a3nm.net>
Date:   Wed, 14 Aug 2019 17:14:02 +0200

cleanup

Diffstat:
lexique_comparison/count_syllables_lexique.py | 25+++++++++++++++++++++++++
lexique_comparison/count_syllables_plint.py | 28++++++++++++++++++++++++++++
littre/.gitignore | 9+++++++++
littre/additions_poesie | 14++++++++++++++
littre/additions_vers | 16++++++++++++++++
littre/compare_plint.py | 28++++++++++++++++++++++++++++
littre/littre_syll.sh | 55+++++++++++++++++++++++++++++++++++++++++++++++++++++++
littre/raw.tpl | 2++
plint/lexique_comparison/count_syllables_lexique.py | 25-------------------------
plint/lexique_comparison/count_syllables_plint.py | 28----------------------------
plint/littre/additions_poesie | 14--------------
plint/littre/additions_vers | 16----------------
plint/littre/compare_plint.py | 28----------------------------
plint/littre/littre_syll.sh | 55-------------------------------------------------------
plint/littre/raw.tpl | 2--
15 files changed, 177 insertions(+), 168 deletions(-)

diff --git a/lexique_comparison/count_syllables_lexique.py b/lexique_comparison/count_syllables_lexique.py @@ -0,0 +1,25 @@ +#!/usr/bin/python3 + +# count the number of syllables of words according to lexique + +import sys + +vowels = "ae$E2@#u)9ioO(y" +consonants = "dpgmtRwszlbkZjknfvSNJx8" + +for l in sys.stdin.readlines(): + f = l.strip().split("\t") + nsyl = 0 + for a in f[1]: + if a in vowels: + nsyl += 1 + elif a in consonants: + pass + else: + print("unknown phoneme %s" % a, file=sys.stderr) + sys.exit(1) + # workaround bug in lexique + if f[1].endswith("@") and f[0] != "afin de": + nsyl -= 1 + print("%s\t%d" % (f[0], nsyl)) + diff --git a/lexique_comparison/count_syllables_plint.py b/lexique_comparison/count_syllables_plint.py @@ -0,0 +1,28 @@ +#!/usr/bin/python3 + +import os +import sys + +# modules are in the parent folder +sys.path.insert(1, os.path.join(sys.path[0], '..')) + +from plint import template, verse, rhyme + +templateobj = template.Template() +patternobj = template.Pattern("12") + +for l in sys.stdin.readlines(): + w = (l.strip().split("\t"))[0] + v = verse.Verse(w, templateobj, patternobj) + rhymeobj = rhyme.Rhyme(v.normalized, + patternobj.constraint, templateobj.mergers, templateobj.options) + v.phon = rhymeobj.phon + v.annotate() + mx = 0 + mn = 0 + for c in v.chunks: + if 'weights' in c.keys(): + mn += min(c['weights']) + mx += max(c['weights']) + print("%s\t%d\t%d" % (w, mn, mx)) + diff --git a/littre/.gitignore b/littre/.gitignore @@ -0,0 +1,9 @@ +conflicts +plint_num +plint_raw_nums +prons +prons_normal +prons_num +prons_poesie +prons_special +prons_vers diff --git a/littre/additions_poesie b/littre/additions_poesie @@ -0,0 +1,14 @@ +ACACIA%a-ka-sia ; de trois OU quatre syllabes en poésie +ADJURATION%dju-ra-sion ; en poésie, de quatre syllabes +APOSTAT%a-po-sta ; en poésie, de trois syllabes +DJURATION%dju-ra-sion ; en poésie, de quatre syllabes +AÉRIEN, ENNE%a-é-riin, riè-n' ; en poésie, de quatre syllabes +AFFECTION%a-fè-ksion ; de quatre syllabes en poésie +ALTÉRATION%al-té-ra-sion ; en poésie, de cinq syllabes +ALTIER, IÈRE%al-tié, tiê-r' ; en poésie, de deux syllabes +CAPTATION%ka-pta-sion ; en poésie, de quatre syllabes +COALITION%ko-a-li-sion ; en poésie, de cinq syllabes +CONDITION%kon-di-sion ; en poésie, de quatre syllabes +CONSCRIPTION%kon-skri-psion ; en poésie, de quatre syllabes +HARNAIS ou HARNOIS%har-nê ; en poésie, de deux syllabes +SANGLIER%san-gli-é ; de deux OU trois syllabes en poésie diff --git a/littre/additions_vers b/littre/additions_vers @@ -0,0 +1,16 @@ +ACADÉMICIEN%a-ka-dé-mi-siin ; de cinq OU six syllabes en vers +AVANT-HIER%a-van-tièr ; de trois syllabes en vers +BROC%bro ; de une syllabes en vers +DIABLE%dia-bl' ; de deux syllabes en vers +EXÉCUTION%è-gzé-ku-sion ; de cinq syllabes en vers +GUÈRE ou GUÈRES%ghê-r'. de une syllabe en vers +JUSQUE et JUSQUES%ju-sk'. de une syllabe en vers +MISSIONNAIRE%mi-sio-nê-r' ; en vers, de quatre syllabes +RÉFUSION%ré-fu-zion ; en vers, de quatre syllabes +RÉMUNÉRATION%ré-mu-né-ra-sion ; en vers, de six syllabes +SOUHAITABLE%souè-ta-bl' ; en vers, de trois syllabes +SOUHAITÉ, ÉE%souè-té, tée ; en vers, de trois syllabes +SOUHAITER%souè-té ; en vers, de trois syllabes +STOÏCIEN, IENNE%sto-i-siin, siè-n' ; en vers, de quatre syllabes +SUPPLICATION%su-pli-ka-sion ; en vers, de cinq syllabes +VIELLE%viè-l' ; en vers, de deux OU trois syllabes diff --git a/littre/compare_plint.py b/littre/compare_plint.py @@ -0,0 +1,28 @@ +#!/usr/bin/python3 + +"""compare file from littre and file from plint for disagreements""" + +import sys + +plint = open(sys.argv[1]) +littre = open(sys.argv[2]) + +while True: + l_plint = plint.readline() + if not l_plint: + break + l_littre = littre.readline() + w_plint, p_plint = l_plint.split('%') + w_littre, p_littre = l_littre.split('%') + p_littre = int(p_littre) + assert(w_plint == w_littre) + w = w_plint + if '-' in p_plint: + lo, hi = p_plint.split('-') + lo = int(lo) + hi = int(hi) + else: + lo = int(p_plint) + hi = lo + if not (lo <= p_littre <= hi): + print ("%s : %d vs %d-%d" % (w, p_littre, lo, hi)) diff --git a/littre/littre_syll.sh b/littre/littre_syll.sh @@ -0,0 +1,55 @@ +#!/bin/bash + +# extract prononciation from xmllittre +# https://bitbucket.org/Mytskine/xmlittre-data.git + +xmlstarlet sel -t -m "//entree" -v "@terme" -v "\"%\"" \ + -v "entete/prononciation" -n "$1"/*.xml > prons +cat prons | grep -E "(syllabes en poésie|en poésie,? de)" > prons_poesie +cat prons | grep -E "(en vers,? de|syllabes en vers)" > prons_vers +cat additions_poesie additions_vers prons_poesie prons_vers | + awk 'BEGIN {FS = "%";} !a[$1]++;' | + while read l; do + echo "$l" | cut -d '%' -f 1 | cut -d ' ' -f 1 | tr -d '\n' + echo -n '%' + echo "$l" | cut -d '%' -f 2- | tr ' ' '\n' | + sed ' + s/^une$/1/; + s/^deux$/2/; + s/^trois$/3/; + s/^quatre$/4/; + s/^cinq$/5/; + s/^cinç$/5/; + s/^six$/6/; + s/^sept$/7/; + s/^disylla.*$/2/; + s/^trisylla.*$/3/; + ' | grep '[0-9]' | head -1 + done > prons_special + +pv prons | + grep -v '%$' | + grep -v ' .*%' | + awk 'BEGIN {FS = "%";} !a[$1]++;' | + while read l; do + echo "$l" | cut -d '%' -f 1 | cut -d ' ' -f 1 | tr -d '\n' + echo -n '%' + echo "$l" | cut -d '%' -f 2- | sed 's/ *- */-/g' | cut -d ' ' -f 1 | tr -d ',' | + sed "s/-[^aâàeéêèiîoôuùûäëïöü-]*'//" | tr '-' '\n' | wc -l + done > prons_normal + +pv prons_special prons_normal | + awk 'BEGIN {FS = "%";} !a[$1]++;' | + tr -d ',' | sort | grep -v '^%' | sed 's/.*/\L&/' > prons_num + +pv prons_num | cut -d '%' -f1 | + ../plint.py raw.tpl 2>&1 | + grep 'total:' | cut -d ':' -f4 | + cut -d ')' -f1 > plint_raw_nums + +paste <(cat prons_num| cut -d'%' -f1) plint_raw_nums | + tr '\t' '%' | sed 's/ *% */%/' \ + > plint_num + +./compare_plint.py plint_num prons_num > conflicts + diff --git a/littre/raw.tpl b/littre/raw.tpl @@ -0,0 +1,2 @@ +! +12 A X diff --git a/plint/lexique_comparison/count_syllables_lexique.py b/plint/lexique_comparison/count_syllables_lexique.py @@ -1,25 +0,0 @@ -#!/usr/bin/python3 - -# count the number of syllables of words according to lexique - -import sys - -vowels = "ae$E2@#u)9ioO(y" -consonants = "dpgmtRwszlbkZjknfvSNJx8" - -for l in sys.stdin.readlines(): - f = l.strip().split("\t") - nsyl = 0 - for a in f[1]: - if a in vowels: - nsyl += 1 - elif a in consonants: - pass - else: - print("unknown phoneme %s" % a, file=sys.stderr) - sys.exit(1) - # workaround bug in lexique - if f[1].endswith("@") and f[0] != "afin de": - nsyl -= 1 - print("%s\t%d" % (f[0], nsyl)) - diff --git a/plint/lexique_comparison/count_syllables_plint.py b/plint/lexique_comparison/count_syllables_plint.py @@ -1,28 +0,0 @@ -#!/usr/bin/python3 - -import os -import sys - -# modules are in the parent folder -sys.path.insert(1, os.path.join(sys.path[0], '..')) - -from plint import template, verse, rhyme - -templateobj = template.Template() -patternobj = template.Pattern("12") - -for l in sys.stdin.readlines(): - w = (l.strip().split("\t"))[0] - v = verse.Verse(w, templateobj, patternobj) - rhymeobj = rhyme.Rhyme(v.normalized, - patternobj.constraint, templateobj.mergers, templateobj.options) - v.phon = rhymeobj.phon - v.annotate() - mx = 0 - mn = 0 - for c in v.chunks: - if 'weights' in c.keys(): - mn += min(c['weights']) - mx += max(c['weights']) - print("%s\t%d\t%d" % (w, mn, mx)) - diff --git a/plint/littre/additions_poesie b/plint/littre/additions_poesie @@ -1,14 +0,0 @@ -ACACIA%a-ka-sia ; de trois OU quatre syllabes en poésie -ADJURATION%dju-ra-sion ; en poésie, de quatre syllabes -APOSTAT%a-po-sta ; en poésie, de trois syllabes -DJURATION%dju-ra-sion ; en poésie, de quatre syllabes -AÉRIEN, ENNE%a-é-riin, riè-n' ; en poésie, de quatre syllabes -AFFECTION%a-fè-ksion ; de quatre syllabes en poésie -ALTÉRATION%al-té-ra-sion ; en poésie, de cinq syllabes -ALTIER, IÈRE%al-tié, tiê-r' ; en poésie, de deux syllabes -CAPTATION%ka-pta-sion ; en poésie, de quatre syllabes -COALITION%ko-a-li-sion ; en poésie, de cinq syllabes -CONDITION%kon-di-sion ; en poésie, de quatre syllabes -CONSCRIPTION%kon-skri-psion ; en poésie, de quatre syllabes -HARNAIS ou HARNOIS%har-nê ; en poésie, de deux syllabes -SANGLIER%san-gli-é ; de deux OU trois syllabes en poésie diff --git a/plint/littre/additions_vers b/plint/littre/additions_vers @@ -1,16 +0,0 @@ -ACADÉMICIEN%a-ka-dé-mi-siin ; de cinq OU six syllabes en vers -AVANT-HIER%a-van-tièr ; de trois syllabes en vers -BROC%bro ; de une syllabes en vers -DIABLE%dia-bl' ; de deux syllabes en vers -EXÉCUTION%è-gzé-ku-sion ; de cinq syllabes en vers -GUÈRE ou GUÈRES%ghê-r'. de une syllabe en vers -JUSQUE et JUSQUES%ju-sk'. de une syllabe en vers -MISSIONNAIRE%mi-sio-nê-r' ; en vers, de quatre syllabes -RÉFUSION%ré-fu-zion ; en vers, de quatre syllabes -RÉMUNÉRATION%ré-mu-né-ra-sion ; en vers, de six syllabes -SOUHAITABLE%souè-ta-bl' ; en vers, de trois syllabes -SOUHAITÉ, ÉE%souè-té, tée ; en vers, de trois syllabes -SOUHAITER%souè-té ; en vers, de trois syllabes -STOÏCIEN, IENNE%sto-i-siin, siè-n' ; en vers, de quatre syllabes -SUPPLICATION%su-pli-ka-sion ; en vers, de cinq syllabes -VIELLE%viè-l' ; en vers, de deux OU trois syllabes diff --git a/plint/littre/compare_plint.py b/plint/littre/compare_plint.py @@ -1,28 +0,0 @@ -#!/usr/bin/python3 - -"""compare file from littre and file from plint for disagreements""" - -import sys - -plint = open(sys.argv[1]) -littre = open(sys.argv[2]) - -while True: - l_plint = plint.readline() - if not l_plint: - break - l_littre = littre.readline() - w_plint, p_plint = l_plint.split('%') - w_littre, p_littre = l_littre.split('%') - p_littre = int(p_littre) - assert(w_plint == w_littre) - w = w_plint - if '-' in p_plint: - lo, hi = p_plint.split('-') - lo = int(lo) - hi = int(hi) - else: - lo = int(p_plint) - hi = lo - if not (lo <= p_littre <= hi): - print ("%s : %d vs %d-%d" % (w, p_littre, lo, hi)) diff --git a/plint/littre/littre_syll.sh b/plint/littre/littre_syll.sh @@ -1,55 +0,0 @@ -#!/bin/bash - -# extract prononciation from xmllittre -# https://bitbucket.org/Mytskine/xmlittre-data.git - -xmlstarlet sel -t -m "//entree" -v "@terme" -v "\"%\"" \ - -v "entete/prononciation" -n "$1"/*.xml > prons -cat prons | grep -E "(syllabes en poésie|en poésie,? de)" > prons_poesie -cat prons | grep -E "(en vers,? de|syllabes en vers)" > prons_vers -cat additions_poesie additions_vers prons_poesie prons_vers | - awk 'BEGIN {FS = "%";} !a[$1]++;' | - while read l; do - echo "$l" | cut -d '%' -f 1 | cut -d ' ' -f 1 | tr -d '\n' - echo -n '%' - echo "$l" | cut -d '%' -f 2- | tr ' ' '\n' | - sed ' - s/^une$/1/; - s/^deux$/2/; - s/^trois$/3/; - s/^quatre$/4/; - s/^cinq$/5/; - s/^cinç$/5/; - s/^six$/6/; - s/^sept$/7/; - s/^disylla.*$/2/; - s/^trisylla.*$/3/; - ' | grep '[0-9]' | head -1 - done > prons_special - -pv prons | - grep -v '%$' | - grep -v ' .*%' | - awk 'BEGIN {FS = "%";} !a[$1]++;' | - while read l; do - echo "$l" | cut -d '%' -f 1 | cut -d ' ' -f 1 | tr -d '\n' - echo -n '%' - echo "$l" | cut -d '%' -f 2- | sed 's/ *- */-/g' | cut -d ' ' -f 1 | tr -d ',' | - sed "s/-[^aâàeéêèiîoôuùûäëïöü-]*'//" | tr '-' '\n' | wc -l - done > prons_normal - -pv prons_special prons_normal | - awk 'BEGIN {FS = "%";} !a[$1]++;' | - tr -d ',' | sort | grep -v '^%' | sed 's/.*/\L&/' > prons_num - -pv prons_num | cut -d '%' -f1 | - ../plint.py raw.tpl 2>&1 | - grep 'total:' | cut -d ':' -f4 | - cut -d ')' -f1 > plint_raw_nums - -paste <(cat prons_num| cut -d'%' -f1) plint_raw_nums | - tr '\t' '%' | sed 's/ *% */%/' \ - > plint_num - -./compare_plint.py plint_num prons_num > conflicts - diff --git a/plint/littre/raw.tpl b/plint/littre/raw.tpl @@ -1,2 +0,0 @@ -! -12 A X