Index: gc_lang/fr/rules.grx ================================================================== --- gc_lang/fr/rules.grx +++ gc_lang/fr/rules.grx @@ -1265,281 +1265,10 @@ <<- after0("^(?: +[A-ZÉÈÂ(]|…|[.][.]+| *$)") ->> " ?" # Erreur de numérisation ? TEST: __ocr__ des chiffrements{{ 7}} Paul n’en sait rien. TEST: __ocr__ veux-tu en parler{{ 7}} - -# virgules -__[s>/ocr(ocr_virgules)__ - (?:[iI]l|l(?:es?|a)|[dnmtsDNMTS]e|[àÀ]|[cC]e(?:te|t|)|[mM](?:on|a)|[TS]a|[qQ]uelques?|[aA]ux?), - <<- not /0.endswith("…") ->> =\0[:-1] # Erreur de numérisation ? Virgule superflue ? - -TEST: __ocr__ Pierre entre pour {{se,}} rapprocher de L -TEST: __ocr__ je voudrais faire une question ou deux sur une maison de ce village, la… comment l’appelle-t-on ? - - -# Nombres -__[s]/ocr(ocr_nombres)__ - [\dOI][\dOI]+ - <<- \0 == "II" ->> 11|Il # Erreur de numérisation ? - <<- __else__ and not \0.isdigit() ->> =\0.replace("O", "0").replace("I", "1") # Erreur de numérisation ? - -TEST: __ocr__ {{II}} pleut tout le temps. -TEST: __ocr__ En l’an {{2OO1}}, tout commença. - - -# âge / age -__[i]/ocr(ocr_age)__ ages? <<- ->> =\0.replace("a", "â").replace("A", "Â") # Erreur de numérisation ? - -TEST: __ocr__ À son {{age}}, on ne sait plus ce qu’on fait. - - -# autre / antre -__[i]/ocr(ocr_autre)__ antres? <<- ->> =\0.replace("n", "u") # Erreur de numérisation ? - -TEST: __ocr__ cet {{antre}} gars lui semblait bien louche. - - -# avec / aven / arec -__[i]/ocr(ocr_avec)__ a(?:rec|ven) <<- ->> avec # Erreur de numérisation ? - -TEST: __ocr__ Elle s’en alla {{arec}} eux sans un regard en arrière. - -# avaient / avalent -__[i]/ocr(ocr_avaient)__ avalent <<- ->> avaient # Erreur de numérisation ? - -TEST: __ocr__ Ils {{avalent}} très faim. - - -# avais / avals / axais -__[i]/ocr(ocr_avis)__ a(?:val|xai)s <<- ->> avais # Erreur de numérisation ? - -TEST: __ocr__ j’{{axais}} souvent perdu le contrôle de moi-même, mais jamais à ce point - - -# car dans / cardans -__[i]/ocr(ocr_car_dans)__ cardans <<- ->> car dans # Erreur de numérisation ? - -TEST: __ocr__ On se tut tous, {{cardans}} l’armée on apprend à la boucler. - - -# chère / obère -__[i]/ocr(ocr_chère)__ obère <<- not before(r"(?i)\b([jnlmts]’|il |on |elle )$") ->> chère # Erreur de numérisation ? - -TEST: __ocr__ cette femme {{obère}} à notre cœur. - - -# celui / celai -__[i]/ocr(ocr_celui)__ celai <<- not before(r"(?i)\b[jn]e +$") ->> celui # Erreur de numérisation ? - -TEST: __ocr__ je suis déjà venu et {{celai}} qui viendra encore. - - -# ces / cos -__[i]/ocr(ocr_ces)__ cos <<- ->> ces # Erreur de numérisation ? - -TEST: __ocr__ {{cos}} problèmes sont insolubles. - - -# C’était / Celait -__[i]/ocr(ocr_c_était)__ celait <<- ->> c’était # Erreur de numérisation ? - -TEST: __ocr__ {{celait}} perdu d’avance. - - -# cette / celte -__[i]/ocr(ocr_cette1)__ (cel[tl]e) ({w_2}) @@0,$ <<- morph(\2, ":N.*:f:s", False) -1>> cette # Erreur de numérisation ? - -TEST: __ocr__ mais {{celte}} femme semblait savoir ce qu’elle faisait. -TEST: __ocr__ avec {{celle}} tentative d’humour, il pensait nous faire rire. - - -# cette / cotte -__[i]/ocr(ocr_cette2)__ cotte <<- not morph(word(-1), ":D.*:f:[si]") ->> cette # Erreur de numérisation ? - -TEST: __ocr__ on poirautait, {{cotte}} mariée n’arrivait pas à se décider. - - -# Comme / Gomme -__[s]/ocr(ocr_comme)__ Gomme <<- not morph(word(1), ">(?:et|o[uù])/") ->> Comme # Erreur de numérisation ? - -TEST: __ocr__ {{Gomme}} il était sage à cette époque-là ! - - -# Comment / Gomment -__[s]/ocr(ocr_comment)__ Gomment <<- ->> Comment # Erreur de numérisation ? - -TEST: __ocr__ {{Gomment}} s’en sortir avec tous ces retards qui s’accumulent ? - - -# contre / coutre / contra -__[i]/ocr(ocr_contre)__ co[un]tr[ea] <<- not re.search("(?i)^contre$", \0) ->> contre # Erreur de numérisation ? - -TEST: __ocr__ elle était {{coutre}} cette idée et le serait toujours. - - -# de / da -__[i]/ocr(ocr_de)__ da <<- ->> de # Erreur de numérisation ? - -TEST: __ocr__ Le nombre {{da}} personnes endettées augmente sans cesse. - - -# dans / bans / clans -__[i]/ocr(ocr_dans1)__ bans <<- not morph(word(-1), ":D.*:p", False, False) ->> dans # Erreur de numérisation ? -__[s]/ocr(ocr_dans2)__ - (clans) (?:les?|la|ce(?:tte|t|s|)|des?|[mts](?:on|a|es)|leurs?|[nv]os|cha(?:que|cun)|tou(?:tes?|s|t)) @@0 - <<- not morph(word(-1), ":D.*:p", False, False) -1>> dans # Erreur de numérisation ? - -TEST: __ocr__ Mais {{bans}} cette ferme, tout était bien organisé. -TEST: __ocr__ sache que, {{clans}} cette ferme, on ne fait que du bio. - - -# dame / darne -__[i]/ocr(ocr_dame)__ - darnes - <<- ->> =\0.replace("rn", "m") # Erreur de numérisation ? - -TEST: __ocr__ ces {{darnes}} arrivèrent avec dix minutes d’avance. - - -# dé / de / dés / des / dès -__[i]/ocr(ocr_de_des1)__ - dés? - <<- \0.endswith("é") and not morph(word(-1), ":D.*:m:[si]", False, False) ->> de # Erreur de numérisation ? - <<- \0.endswith("s") and not morph(word(-1), ":D.*:m:p", False, False) ->> des|dès # Erreur de numérisation ? - -TEST: __ocr__ {{dés}} fois, ça ne passe pas -TEST: __ocr__ {{dé}} gros camions circulaient toute la journée - - -# de / dos -__[i]/ocr(ocr_de_des2)__ - dos? - <<- \0.endswith("o") ->> de # Erreur de numérisation ? - <<- __else__ and not morph(word(-1), ":D.*:[me]", False, False) ->> des|dès # Erreur de numérisation ? - -TEST: __ocr__ {{dos}} camions cabossés à n’en plus finir - - -# de la / delà -__[i]/ocr(ocr_de_la)__ delà <<- not before(r"(?i)\bau ") ->> de la|de là # Erreur de numérisation ? - -TEST: __ocr__ la peinture {{delà}} maison s’écaillait - - -# doute / cloute -__[i]/ocr(ocr_doute)__ cloute <<- ->> doute # Erreur de numérisation ? - -TEST: __ocr__ Sans aucun {{cloute}}. - - -# du / dû -__[i]/ocr(ocr_du)__ - (dû) +({w_3}) @@0,$ - <<- morph(\2, ":[NA]:[me]:[si]", ":Y") -1>> du # Erreur de numérisation ? - -TEST: __ocr__ prendre {{dû}} bon temps -TEST: __ocr__ Tous eussent dû subir ce supplice raffiné. - - -# elle / elfe -__[s]/ocr(ocr_elle)__ - [eE]lfes? - <<- \0.endswith("e") and ( morph(word(-1), ":R", False, True) or isNextVerb() ) ->> elle # Erreur de numérisation ? - <<- \0.endswith("s") and ( morph(word(-1), ":R", False, True) or isNextVerb() ) ->> elles # Erreur de numérisation ? - -TEST: __ocr__ {{Elfes}} s’ennuyaient à mourir. - - -# est / ost -__[i]/ocr(ocr_est)__ ost <<- ->> est # Erreur de numérisation ? - -TEST: __ocr__ Le cheval {{ost}} attaché. - - -# et / cl -__[i]/ocr(ocr_et)__ [cE][l1] <<- not before("[0-9] +$") ->> et # Erreur de numérisation ? - -TEST: __ocr__ elle {{cl}} lui, c’était pour la vie. -TEST: __ocr__ {{El}} il faisait froid là-haut - - -# état / étal -__[i]/ocr(ocr_état)__ - étals? - <<- \0.endswith("l") ->> état # Erreur de numérisation ? - <<- __else__ ->> étais|états # Erreur de numérisation ? - -TEST: __ocr__ Quels {{étals}} sont venus ? - - -# étaient / étalent -__[i]/ocr(ocr_étaient)__ étalent <<- ->> étaient # Erreur de numérisation ? - -TEST: __ocr__ Ce qu’ils {{étalent}} vraiment, nul ne le savait. - - -# fille / tille -__[i]/ocr(ocr_fille)__ tille <<- ->> fille # Erreur de numérisation ? - -TEST: __ocr__ Cette {{tille}} n’en avait jamais assez. - - -# fut / rut -__[i]/ocr(ocr_fut)__ rut <<- ->> fut # Erreur de numérisation ? - -TEST: __ocr__ ce petit {{rut}} traité comme un chien - -# il / n -__[s]/ocr(ocr_il)__ - (n )([bcdfghjklmnpqrstvwxz][\w-]+) @@0,$ - <<- isStart() and morph(\2, ":(?:O[on]|3s)", False) -1>> "il " # Erreur de numérisation ? - -TEST: __ocr__ {{n }}contient trop de soufre. - - -# il / ils / U / Us -__[s]/ocr(ocr_il_ils2)__ - Us? - <<- \0.endswith("s") ->> Ils|ils # Erreur de numérisation ? - <<- __else__ ->> Il|il # Erreur de numérisation ? - -TEST: __ocr__ {{Us}} arrive demain. - - -# il / i1 / if / 11 -__[s]/ocr(ocr_il_ils3)__ - [iI1][1f]s? - <<- not \0.endswith("s") ->> Il|il # Erreur de numérisation ? - <<- __else__ ->> Ils|ils # Erreur de numérisation ? - -TEST: __ocr__ {{i1s}} en savent beaucoup trop pour leur propre bien. - - -# fa / la -__[i]/ocr(ocr_la)__ fa <<- ->> la # Erreur de numérisation ? - -TEST: __ocr__ dans {{fa}} demeure - - -# large / largo -__[i]/ocr(ocr_large)__ largos? <<- ->> =\0.replace("o", "e") # Erreur de numérisation ? - -TEST: __ocr__ elle pense {{largo}} - - -# l’ / j’ / Y / I -__[s]/ocr(ocr_lj1)__ - (Y[ ’'])([aâeéèêëiîïoôuy][\w-]+) @@0,2 - <<- before(r"(?i)\w") or not morph(\2, ":Y", False) -1>> l’|L’|j’|J’ # Erreur de numérisation ? -__[s]/ocr(ocr_lj2)__ - ([Ii1][ ’'])([aâeéèêëiîïoôuy][\w-]+) @@0,2 - <<- -1>> l’|L’|j’|J’ # Erreur de numérisation ? - -TEST: __ocr__ {{Y’}}arrive demain. -TEST: __ocr__ {{I’}}arrive demain. - # ! __> " !" # Erreur de numérisation ? @@ -1551,301 +1280,17 @@ TEST: __ocr__ Vraiment{{ 1}} Paul n’en savait rien. TEST: __ocr__ Ça prendra 1 h. TEST: __ocr__ Valeur : 1 KHz. -# l’ / V / P -__[s]/ocr(ocr_lv)__ - V({w_2}) @@1 - <<- \0.istitle() and before(r"(?i)\w") and morphex(\0, ":", ":M") >>> - <<- spell(\1) ->> v\1|l’\1 # Erreur de numérisation ? - <<- __else__ ->> v\1 # Erreur de numérisation ? -__[s]/ocr(ocr_lp)__ - P([aâeéêèiîïoôuy]{w_1}) @@1 - <<- before(r"(?i)\w") and morphex(\0, ":", ":M") and spell(\1) ->> l’\1|p\1 # Erreur de numérisation ? - -TEST: __ocr__ beaucoup de {{Vélos}} à Versailles. -TEST: __ocr__ avec {{Vagile}} méthode de notre amie Virginie, tout est possible. -TEST: __ocr__ Viens demain. -TEST: __ocr__ Ce jour où Valérie eut sa licence de droit. -TEST: __ocr__ Il scrute Pierre, {{Pair}} maussade. -TEST: __ocr__ Une grosse vague arrivait et {{Peau}} remplit. -TEST: __ocr__ selon toute logique, Paris sera épargné. - - -# l’était / Tétait -__[s]/ocr(ocr_l_était)__ - Tétait - <<- before(r"(?i)\w") ->> l’était # Erreur de numérisation ? - -TEST: __ocr__ perdu, cet homme {{Tétait}} - - -# le les / lé / lés -__[i]/ocr(ocr_le_les)__ - lés? - <<- ->> =\0.replace("é", "e").replace("É", "E") # Erreur de numérisation ? - -TEST: __ocr__ il s’agit de {{lés}} observer. - - -__[i]/ocr(ocr_le_la)__ - 1[easrnxiocuwàéè] - <<- \0.endswith("e") ->> le # Erreur de numérisation ? - <<- __else__ and \0.endswith("a") ->> la # Erreur de numérisation ? - <<- __else__ and \0.endswith("à") ->> la|là # Erreur de numérisation ? - <<- __else__ ->> le|la # Erreur de numérisation ? - -TEST: __ocr__ avec {{1e}} chien du policier -TEST: __ocr__ il le jura sur {{1a}} tête de sa mère -TEST: __ocr__ {{1c}} chat du voinsin est idiot - - -# les / lai / lei -__[i]/ocr(ocr_lui_les)__ l[ae]i <<- ->> lui|les # Erreur de numérisation ? - -TEST: __ocr__ {{lai}} gros sont mal vus. - - -# le / la / tu / lu -__[s]/ocr(ocr_tu_le_la)__ lu <<- not morph(word(-1), ":(?:V0|N.*:m:[si])", False, False) ->> tu|le|la # Erreur de numérisation ? - -TEST: __ocr__ {{lu}} as si bien réussi - - -# M. / Mr / M -__[s>/ocr(ocr_mr)__ (M(?:, | ))[A-ZÉÈ] @@0 <<- -1>> "Mr |M. " # Erreur de numérisation ? - -TEST: __ocr__ {{M, }}Patrick nous a oubliés. - - -# Mais / Hais / Mats / niais -__[u]/ocr(ocr_mais1)__ Hais <<- ->> Mais # Erreur de numérisation ? -__[i]/ocr(ocr_mais2)__ mats <<- not morph(word(-1), ":D:[me]:p", False, False) ->> mais # Erreur de numérisation ? -__[i]/ocr(ocr_mais3)__ maïs <<- not morph(word(-1), ":D:(?:m:s|e:p)", False, False) ->> mais # Erreur de numérisation ? -__[s]/ocr(ocr_mais4)__ - niais <<- not morph(word(-1), ">(?:homme|ce|quel|être)/", False, False) ->> mais # Erreur de numérisation ? - -TEST: __ocr__ {{Hais}} il en sait trop. -TEST: __ocr__ c’était bien, {{mats}} quelle journée -TEST: __ocr__ c’est bien, {{niais}} trop subtil. -TEST: __ocr__ c’est parfait, {{maïs}} trop subtil. - - -# même / même / mème / mémo / môme -__[i]/ocr(ocr_même1)__ mômes? - <<- \0.endswith("e") and not morph(word(-1), ":D.*:[me]:[si]", False, False) ->> même # Erreur de numérisation ? - <<- \0.endswith("s") and not morph(word(-1), ":D.*:[me]:[pi]", False, False) ->> mêmes # Erreur de numérisation ? -__[i]/ocr(ocr_même2)__ mèmes? <<- ->> =\0.replace("è", "ê").replace("È", "Ê") # Erreur de numérisation ? -__[i]/ocr(ocr_même3)__ mémos? <<- ->> =\0.replace("é", "ê").replace("É", "Ê") # Erreur de numérisation ? - -TEST: __ocr__ J’en ai assez {{môme}} si ça ne se voit pas. -TEST: __ocr__ Ces {{mèmes}} hommes qui nous ont lâchés au pire moment -TEST: __ocr__ C’est l’incessant retour du {{mémo}}. - - -# mot / mol / moi -__[i]/ocr(ocr_mot)__ - mols? - <<- ->> =\0.replace("l", "t").replace("L", "T")+"|"+\0.replace("l", "i").replace("L", "I") # Erreur de numérisation ? - -TEST: __ocr__ c’est un {{mol}} très dur. - - -# mon / won -__[i]/ocr(ocr_mon)__ won <<- ->> mon # Erreur de numérisation ? - -TEST: __ocr__ c’est {{won}} ami - - -# ne / na / no / rie -__[i]/ocr(ocr_ne1)__ n[oa] <<- ->> ne # Erreur de numérisation ? -__[s]/ocr(ocr_ne2)__ rie <<- ->> ne # Erreur de numérisation ? - -TEST: __ocr__ {{no}} fais rien que tu pourrais regretter -TEST: __ocr__ elle avance, mais {{rie}} prend jamais de risque inconsidéré. - - -# nous / noue / noua -__[i]/ocr(ocr_nous)__ nou[ea] <<- ->> nous # Erreur de numérisation ? - -TEST: __ocr__ {{noue}} attaquer à eux signerait notre perte. - - -# par / paf / pan / pat -__[i]/ocr(ocr_par)__ pa[fnt] <<- ->> par # Erreur de numérisation ? - -TEST: __ocr__ Une seule action {{paf}} jour - - -# par le / par la / par les / parle / parla / parles -__[i]/ocr(ocr_par_le)__ - (parle) ({w_2}) @@0,$ - <<- not before(r"(?i)\b(?:ne|il|on|elle|je) +$") and morph(\2, ":[NA].*:[me]:[si]", False) -1>> par le # Erreur de numérisation ? -__[i]/ocr(ocr_par_la)__ - (parla) ({w_2}) @@0,$ - <<- not before(r"(?i)\b(?:ne|il|on|elle) +$") and morph(\2, ":[NA].*:[fe]:[si]", False) -1>> par la # Erreur de numérisation ? -__[i]/ocr(ocr_par_les)__ - (parles) ({w_2}) @@0,$ - <<- not before(r"(?i)\b(?:ne|tu) +$") and morph(\2, ":[NA].*:[pi]", False) -1>> par les # Erreur de numérisation ? - -TEST: __ocr__ {{parle}} glaive et le mensonge, l’Église s’imposa. -TEST: __ocr__ {{parla}} force, on peut réussir -TEST: __ocr__ tu fus trompée {{parles}} mensonges permanents de son beau-père. - - -# pendant / pondant -__[i]/ocr(ocr_pendant)__ pondant <<- ->> pendant # Erreur de numérisation ? - -TEST: __ocr__ {{pondant}} qu’elle travaille, il se prélasse. - - -# peu / peut / peux / pou -__[i]/ocr(ocr_peu_peux_peut)__ - poux? - <<- \0.endswith("u") and not morph(word(-1), ":D.*:m:s", False, False) ->> peu # Erreur de numérisation ? - <<- \0.endswith("x") and not morph(word(-1), ":D.*:m:p", False, False) ->> peux|peut|pour # Erreur de numérisation ? - -TEST: __ocr__ il est {{pou}} probable qu’il y parvienne. - - -# plus / pins -__[i]/ocr(ocr_plus)__ pins <<- ->> plus # Erreur de numérisation ? - -TEST: __ocr__ ils sont {{pins}} instruits qu’il n’y paraît. - - -# puis / pois -__[i]/ocr(ocr_puis)__ pois <<- not morph(word(-1), ":D.*:m:p", False, False) ->> puis # Erreur de numérisation ? - -TEST: __ocr__ elles sont venues, {{pois}} elles sont parties. - - -# pour / pouf -__[i]/ocr(ocr_pour)__ pouf <<- not morph(word(-1), ":D.*:f:s", False, False) ->> pour # Erreur de numérisation ? - -TEST: __ocr__ {{pouf}} elle, il était prêt à tout. - - -# près / prés -__[i]/ocr(ocr_près)__ prés <<- not morph(word(-1), ":D.*:[me]:p", False, False) ->> près # Erreur de numérisation ? - -TEST: __ocr__ ils sont arrivés {{prés}} de la tombe. - - -# que / quo -__[i]/ocr(ocr_que)__ - qu[oa] - <<- \0.endswith("a") and not before("sine +$") ->> que # Erreur de numérisation ? - <<- \0.endswith("o") and not before("statu +$") ->> que # Erreur de numérisation ? - -TEST: __ocr__ elles ne savent pas {{quo}} faire -TEST: __ocr__ {{Quo}} penser de tout ceci ? -TEST: __ocr__ pour elle, c’est une condition sine qua non. - - -# qu’importe -__[i]/ocr(ocr_qu_importe)__ - qu’(importé) @@3 - <<- -1>> importe # Erreur de numérisation ? - -TEST: __ocr__ Qu’{{importé}} le flacon, pourvu qu’on ait l’ivresse. - - -# qui / gui -__[i]/ocr(ocr_qui)__ gui <<- not morph(word(-1), ":D.*:m:s", False, False) ->> qui # Erreur de numérisation ? - -TEST: __ocr__ avec {{gui}} faire alliance ? - - -# s’il / sil -__[i]/ocr(ocr_s_il)__ - sils? - <<- \0.endswith("s") ->> s’ils # Erreur de numérisation ? - <<- __else__ ->> s’il # Erreur de numérisation ? - -TEST: __ocr__ {{sil}} avait su, il n’aurait rien tenté de trop audacieux. - - -# sur / sar -__[i]/ocr(ocr_sur)__ sar <<- ->> sur # Erreur de numérisation ? - -TEST: __ocr__ il ne savait rien {{sar}} eux. - - -# tard / lard -__[s]/ocr(ocr_tard)__ lard <<- not before(r"(?i)\b(?:ce|[mts]on|du|un|le) $") ->> tard # Erreur de numérisation ? - -TEST: __ocr__ elles seront là tôt ou {{lard}}. - - -# tandis que / taudis -__[i]/ocr(ocr_tandis)__ (taudis) que? @@0 <<- -1>> tandis # Erreur de numérisation ? - -TEST: __ocr__ mais {{taudis}} qu’elle œuvrait à leur salut, les nuages s’amoncelaient. - - -# l’est / Test -__[i]/ocr(ocr_l_est)__ - Test - <<- before(r"(?i)\w") ->> l’est # Erreur de numérisation ? - -TEST: __ocr__ ça {{Test}} à leurs yeux. - - -# tête / tète -__[i]/ocr(ocr_tête)__ tète - <<- not before(r"(?i)\b(?:je|il|elle|on|ne) $") - ->> =\0.replace("è", "ê").replace("È", "Ê") # Erreur de numérisation ? - -TEST: __ocr__ cette forte {{tète}} n’écoute jamais personne. - - -# tin / fin / un -__[i]/ocr(ocr_fin_un)__ tin <<- ->> fin|un # Erreur de numérisation ? - -TEST: __ocr__ c’était {{tin}} marchand vaniteux. - - -# ton / tan -__[i]/ocr(ocr_ton)__ tans? <<- ->> =\0.replace("a", "o").replace("A", "O") # Erreur de numérisation ? - -TEST: __ocr__ pour {{tan}} propre bien. - - -# toute / tonte -__[i]/ocr(ocr_toute)__ tontes? <<- ->> =\0.replace("n", "u").replace("N", "U") # Erreur de numérisation ? - -TEST: __ocr__ à {{tonte}} fin utile - - -# tu es / tues -__[i]/ocr(ocr_tu_es)__ tues - <<- not morph(word(-1), ":(?:N.*:f:p|V0e.*:3p)", False, False) ->> tu es # Erreur de numérisation ? - -TEST: __ocr__ dans tous les cas, {{tues}} foutue. -TEST: __ocr__ ses actions tues. - - -# un / vin -__[i]/ocr(ocr_un)__ vin <<- not before(r"(?i)\b(?:ce|d[eu]|un|quel|leur|le) +") ->> un # Erreur de numérisation ? - -TEST: __ocr__ {{vin}} mathématicien hors du commun. - - -# une / ure / vine -__[i]/ocr(ocr_une1)__ ure <<- ->> une # Erreur de numérisation ? -__[i]/ocr(ocr_une2)__ vine <<- ->> une # Erreur de numérisation ? - -TEST: __ocr__ il avait {{ure}} femme élégante et silencieuse -TEST: __ocr__ c’est pour {{vine}} amie - - -# vous / voua / voue -__[i]/ocr(ocr_vous)__ vou[ae] <<- ->> vous # Erreur de numérisation ? - -TEST: __ocr__ avec {{voue}}, je n’ai pas confiance. +# virgules +__[s>/ocr(ocr_virgules)__ + (?:[iI]l|l(?:es?|a)|[dnmtsDNMTS]e|[àÀ]|[cC]e(?:te|t|)|[mM](?:on|a)|[TS]a|[qQ]uelques?|[aA]ux?), + <<- not /0.endswith("…") ->> =\0[:-1] # Erreur de numérisation ? Virgule superflue ? + +TEST: __ocr__ Pierre entre pour {{se,}} rapprocher de L +TEST: __ocr__ je voudrais faire une question ou deux sur une maison de ce village, la… comment l’appelle-t-on ? ## Casse __[s]/ocr(ocr_casse1)__ [A-ZÉÈÂÊÎÔ]{w_1} @@ -2544,10 +1989,689 @@ __n_importe_qui_quoi__ n’ importe [qui|quoi] <<- %2>> +@@@@ +@@@@ +@@@@ +@@@@ +@@@@GRAPH: ocr _ +@@@@ +@@@@ +@@@@ +@@@@ + +# This graph is parsed only if option is activated. + +# Nombres +__ocr_nombres__ + ~[\dOI][\dOI]$ + <<- \1 == "II" ->> 11|Il # Erreur de numérisation ? + <<- __else__ and not \1.isdigit() ->> =\1.replace("O", "0").replace("I", "1") # Erreur de numérisation ? + +TEST: __ocr__ {{II}} pleut tout le temps. +TEST: __ocr__ En l’an {{2OO1}}, tout commença. + + +# âge / age +__ocr_age__ + >age + <<- ->> =\1.replace("a", "â").replace("A", "Â") # Erreur de numérisation ? + +TEST: __ocr__ À son {{age}}, on ne sait plus ce qu’on fait. + + +# autre / antre +__ocr_autre__ + >antre + <<- ->> =\1.replace("n", "u") # Erreur de numérisation ? + +TEST: __ocr__ cet {{antre}} gars lui semblait bien louche. + + +# avec / aven / arec +__ocr_avec__ + [arec|aven] + <<- ->> avec # Erreur de numérisation ? + +TEST: __ocr__ Elle s’en alla {{arec}} eux sans un regard en arrière. + +# avaient / avalent +__ocr_avaient__ + avalent + <<- ->> avaient # Erreur de numérisation ? + +TEST: __ocr__ Ils {{avalent}} très faim. + + +# avais / avals / axais +__ocr_avis__ + [avals|axais] + <<- ->> avais # Erreur de numérisation ? + +TEST: __ocr__ j’{{axais}} souvent perdu le contrôle de moi-même, mais jamais à ce point + + +# car dans / cardans +__ocr_car_dans__ + cardans + <<- ->> car dans # Erreur de numérisation ? + +TEST: __ocr__ On se tut tous, {{cardans}} l’armée on apprend à la boucler. + + +# chère / obère +__ocr_chère__ + obère + <<- not value(<1, "|j’|n’|l’|m’|t’|s’|il|on|elle|ça|cela|ceci|") ->> chère # Erreur de numérisation ? + +TEST: __ocr__ cette femme {{obère}} à notre cœur. + + +# celui / celai +__ocr_celui__ + celai + <<- not value(<1, "|je|ne|le|la|les|") ->> celui # Erreur de numérisation ? + +TEST: __ocr__ je suis déjà venu et {{celai}} qui viendra encore. + + +# ces / cos +__ocr_ces__ + cos + <<- ->> ces # Erreur de numérisation ? + +TEST: __ocr__ {{cos}} problèmes sont insolubles. + + +# C’était / Celait +__ocr_c_était__ + celait + <<- ->> c’était # Erreur de numérisation ? + +TEST: __ocr__ {{celait}} perdu d’avance. + + +# cette / celte / cotte +__ocr_cette__ + [celte|celle] @:N.*:f:s + <<- -1>> cette # Erreur de numérisation ? + + cotte + <<- not morph(<1, ":D.*:f:[si]") ->> cette # Erreur de numérisation ? + +TEST: __ocr__ mais {{celte}} femme semblait savoir ce qu’elle faisait. +TEST: __ocr__ avec {{celle}} tentative d’humour, il pensait nous faire rire. +TEST: __ocr__ on poirautait, {{cotte}} mariée n’arrivait pas à se décider. + + +# Comme / Gomme +__ocr_comme__ + Gomme + <<- not value(<1, "|et|ou|où|") ->> Comme # Erreur de numérisation ? + +TEST: __ocr__ {{Gomme}} il était sage à cette époque-là ! + + +# Comment / Gomment +__ocr_comment__ + Gomment + <<- ->> Comment # Erreur de numérisation ? + +TEST: __ocr__ {{Gomment}} s’en sortir avec tous ces retards qui s’accumulent ? + + +# contre / coutre / contra +__ocr_contre__ + [contra|coutre|coutra] + <<- ->> contre # Erreur de numérisation ? + +TEST: __ocr__ elle était {{coutre}} cette idée et le serait toujours. + + +# de / da +__ocr_de__ + da + <<- ->> de # Erreur de numérisation ? + +TEST: __ocr__ Le nombre {{da}} personnes endettées augmente sans cesse. + + +# dans / bans / clans +__ocr_dans__ + bans + <<- not morph(<1, ":D.*:p") ->> dans # Erreur de numérisation ? + + clans [le|la|l’|les|un|une|ce|cet|cette|ces|mon|ton|son|ma|ta|sa|mes|tes|ses|notre|votre|nos|vos|leur|leurs|chaque|chacun|plusieurs|quelques|maints|maintes|tout|tous|toute|toutes|certains|certaines|nombre] + <<- not morph(<1, ":D.*:p") -1>> dans # Erreur de numérisation ? + +TEST: __ocr__ Mais {{bans}} cette ferme, tout était bien organisé. +TEST: __ocr__ sache que, {{clans}} cette ferme, on ne fait que du bio. + + +# dame / darne +__ocr_dame__ + >darne + <<- ->> =\1.replace("rn", "m") # Erreur de numérisation ? + +TEST: __ocr__ ces {{darnes}} arrivèrent avec dix minutes d’avance. + + +# dé / de / dés / des / dès / dos +__ocr_de_des__ + dé + <<- not morph(<1, ":D.*:m:[si]") ->> de # Erreur de numérisation ? + + dés + <<- not morph(<1, ":D.*:m:p") ->> des|dès # Erreur de numérisation ? + + do + <<- ->> de # Erreur de numérisation ? + + dos + <<- not morph(<1, ":D.*:[me]") ->> des|dès # Erreur de numérisation ? + +TEST: __ocr__ {{dés}} fois, ça ne passe pas +TEST: __ocr__ {{dé}} gros camions circulaient toute la journée +TEST: __ocr__ {{do}} bon matin. +TEST: __ocr__ {{dos}} camions cabossés à n’en plus finir + + +# de la / delà +__ocr_de_la__ + delà + <<- not value(<1, "|au|") ->> de la|de là # Erreur de numérisation ? + +TEST: __ocr__ la peinture {{delà}} maison s’écaillait + + +# doute / cloute +__ocr_doute__ + cloute + <<- ->> doute # Erreur de numérisation ? + +TEST: __ocr__ Sans aucun {{cloute}}. + + +# du / dû +__ocr_du__ + dû @:[NA]:[me]:[si]¬:Y + <<- -1>> du # Erreur de numérisation ? + +TEST: __ocr__ prendre {{dû}} bon temps +TEST: __ocr__ Tous eussent dû subir ce supplice raffiné. + + +# elle / elfe +__ocr_elle__ + elfe + <<- morph(<1, ":R||>,") or isNextVerb() ->> elle # Erreur de numérisation ? + + elfes + <<- morph(<1, ":R||>,") or isNextVerb() ->> elles # Erreur de numérisation ? + +TEST: __ocr__ {{Elfes}} s’ennuyaient à mourir. + + +# est / ost +__ocr_est__ + ost + <<- ->> est # Erreur de numérisation ? + +TEST: __ocr__ Le cheval {{ost}} attaché. + + +# et / cl +__ocr_et__ + [cl|c1|e1|el] + <<- not before("[0-9] +$") ->> et # Erreur de numérisation ? + +TEST: __ocr__ elle {{cl}} lui, c’était pour la vie. +TEST: __ocr__ {{El}} il faisait froid là-haut + + +# état / étal +__ocr_état_étais_étaient__ + étal + <<- ->> état # Erreur de numérisation ? + + [étals|étale] + <<- ->> étais|états # Erreur de numérisation ? + + étalent + <<- ->> étaient # Erreur de numérisation ? + +TEST: __ocr__ Quels {{étals}} sont venus ? +TEST: __ocr__ Ce qu’ils {{étalent}} vraiment, nul ne le savait. + + +# fille / tille +__ocr_fille__ + tille + <<- ->> fille # Erreur de numérisation ? + +TEST: __ocr__ Cette {{tille}} n’en avait jamais assez. + + +# fut / rut +__ocr_fut__ + rut + <<- ->> fut # Erreur de numérisation ? + +TEST: __ocr__ ce petit {{rut}} traité comme un chien + +# il / n / ils / U / Us / i1 / if / 11 +__ocr_il__ + [|,] n ~[bcdfghjklmnpqrstvwxz] + <<- morph(\3, ":(?:O[on]|3s)") -2>> il # Erreur de numérisation ? + + U + <<- ->> Il|il # Erreur de numérisation ? + + Us + <<- ->> Ils|ils # Erreur de numérisation ? + + [i1|if|11|1f] + <<- ->> Il|il # Erreur de numérisation ? + + [i1s|ifs|11s|1fs] + <<- ->> Ils|ils # Erreur de numérisation ? + +TEST: __ocr__ {{n }}contient trop de soufre. +TEST: __ocr__ {{Us}} arrive demain. +TEST: __ocr__ {{i1s}} en savent beaucoup trop pour leur propre bien. + + +# fa / la +__ocr_la__ + fa + <<- ->> la # Erreur de numérisation ? + +TEST: __ocr__ dans {{fa}} demeure + + +# large / largo +__ocr_large__ + >largo + <<- ->> =\1.replace("o", "e") # Erreur de numérisation ? + +TEST: __ocr__ elle pense {{largo}} + + +# l’ / j’ / Y / I +__ocr_lj1__ + ~^Y’[aâeéèêëiîïoôuyh] + <<- ->> ="l’"+\1[2:] + "|L’"+\1[2:] + "|j’"+\1[2:] + "|J’"+\1[2:] # Erreur de numérisation ? + + Y ~^[aâeéèêëiîïoôuyh] + <<- before(r"\w") and not morph(\2, ":Y") ->> l’\2|L’\2|j’\2|J’\2 # Erreur de numérisation ? + + ~^[Ii1]’[aâeéèêëiîïoôuyh] + <<- ->> ="l’"+\1[2:] + "|L’"+\1[2:] + "|j’"+\1[2:] + "|J’"+\1[2:] # Erreur de numérisation ? + + [I|i|1] ~^[aâeéèêëiîïoôuy] + <<- ->> l’\2|L’\2|j’\2|J’\2 # Erreur de numérisation ? + +TEST: __ocr__ {{Y’}}arrive demain. +TEST: __ocr__ {{I’}}arrive demain. + + +# l’ / V / P +__ocr_l__ + ~^V. + <<- \1.istitle() and before(r"\w") and morph(\1, ":", ":M") >>> + <<- spell(\1[1:]) ->> ="v"+\1[1:] + "|l’"+\1[1:] # Erreur de numérisation ? + <<- __else__ ->> ="v"+\1[1:] # Erreur de numérisation ? + + ~^P[aâeéêèiîïoôuy] + <<- before(r"\w") and morph(\1, ":", ":M") and spell(\1) ->> ="l’"+\1[1:] + "|p"+\1[1:] # Erreur de numérisation ? + +TEST: __ocr__ beaucoup de {{Vélos}} à Versailles. +TEST: __ocr__ avec {{Vagile}} méthode de notre amie Virginie, tout est possible. +TEST: __ocr__ Viens demain. +TEST: __ocr__ Ce jour où Valérie eut sa licence de droit. +TEST: __ocr__ Il scrute Pierre, {{Pair}} maussade. +TEST: __ocr__ Une grosse vague arrivait et {{Peau}} remplit. +TEST: __ocr__ selon toute logique, Paris sera épargné. + + +# l’était / Tétait +__ocr_l_était__ + Tétait + <<- ->> l’était|t’était|T’était # Erreur de numérisation ? + +TEST: __ocr__ perdu, cet homme {{Tétait}} + + +# le / les / lé / lés / lui / lai / lei / la / tu / lu +__ocr_le_la_les__ + >lé + <<- ->> =\1.replace("é", "e").replace("É", "E") # Erreur de numérisation ? + + ~^1[easrnxiocuwàéè]$ + <<- \1.endswith("e") ->> le # Erreur de numérisation ? + <<- __else__ and \1.endswith("a") ->> la # Erreur de numérisation ? + <<- __else__ and \1.endswith("à") ->> la|là # Erreur de numérisation ? + <<- __else__ ->> le|la # Erreur de numérisation ? + + [1es|1as] + <<- ->> les # Erreur de numérisation ? + + [lai|lei] + <<- ->> lui|les # Erreur de numérisation ? + + lu + <<- not morph(<1, ":(?:V0|N.*:m:[si])") ->> tu|le|la # Erreur de numérisation ? + +TEST: __ocr__ il s’agit de {{lés}} observer. +TEST: __ocr__ avec {{1e}} chien du policier +TEST: __ocr__ il le jura sur {{1a}} tête de sa mère +TEST: __ocr__ {{1c}} chat du voinsin est idiot +TEST: __ocr__ {{lai}} gros sont mal vus. +TEST: __ocr__ {{lu}} as si bien réussi + + +# M. / Mr / M +__ocr_mr__ + M , ~^[A-ZÉÈ] + <<- -1:2>> "Mr |M. " # Erreur de numérisation ? + + M ~^[A-ZÉÈ] + <<- -1>> "Mr |M. " # Erreur de numérisation ? + +TEST: __ocr__ {{M, }}Patrick nous a oubliés. + + +# Mais / Hais / Mats / niais +__ocr_mais__ + Hais + <<- ->> Mais # Erreur de numérisation ? + + mats + <<- not morph(<1, ":D:[me]:p") ->> mais # Erreur de numérisation ? + + maïs + <<- not morph(<1, ":D:(?:m:s|e:p)") ->> mais # Erreur de numérisation ? + + niais + <<- not morph(<1, ">(?:homme|ce|quel|être)/") ->> mais # Erreur de numérisation ? + +TEST: __ocr__ {{Hais}} il en sait trop. +TEST: __ocr__ c’était bien, {{mats}} quelle journée +TEST: __ocr__ c’est bien, {{niais}} trop subtil. +TEST: __ocr__ c’est parfait, {{maïs}} trop subtil. + + +# même / même / mème / mémo / môme +__ocr_même__ + >môme + <<- ->> =\1.replace("ô", "ê").replace("Ô", "Ê") # Erreur de numérisation ? + + >mème + <<- ->> =\1.replace("è", "ê").replace("È", "Ê") # Erreur de numérisation ? + + >mémo + <<- ->> =\1.replace("é", "ê").replace("É", "Ê") # Erreur de numérisation ? + +TEST: __ocr__ J’en ai assez {{môme}} si ça ne se voit pas. +TEST: __ocr__ Ces {{mèmes}} hommes qui nous ont lâchés au pire moment +TEST: __ocr__ C’est l’incessant retour du {{mémo}}. + + +# mot / mol / moi +__ocr_mot__ + [mol|mols] + <<- ->> =\1.replace("l", "t").replace("L", "T")+"|"+\1.replace("l", "i").replace("L", "I") # Erreur de numérisation ? + +TEST: __ocr__ c’est un {{mol}} très dur. + + +# mon / won +__ocr_mon__ + won + <<- ->> mon # Erreur de numérisation ? + +TEST: __ocr__ c’est {{won}} ami + + +# ne / na / no / rie +__ocr_ne__ + [no|na|rie] + <<- ->> ne # Erreur de numérisation ? + +TEST: __ocr__ {{no}} fais rien que tu pourrais regretter +TEST: __ocr__ elle avance, mais {{rie}} prend jamais de risque inconsidéré. + + +# nous / noue / noua +__ocr_nous__ + [noue|noua] + <<- ->> nous # Erreur de numérisation ? + +TEST: __ocr__ {{noue}} attaquer à eux signerait notre perte. + + +# par / paf / pan / pat +__ocr_par__ + [paf|pat] + <<- ->> par # Erreur de numérisation ? + + pan + <<- ->> par|peu # Erreur de numérisation ? + +TEST: __ocr__ Une seule action {{paf}} jour + + +# par le / par la / par les / parle / parla / parles +__ocr_par_le_la_les__ + parle @:[NA].*:[me]:[si] + <<- not value(<1, "|ne|il|on|elle|je|") -1>> par le # Erreur de numérisation ? + + parla @:[NA].*:[fe]:[si] + <<- not value(<1, "|ne|il|on|elle|") -1>> par la # Erreur de numérisation ? + + parles @:[NA].*:[pi] + <<- not value(<1, "|ne|tu|") -1>> par les # Erreur de numérisation ? + +TEST: __ocr__ {{parle}} glaive et le mensonge, l’Église s’imposa. +TEST: __ocr__ {{parla}} force, on peut réussir +TEST: __ocr__ tu fus trompée {{parles}} mensonges permanents de son beau-père. + + +# pendant / pondant +__ocr_pendant__ + pondant + <<- ->> pendant # Erreur de numérisation ? + +TEST: __ocr__ {{pondant}} qu’elle travaille, il se prélasse. + + +# peu / peut / peux / pou +__ocr_peu_peux_peut__ + pou + <<- not morph(<1, ":D.*:m:s") ->> peu # Erreur de numérisation ? + + poux + <<- not morph(<1, ":D.*:m:p") ->> peux|peut|pour # Erreur de numérisation ? + +TEST: __ocr__ il est {{pou}} probable qu’il y parvienne. + + +# plus / pins +__ocr_plus__ + pins + <<- ->> plus # Erreur de numérisation ? + +TEST: __ocr__ ils sont {{pins}} instruits qu’il n’y paraît. + + +# puis / pois +__ocr_puis__ + pois + <<- not morph(<1, ":D.*:m:p") ->> puis # Erreur de numérisation ? + +TEST: __ocr__ elles sont venues, {{pois}} elles sont parties. + + +# pour / pouf +__ocr_pour__ + pouf + <<- not morph(<1, ":D.*:f:s") ->> pour # Erreur de numérisation ? + +TEST: __ocr__ {{pouf}} elle, il était prêt à tout. + + +# près / prés +__ocr_près__ + prés + <<- not morph(<1, ":D.*:[me]:p") ->> près # Erreur de numérisation ? + +TEST: __ocr__ ils sont arrivés {{prés}} de la tombe. + + +# que / quo +__ocr_que__ + qua + <<- not value(<1, "|sine|") ->> que # Erreur de numérisation ? + + quo + <<- not value(<1, "|statu|") ->> que # Erreur de numérisation ? + +TEST: __ocr__ elles ne savent pas {{quo}} faire +TEST: __ocr__ {{Quo}} penser de tout ceci ? +TEST: __ocr__ pour elle, c’est une condition sine qua non. + + +# qu’importe +__ocr_qu_importe__ + qu’ importé + <<- -2>> importe # Erreur de numérisation ? + +TEST: __ocr__ Qu’{{importé}} le flacon, pourvu qu’on ait l’ivresse. + + +# qui / gui +__ocr_qui__ + gui + <<- not morph(<1, ":D.*:m:s") ->> qui # Erreur de numérisation ? + +TEST: __ocr__ avec {{gui}} faire alliance ? + + +# s’il / sil +__ocr_s_il__ + sil + <<- ->> s’il # Erreur de numérisation ? + + sils + <<- ->> s’ils # Erreur de numérisation ? + +TEST: __ocr__ {{sil}} avait su, il n’aurait rien tenté de trop audacieux. + + +# sur / sar +__ocr_sur__ + sar + <<- ->> sur # Erreur de numérisation ? + +TEST: __ocr__ il ne savait rien {{sar}} eux. + + +# tard / lard +__ocr_tard__ + lard + <<- not value(<1, "|le|ce|mon|ton|son|du|un|") ->> tard # Erreur de numérisation ? + +TEST: __ocr__ elles seront là tôt ou {{lard}}. + + +# tandis que / taudis +__ocr_tandis__ + taudis [que|qu’|qu] + <<- -1>> tandis # Erreur de numérisation ? + +TEST: __ocr__ mais {{taudis}} qu’elle œuvrait à leur salut, les nuages s’amoncelaient. + + +# l’est / Test +__ocr_l_est__ + Test + <<- before(r"\w") ->> l’est # Erreur de numérisation ? + +TEST: __ocr__ ça {{Test}} à leurs yeux. + + +# tête / tète +__ocr_tête__ + tète + <<- not value(<1, "|je|il|elle|on|ne|ça|") ->> =\1.replace("è", "ê").replace("È", "Ê") # Erreur de numérisation ? + +TEST: __ocr__ cette forte {{tète}} n’écoute jamais personne. + + +# tin / fin / un +__ocr_fin_un__ + tin + <<- ->> fin|un # Erreur de numérisation ? + +TEST: __ocr__ c’était {{tin}} marchand vaniteux. + + +# ton / tan +__ocr_ton__ + >tan + <<- ->> =\1.replace("a", "o").replace("A", "O") # Erreur de numérisation ? + +TEST: __ocr__ pour {{tan}} propre bien. + + +# toute / tonte +__ocr_toute__ + >tonte + <<- ->> =\1.replace("n", "u").replace("N", "U") # Erreur de numérisation ? + +TEST: __ocr__ à {{tonte}} fin utile + + +# tu es / tues +__ocr_tu_es__ + tues + <<- not morph(<1, ":(?:N.*:f:p|V0e.*:3p)|>(?:tu|ne)/") ->> tu es # Erreur de numérisation ? + +TEST: __ocr__ dans tous les cas, {{tues}} foutue. +TEST: __ocr__ ses actions tues. + + +# un / vin +__ocr_un__ + vin + <<- not value(<1, "|ce|de|du|un|quel|leur|le|") ->> un # Erreur de numérisation ? + +TEST: __ocr__ {{vin}} mathématicien hors du commun. + + +# une / ure / vine +__ocr_une__ + ure + <<- ->> une # Erreur de numérisation ? + + vine + <<- ->> une # Erreur de numérisation ? + +TEST: __ocr__ il avait {{ure}} femme élégante et silencieuse +TEST: __ocr__ c’est pour {{vine}} amie + + +# vous / voua / voue +__ocr_vous__ + [vous|voua] + <<- ->> vous # Erreur de numérisation ? + +TEST: __ocr__ avec {{voue}}, je n’ai pas confiance. + + @@@@ @@@@ @@@@ @@@@ @@ -2649,11 +2773,11 @@ ~^\d+$ [es|ès|ièmes|iemes|èmes|emes] <<- /typo/ ->> \1ᵉˢ # Nombre ordinal pluriel. Exemples : 2ᵉˢ, 3ᵉˢ, 4ᵉˢ…|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4271 ~^\d+(?:è|i?[èe]me)s?$ - <<- /typo/ \0.endswith("s") + <<- /typo/ \1.endswith("s") ->> =\1.replace("mes", "").replace("è", "").replace("e", "").replace("i", "") + "ᵉˢ" # Nombre ordinal pluriel. Exemples : 2ᵉˢ, 3ᵉˢ, 4ᵉˢ…|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4271 <<- /typo/ __else__ ->> =\1.replace("me", "").replace("è", "").replace("e", "").replace("i", "") + "ᵉ" # Nombre ordinal singulier. Exemples : 2ᵉ, 3ᵉ, 4ᵉ…|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4271 TEST: la {{1ière}} fois, c’est la plus dure ->> 1ʳᵉ @@ -2738,11 +2862,11 @@ ~^[IVXLCM]{1,10}$ [es|ès|ièmes|iemes|èmes|emes] <<- /typo/ ->> \1ᵉˢ # Nombre ordinal romain pluriel. Exemples : 2ᵉˢ, 3ᵉˢ, 4ᵉˢ…|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4271 ~^[IVXLCM]{1,10}(?:è|i?[èe]me)s?$ <<- /typo/ not morph(\1, ":G") >>> - <<- \0.endswith("s") + <<- \1.endswith("s") ->> =\1.replace("mes", "").replace("è", "").replace("e", "").replace("i", "") + "ᵉˢ" # Nombre ordinal romain pluriel. Exemples : IIᵉˢ, IIIᵉˢ, IVᵉˢ…|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4271 <<- __else__ ->> =\1.replace("me", "").replace("è", "").replace("e", "").replace("i", "") + "ᵉ" # Nombre ordinal romain singulier. Exemples : IIᵉ, IIIᵉ, IVᵉ…|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4271 TEST: François {{Iier}} ->> Iᵉʳ