Index: gc_lang/fr/rules.grx ================================================================== --- gc_lang/fr/rules.grx +++ gc_lang/fr/rules.grx @@ -427,11 +427,11 @@ # sigles __(p_sigle1)__ ([A-Z][.][A-Z][.](?:[A-Z][.])*) +[A-ZÉÀÂÊÎÈÔ] @@0 <<- ~1>> =\1.replace(".", "")+"." __[s>(p_sigle2)__ [a-zA-Z][.][a-zA-Z][.](?:[a-zA-Z][.])* - <<- not re.search(r"(?i)^(?:i\.e\.|s\.[tv]\.p\.|e\.g\.|a\.k\.a\.|c\.q\.f\.d\.|b\.a\.|n\.b\.)$", \0) >>> + <<- not re.search("(?i)^(?:i\\.e\\.|s\\.[tv]\\.p\\.|e\\.g\\.|a\\.k\\.a\\.|c\\.q\\.f\\.d\\.|b\\.a\\.|n\\.b\\.)$", \0) >>> <<- \0.__len__() == 4 ->> =\0.replace(".", "").upper() + "|" + \0[0:2] + " " + \0[2:4] # Sigle. Il est recommandé d’ôter les points pour les sigles. (S’il s’agit d’un prénom et d’un nom, mettez un espace.)|https://fr.wikipedia.org/wiki/Sigle#Typographie <<- __else__ ->> =\0.replace(".", "").upper() # Sigle. Il est recommandé d’ôter les points pour les sigles.|https://fr.wikipedia.org/wiki/Sigle#Typographie <<- \0 != "b.a." ~>> =\0.replace(".", "_") __[s>(p_sigle3)__ @@ -453,11 +453,11 @@ __[s](p_prénom_lettre_point_patronyme)__ ([A-ZÉÈÂÎ][\w-]+)[  ][A-ZÉÈÂ]([.])[  ]([A-ZÉÈÂ][\w-]+) @@0,$,$ <<- morph(\1, ":M[12]") and (morph(\3, ":(?:M[12]|V)") or not spell(\3)) ~2>> * __[s>(p_prénom_lettre_point)__ ([A-ZÉÈÂÎ][\w-]+)[  ][A-ZÉÈÂ]([.]) @@0,$ - <<- morph(\1, ":M[12]") and after("^\W+[a-zéèêîïâ]") ~2>> _ + <<- morph(\1, ":M[12]") and after("^\\W+[a-zéèêîïâ]") ~2>> _ # Patronymes composés avec Le/La/Les __[s](p_patronyme_composé_avec_le_la_les)__ [A-ZÉÈÂÎ][\w-]+[-–—]L(?:es?|a) [A-ZÉÈÂÎ][\w-]+ <<- ~>> =\0.replace(" ", "_") @@ -664,11 +664,11 @@ TEST: Je suis là. {{viens}}. ->> Viens TEST: Ils sont devenus idiots. {{c}}’est peine perdue. __[s]/maj(majuscule_en_début_phrase)__ ^ *([a-zéèâàô][\w-]+) @@$ - <<- after("\w\w[.] +\w+") -1>> =\1.capitalize() # Majuscule en début de phrase, sauf éventuellement lors d’une énumération. + <<- after("\\w\\w[.] +\\w+") -1>> =\1.capitalize() # Majuscule en début de phrase, sauf éventuellement lors d’une énumération. TEST: {{je}} suis disponible quand tu veux. Mais pas aujourd’hui. !! @@ -723,11 +723,11 @@ TEST: Les chiens, les chats{{.,}} les poules. ->> ,|. # Fin de paragraphe #__/typo__ ({w_2}) *$ @@0 -# <<- before("[a-zéàùèê][.] ") and not before(r"^(?:\d|\w[.])") +# <<- before("[a-zéàùèê][.] ") and not before("^(?:\\d|\w[.])") # -1>> \1.|\1…|\1 !|\1 ?|\1 :|\1 ;|\1, # Il manque une ponctuation finale. !! !! @@ -959,11 +959,11 @@ !! !! __/typo(typo_guillemets_typographiques_doubles_ouvrants)__ "(?=\w) - <<- not before(r"[a-zA-Zéïîùàâäôö]$") ->> « |“ # Guillemets typographiques ouvrants. + <<- not before("[a-zA-Zéïîùàâäôö]$") ->> « |“ # Guillemets typographiques ouvrants. __/typo(typo_guillemets_typographiques_doubles_fermants)__ [\w.?!…,](")(?!\w) @@* <<- -1>> " »|”" # Guillemets typographiques fermants. TEST: {{"}}Le grand homme.” ->> « |“ @@ -1024,29 +1024,29 @@ !! !! __/typo(typo_cohérence_guillemets_chevrons_ouvrants)__ («)[^»“]+?(”) @@0,$ - <<- not before(r"\w$") -1>> “ # Guillemet ouvrant différent du guillemet fermant (”). - <<- not after(r"^\w") -2>> " »" # Guillemet fermant différent du guillemet ouvrant («). + <<- not before("\\w$") -1>> “ # Guillemet ouvrant différent du guillemet fermant (”). + <<- not after("^\\w") -2>> " »" # Guillemet fermant différent du guillemet ouvrant («). __/typo(typo_cohérence_guillemets_chevrons_fermants)__ (“)[^”«]+?(») @@0,$ - <<- not before(r"\w$") -1>> "« " # Guillemet ouvrant différent du guillemet fermant (»). - <<- not after(r"^\w") -2>> ” # Guillemet fermant différent du guillemet ouvrant (“). + <<- not before("\\w$") -1>> "« " # Guillemet ouvrant différent du guillemet fermant (»). + <<- not after("^\\w") -2>> ” # Guillemet fermant différent du guillemet ouvrant (“). TEST: C’est {{«}}stupide{{”}}. TEST: Quel {{“}}emmerdeur{{»}}, ce gars-là. __/typo(typo_cohérence_guillemets_doubles_ouvrants)__ (“)[^”’“«]+?(’)(?!\w) @@0,$ - <<- not before(r"\w$") -1>> "‘" # Guillemet ouvrant différent du guillemet fermant (’). + <<- not before("\\w$") -1>> "‘" # Guillemet ouvrant différent du guillemet fermant (’). <<- -2>> ” # Guillemet fermant différent du guillemet ouvrant (“). __/typo(typo_cohérence_guillemets_doubles_fermants)__ (‘)[^’“«]+?(”) @@0,$ - <<- not before(r"\w$") -1>> "“" # Guillemet ouvrant différent du guillemet fermant (”). - <<- not after(r"^\w") -2>> ’ # Guillemet fermant différent du guillemet ouvrant (‘). + <<- not before("\\w$") -1>> "“" # Guillemet ouvrant différent du guillemet fermant (”). + <<- not after("^\\w") -2>> ’ # Guillemet fermant différent du guillemet ouvrant (‘). TEST: Tu sais, {{‘}}ton ami{{”}} est venu. TEST: Oui, je vois, mais c’est quand même un {{“}}salopard{{’}}. @@ -1061,11 +1061,11 @@ TEST: C’est {{“}}compliqué. __[i]/typo(typo_guillemet_simple_ouvrant_non_fermé)__ (‘)\w\w[^’']+$ @@0 - <<- before(r" $") or isStart() -1>> _ # Guillemet fermant introuvable dans la suite du paragraphe. + <<- before(" $") or isStart() -1>> _ # Guillemet fermant introuvable dans la suite du paragraphe. __[i]/typo(typo_guillemet_simple_fermant_non_ouvert)__ ^[^‘']+\w\w(’) @@$ <<- after("^ ") or isEnd() -1>> _ # Guillemet ouvrant introuvable dans ce paragraphe. TEST: ce {{‘}}test ne finira jamais. @@ -1123,12 +1123,12 @@ __[s]/num(num_grand_nombre_soudé)__ \d\d\d\d+ <<- not before("NF[  -]?(C|E|P|Q|X|Z|EN(?:[  -]ISO|)) *$") >>> <<- \0.__len__() > 4 ->> =formatNumber(\0) # Formatage des grands nombres. <<- __else__ - and after("^(?:,\d+[⁰¹²³⁴⁵⁶⁷⁸⁹]?|[⁰¹²³⁴⁵⁶⁷⁸⁹])") - or after(r"^[   ]*(?:[kcmµn]?(?:[slgJKΩ]|m[²³]?|Wh?|Hz|dB)|[%‰€$£¥Åℓhj]|min|°C|℃)(?![\w’'])") + and after("^(?:,[0-9]+[⁰¹²³⁴⁵⁶⁷⁸⁹]?|[⁰¹²³⁴⁵⁶⁷⁸⁹])") + or after("^[   ]*(?:[kcmµn]?(?:[slgJKΩ]|m[²³]?|Wh?|Hz|dB)|[%‰€$£¥Åℓhj]|min|°C|℃)(?![\\w’'])") ->> =formatNumber(\0) # Formatage des grands nombres. __[s]/num(num_nombre_quatre_chiffres)__ (?> =formatNumber(\1) # Formatage des grands nombres @@ -1168,11 +1168,11 @@ !!!! Dates !! !! !! __[i]/date(date_nombres)__ (?> _ # Cette date est invalide. + <<- not checkDate(\1, \2, \3) and not before("(?i)\\bversions? +$") ->> _ # Cette date est invalide. <<- ~>> =\0.replace(".", "-").replace(" ", "-").replace("\/", "-") TEST: le {{29 02 2011}} TEST: le {{40-02-2011}} TEST: le {{32.03.2018}} @@ -1245,11 +1245,11 @@ ## Casse __[s]/ocr(ocr_casse1)__ [A-ZÉÈÂÊÎÔ]{w_1} - <<- \0.istitle() and before(r"(?i)\w") >>> + <<- \0.istitle() and before("\\w") >>> <<- morph(\0, ":G", ":M") ->> =\0.lower() # Erreur de numérisation ? Casse improbable. <<- __else__ and morph(\0, ":[123][sp]", ":[MNA]|>Est/") ->> =\0.lower() # Erreur de numérisation ? Casse improbable. TEST: __ocr__ votre ami la regarde, {{Vous}} ne l’avez pas achetée TEST: __ocr__ pour accommoder son regard, {{La}} lourde forme demeure @@ -1273,20 +1273,20 @@ TEST: __ocr__ Quelques-{{Uns}} sont incapables d’y parvenir. __[s>/ocr(ocr_casse3)__ [LDNMTSCÇ]’ - <<- before(r"(?i)\w") ->> =\0.lower() # Erreur de numérisation ? Casse douteuse. + <<- before("\\w") ->> =\0.lower() # Erreur de numérisation ? Casse douteuse. TEST: __ocr__ regarde dans l’obscurité de {{L’}}entrepôt ## Lettres isolées # Note: l’option “mapos” cherche les apostrophes manquantes après les lettres l, d, n, m, t, s, j, c, ç __[s]/ocr(ocr_lettres_isolées)!2__ \w(?!’) - <<- not re.search("[0-9aàAÀyYdlnmtsjcçDLNMTSJCÇ_]", \0) and not before(r"\d[   ]+$") and not (\0.isupper() and after0(r"^\.")) + <<- not re.search("[0-9aàAÀyYdlnmtsjcçDLNMTSJCÇ_]", \0) and not before("\\d[   ]+$") and not (\0.isupper() and after0(r"^\.")) ->> _ # Lettre isolée : erreur de numérisation ? TEST: __ocr__ des verres luisent sur {{i}} le bureau blanc. TEST: __ocr__ la voix, {{e}} est celle de… TEST: __ocr__ ressemble {{h}} une fenêtre de serre. @@ -2344,11 +2344,11 @@ __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 ? + <<- before("\\w") and not morph(\2, ":Y") ->> l’\2|L’\2|j’\2|J’\2 # Erreur de numérisation ? ~^[Ii]’[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] @@ -2359,16 +2359,16 @@ # l’ / V / P __ocr_l__ ~^V. - <<- \1.istitle() and before(r"\w") and morph(\1, ":", ":M") >>> + <<- \1.istitle() and before("\\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 ? + <<- before("\\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. @@ -2627,11 +2627,11 @@ # l’est / Test __ocr_l_est__ Test - <<- before(r"\w") ->> l’est # Erreur de numérisation ? + <<- before("\\w") ->> l’est # Erreur de numérisation ? TEST: __ocr__ ça {{Test}} à leurs yeux. # tête / tète @@ -2965,15 +2965,15 @@ TEST: {{29 février 2011}} __date_journée_jour_mois_année__ ([lundi|mardi|mercredi|jeudi|vendredi|samedi|dimanche]) ?,¿ ?le¿ (~^\d\d?$) - (~^\d\d?$) - (~^\d{2,5}$) - <<- /date/ not after(r"^ +av(?:ant|) +J(?:C|ésus-Christ)") and not checkDay(\1, \2, \3, \4) + <<- /date/ not after("^ +av(?:ant|) +J(?:C|ésus-Christ)") and not checkDay(\1, \2, \3, \4) -1>> =getDay(\2, \3, \4) # Le jour de la date suivante est incorrect. ([lundi|mardi|mercredi|jeudi|vendredi|samedi|dimanche]) ?,¿ ?le¿ (~^\d\d?$) ([janvier|février|mars|avril|mai|juin|juillet|aout|août|septembre|octobre|novembre|décembre]) (~^\d{2,5}$) - <<- /date/ not after(r"^ +av(?:ant|) +J(?:C|ésus-Christ)") and not checkDayWithString(\1, \2, \3, \4) + <<- /date/ not after("^ +av(?:ant|) +J(?:C|ésus-Christ)") and not checkDayWithString(\1, \2, \3, \4) -1>> =getDayWithString(\2, \3, \4) # Le jour de la date suivante est incorrect. TEST: {{samedi}}, le 10-06-2014 ->> mardi TEST: {{mercredi}}, le 10 juin 2014 ->> mardi TEST: {{lundi}}, 18 août 1912 ->> dimanche @@ -3870,15 +3870,15 @@ #__[i]/bs__ (tomb\w+) dans les pommes <<- ->> \1 dans les pâmes # « Tomber dans les pâmes » est l’ancienne tournure. __bs_malgré_que__ malgré que - <<- /bs/ not after(r" en (?:a|aie|aies|ait|eut|eût|aura|aurait|avait)\b") + <<- /bs/ not after(" en (?:a|aie|aies|ait|eut|eût|aura|aurait|avait)\\b") ->> bien que|quoique # “Malgré que” est une tournure populaire. Utilisez “bien que” ou “quoique”. malgré qu’ - <<- /bs/ not after(r" en (?:a|aie|aies|ait|eut|eût|aura|aurait|avait)\b") + <<- /bs/ not after(" en (?:a|aie|aies|ait|eut|eût|aura|aurait|avait)\\b") ->> bien qu’|quoiqu’ # “Malgré que” est une tournure populaire. Utilisez “bien que” ou “quoique”. TEST: {{Malgré que}} je sois fou. @@ -4569,11 +4569,11 @@ [lui|leur] en (~ai$) <<- /conj/ not value(>1, "|je|") and morph(\1, ":1s", ":(?:E|G|W|M|J|3[sp])") and not tag_before(\1, "1s") -1>> =suggVerb(\1, ":3s") # Incohérence. Ceci est un verbe à la 1ʳᵉ personne du singulier. Sujet (“je” ou “moi qui”) introuvable. ~ai$ - <<- /conj/ not value(>1, "|je|") and morph(\1, ":1s", ":(?:E|G|W|M|J|3[sp]|N|A|Q)") and not (\1.istitle() and before0(r"\w")) and not tag_before(\1, "1s") + <<- /conj/ not value(>1, "|je|") and morph(\1, ":1s", ":(?:E|G|W|M|J|3[sp]|N|A|Q)") and not (\1.istitle() and before0("\\w")) and not tag_before(\1, "1s") -1>> =suggVerb(\1, ":3s") # Incohérence. Ceci est un verbe à la 1ʳᵉ personne du singulier. Sujet (“je” ou “moi qui”) introuvable. __conj_xxxas_xxxes__sans_sujet!3__ [se|s’] ?[en|y|le|la|l’|les]¿ (~[ae]s$) @@ -4589,11 +4589,11 @@ [lui|leur] en (~[ae]s$) <<- /conj/ not value(>1, "|tu|") and morph(\1, ":2s", ":(?:E|G|W|M|J|3[sp]|1p)") and not tag_before(\1, "2s") -1>> =suggVerb(\1, ":3s") # Incohérence. Ceci est un verbe à la 2ᵉ personne du singulier. Sujet (“tu” ou “toi qui”) introuvable. ~[ae]s$ - <<- /conj/ not value(>1, "|tu|") and morph(\1, ":2s", ":(?:E|G|W|M|J|3[sp]|N|A|Q|1p)") and not (\1.istitle() and before0(r"\w")) and not tag_before(\1, "2s") + <<- /conj/ not value(>1, "|tu|") and morph(\1, ":2s", ":(?:E|G|W|M|J|3[sp]|N|A|Q|1p)") and not (\1.istitle() and before0("\\w")) and not tag_before(\1, "2s") -1>> =suggVerb(\1, ":3s") # Incohérence. Ceci est un verbe à la 2ᵉ personne du singulier. Sujet (“tu” ou “toi qui”) introuvable. __conj_xxxxxs_sans_sujet!3__ [se|s’] ?[en|y|le|la|l’|les]¿ (~[iudnrtpcï]s$) @@ -4611,16 +4611,16 @@ <<- /conj/ not value(>1, "|je|tu|") and morph(\1, ":[12]s", ":(?:E|G|W|M|J|3[sp]|2p|1p)") and not tag_before(\1, "1s") and not tag_before(\1, "2s") -1>> =suggVerb(\1, ":3s") # Incohérence. Le sujet de cette forme verbale est introuvable. étais - <<- /conj/ not value(>1, "|je|tu|") and not (\1.istitle() and before0(r"\w")) and not morph(<1, ":[DA].*:p") + <<- /conj/ not value(>1, "|je|tu|") and not (\1.istitle() and before0("\\w")) and not morph(<1, ":[DA].*:p") and not tag_before(\1, "1s") and not tag_before(\1, "2s") -1>> =suggVerb(\1, ":3s") # Incohérence. Le sujet de cette forme verbale est introuvable. ~[iudnrtpcï]s$ - <<- /conj/ not value(>1, "|je|tu|") and morph(\1, ":[12]s", ":(?:E|G|W|M|J|3[sp]|2p|1p|V0e|N|A|Q)") and not (\1.istitle() and before0(r"\w")) + <<- /conj/ not value(>1, "|je|tu|") and morph(\1, ":[12]s", ":(?:E|G|W|M|J|3[sp]|2p|1p|V0e|N|A|Q)") and not (\1.istitle() and before0("\\w")) and not tag_before(\1, "1s") and not tag_before(\1, "2s") -1>> =suggVerb(\1, ":3s") # Incohérence. Le sujet de cette forme verbale est introuvable. __conj_peux_veux_vaux_équivaux_prévaux_sans_sujet!3__ @@ -4636,16 +4636,16 @@ [lui|leur] en ([peux|veux|vaux|équivaux|prévaux]) <<- /conj/ not value(>1, "|je|tu|") and not tag_before(\1, "1s") and not tag_before(\1, "2s") -1>> =suggVerb(\1, ":3s") # Incohérence. Le sujet de cette forme verbale est introuvable. vaux - <<- /conj/ not value(>1, "|je|tu|") and not (\1.istitle() and before0(r"\w")) and not tag_before(\1, "1s") and not tag_before(\1, "2s") + <<- /conj/ not value(>1, "|je|tu|") and not (\1.istitle() and before0("\\w")) and not tag_before(\1, "1s") and not tag_before(\1, "2s") and not morph(<1, ":(?:R|D.*:p)") -1>> =suggVerb(\1, ":3s") # Incohérence. Le sujet de cette forme verbale est introuvable. [peux|veux|équivaux|prévaux] - <<- /conj/ not value(>1, "|je|tu|") and not (\1.istitle() and before0(r"\w")) and not tag_before(\1, "1s") and not tag_before(\1, "2s") + <<- /conj/ not value(>1, "|je|tu|") and not (\1.istitle() and before0("\\w")) and not tag_before(\1, "1s") and not tag_before(\1, "2s") -1>> =suggVerb(\1, ":3s") # Incohérence. Le sujet de cette forme verbale est introuvable. TEST: Caroline, quand l’heure viendra, {{décideras}} de la conduite à tenir. TEST: ceux-là, dans tous les cas de figure et dans tous les coups ratés, {{comprenais}} mal pourquoi on leur en voulait. @@ -4660,16 +4660,16 @@ ## Incohérences avec formes verbales 1pl et 2pl sans sujet __conj_xxxons_sans_sujet!3__ @:1p¬:[EGMNAJ] - <<- /conj/ not value(>1, "|nous|") and not (\1.istitle() and before0(r"\w")) and not tag_before(\1, "1p") + <<- /conj/ not value(>1, "|nous|") and not (\1.istitle() and before0("\\w")) and not tag_before(\1, "1p") -1>> =suggVerb(\1, ":3p") # Ceci est un verbe à la 1ʳᵉ personne du pluriel. Sujet (“nous” ou équivalent) introuvable. __conj_xxxez_sans_sujet!3__ @:2p¬:[EGMNAJ] - <<- /conj/ not value(>1, "|vous|") and not (\1.istitle() and before0(r"\w")) and not tag_before(\2, "2p") + <<- /conj/ not value(>1, "|vous|") and not (\1.istitle() and before0("\\w")) and not tag_before(\2, "2p") -1>> =suggVerb(\1, ":3p") # Ceci est un verbe à la 2ᵉ personne du pluriel. Sujet (“vous” ou équivalent) introuvable. TEST: les hommes et les femmes, qui sans un bruit, sans une parole amère, {{continuerons}} leur tâche n’en seront pas plus récompensés. TEST: il était dit que cette femme et son frère {{promènerez}} leur chien à cette heure de la journée. TEST: cet homme et cette femme {{pouvez}} y parvenir avec de la persévérance @@ -4744,11 +4744,11 @@ [|,] [ton|son|audit] @:(?:Y|[123][sp])¬:[NAQ] <<- /conf/ \3.islower() -3>> =suggSimil(\3, ":[NA]:[me]:[si]", True) # Incohérence avec « \2 » : « \3 » est un verbe. un @:(?:Y|[123][sp])¬:[GNA] - <<- /conf/ not value(<1, "|dont|l’|d’|sauf|") and not before(r"(?i)\bun à +$") + <<- /conf/ not value(<1, "|dont|l’|d’|sauf|") and not before("(?i)\\bun à +$") -2>> =suggSimil(\2, ":[NAQ]:[me]:[si]", True) # Incohérence avec “\1” : “\2” est une forme verbale conjuguée. TEST: un {{maintient}} difficile. TEST: quelqu’un arrive. TEST: cet {{plaît}} est infectée. @@ -5113,11 +5113,11 @@ __conf_à_a_infinitif__ a @:Y¬:G a [ne|n’|me|m’|te|t’|se|s’|en|y|lui|nous|vous] @:Y a [n’|m’|t’|s’|l’|les|lui|nous|vous|leur] [en|y] @:Y a [le|la|l’|les|leur] @:Y¬:N - <<- /conf/ not value(<1, "|il|elle|on|n’|m’|t’|") and not before(r"(?i)\bqu[e’] |n’(?:en|y) +$") + <<- /conf/ not value(<1, "|il|elle|on|n’|m’|t’|") and not before("(?i)\\bqu[e’] |n’(?:en|y) +$") -1>> à # Confusion probable : “a” est la conjugaison du verbe “avoir”. Utilisez la préposition “à”.|http://fr.wiktionary.org/wiki/%C3%A0 TEST: scrupuleux {{a}} n’en toucher qu’une part infime. TEST: Ne pas hésiter {{a}} {{demander}} des conseils. TEST: Sébastien {{a}} {{demander}} des conseils. @@ -5417,21 +5417,21 @@ a vol d’ oiseau a vrai dire a vue d’ œil a y [réfléchir|songer|penser] a y regarder de plus près - <<- /conf/ not before(r"(?i)[ln]’$|(?> à # Confusion probable : “a” est une forme conjugée de “avoir”. Pour la préposition, écrivez “à”.|http://fr.wiktionary.org/wiki/%C3%A0 a [mon|ton|son|notre|votre|leur] [cœur|corps] défendant a [mon|ton|son|notre|votre|leur] grand désarroi a [mon|ton|son|notre|votre|leur] [avis|côté|détriment|encontre|égard|insu|sujet|tour] a [ma|ta|sa|notre|votre|leur] grande [surprise|tristesse] a [ma|ta|sa|notre|votre|leur] [connaissance|disposition|guise|portée] a [mes|tes|ses|nos|vos|leurs] [dépens|côtés] a [mes|tes|ses|nos|vos|leurs] risques et périls - <<- /conf/ not before(r"(?i)(?:\bqu[e’] |[ln]’$|(?> à # Confusion probable : “a” est la conjugaison du verbe “avoir”. Utilisez la préposition “à”.|http://fr.wiktionary.org/wiki/%C3%A0 TEST: Puisqu’on nous méprise, autant y aller {{a}} reculons. TEST: Les parties {{a}} nouveau divisées ne se réuniront pas avant longtemps. TEST: ils viennent nous attaquer {{a}} tout bout de champ @@ -5677,11 +5677,11 @@ sa [n’|m’|t’|s’|j’|l’|d’|qu’|lorsqu’|puisqu’|quoiqu’] <<- /conf/ -1>> ça # Confusion : “sa” (sa maison, sa passion) ≠ “ça” (ça vient, ça heurte). çà - <<- /conf/ not before(r"\b(?:[oO]h|[aA]h) +$") and not after("^ +et là") + <<- /conf/ not value(<1, "|oh|ah|") and not after("^ +et là") ->> ça # Confusion : « çà » ne s’emploie plus guère que dans l’expression « çà et là ». ça et là <<- /conf/ not morph(<1, ":R") ->> çà et là # Confusion : « ça » équivaut à « cela ». Dans l’expression « çà et là », « çà » équivaut à « ici ». @@ -6622,11 +6622,11 @@ [très|trop|de|quelque|pour|à] [peux|peut] <<- /conf/ -2>> peu # Confusion : « \2 » est une conjugaison de “pouvoir”, utilisez “peu” pour dire “pas beaucoup”. un [peux|peut] - <<- /conf/ not before("(?i)(?:(?:quelqu|l|d)’|sauf +)") -2>> peu # Confusion : « \2 » est une conjugaison de “pouvoir”, utilisez “peu” pour dire “pas beaucoup”. + <<- /conf/ not value(<1, "|quelqu’|l’|d’|sauf|") -2>> peu # Confusion : « \2 » est une conjugaison de “pouvoir”, utilisez “peu” pour dire “pas beaucoup”. [il|on] ?[ne|n’]¿ peu <<- /conf/ --1>> peut # Confusion : « peu » signifie « pas beaucoup ». [je|tu] ?[ne|n’]¿ peu @@ -6707,14 +6707,15 @@ très [>prêt|>pré] <<- /conf/ -2>> près # Confusion probable. Être prêt(e) à faire quelque chose. Être près de quelque chose. Le pré est un champ d’herbes. près à @:Y|>(?:tout|les?|la)/ - <<- /conf/ not before(r"(?i)\b(?:peu|de|au plus) $") -1>> prêt|p # Confusion probable. Être près de (faire) quelque chose. Prêt à faire quelque chose. + <<- /conf/ not value(<1, "|peu|de|") and not before("(?i)\\bau plus $") + -1>> prêt|prêts # Confusion probable. Être près de (faire) quelque chose. Prêt à faire quelque chose. >prêt [de|d’] [toi|vous|lui|elle|eux|elles|@:M] - <<- /conf/ not before(r"(?i)\b(obten|obt[iî])") -1>> près # Confusion probable. Être près de (faire) quelque chose. Prêt à faire quelque chose. + <<- /conf/ not before("(?i)\\b(obten|obt[iî])") -1>> près # Confusion probable. Être près de (faire) quelque chose. Prêt à faire quelque chose. >prêt [de|d’] la [lui|leur|@:Y] <<- /conf/ \3.islower() -1>> près # Confusion probable. Être près de (faire) quelque chose. Prêt à faire quelque chose. >prêt [de|d’] [le|l’|les|me|m’|te|t’|se|s’|ne|n’|en|y|@:Y] @@ -7051,19 +7052,19 @@ [|,] sont @:[NA].*:[me]:s|>[aeéiîou].*/:[NA].*:f:s¬:[GW] <<- /conf/ -2>> son # Confusion probable : “sont” est le verbe “être” à la 3ᵉ personne du pluriel. Pour le déterminant, écrivez “son”. sont @:[NA].*:[me]:s|>[aeéiîou].*/:[NA].*:f:s¬:[GW] - <<- /conf/ morph(<1, ":V", ":[NA].*:[pi]|>(?:ils|elles|vous|nous|leur|lui|[nmts]e)/") and not before(r"(?i)\bce qu[e’] |[mts]’en +$") + <<- /conf/ morph(<1, ":V", ":[NA].*:[pi]|>(?:ils|elles|vous|nous|leur|lui|[nmts]e)/") and not before("(?i)\\bce qu[e’] |[mts]’en +$") -1>> son # Confusion probable : “sont” est le verbe “être” à la 3ᵉ personne du pluriel. Pour le déterminant, écrivez “son”. [à|chez|dès|par] sont [avec|contre|devant|derrière|pour|sans|sur] sont @:[NA].*:[me]:s|>[aeéiîou].*/:[NA].*:f:s¬:[GW] <<- /conf/ -2>> son # Confusion probable : “sont” est le verbe “être” à la 3ᵉ personne du pluriel. Pour le déterminant, écrivez “son”. en sont @:[NA].*:[me]:s|>[aeéiîou].*/:[NA].*:f:s¬:[GW] - <<- /conf/ not before(r"(?i)\b(?:ce qu[e’] |ils|elles|leur|lui|nous|vous|[mtsl]’)$") + <<- /conf/ not value(<1, "|ils|elles|leur|lui|nous|vous|m’|t’|s’|l’|") and not before("(?i)\\bce qu[e’] $") -2>> son # Confusion probable : “sont” est le verbe “être” à la 3ᵉ personne du pluriel. Pour le déterminant, écrivez “son”. TEST: ne leur {{son}} pas odieux. TEST: Ces chiens me {{son}} odieux. TEST: {{sont}} {{pain}} @@ -7263,11 +7264,11 @@ voir [grand|petit|rouge] <<- %2>> voir @:A¬:[NGM] <<- /conf/ not \2.istitle() and not morph(<1, ":O[os]|>(?:[ndmts]e|falloir|pouvoir|savoir|de)/") - and not before(r"(?i)\b[ndmts](?:e |’(?:en |y ))(?:pas |jamais |) *$") + and not before("(?i)\\b[ndmts](?:e |’(?:en |y ))(?:pas |jamais |) *$") -1>> voir # Confusion probable : “voir” est un verbe concernant la perception visuelle. Pour signifier “et même possiblement”, écrivez :|https://fr.wiktionary.org/wiki/voire [comme|lorque|puisque|quand|que|quoique|si] (voire) [ni|et|par|pour|sans] (voire) [>aller|>falloir|>pouvoir|>vouloir] ?[guère|jamais|pas|plus|point|rien]¿ (voire) @@ -9362,11 +9363,11 @@ haut et fort <<- not morph(<1, ":D") ~>> * hélas - <<- not morph(<1, ":(?:X|Oo)") and not before(r"(?i)\bt(?:u|oi qui)[ ,]") ~>> * + <<- not morph(<1, ":(?:X|Oo)") and not tag_before(\1, "2s") ~>> * nécessité fait loi <<- not morph(<1, ":D.*:f:[si]") ~>> * nombre [de|des] @@ -9677,11 +9678,11 @@ [Mr|Mlle|Mme|Mgr|miss] ~^[A-ZÉÈÊ] <<- ~2>> * @:Cs ~^[A-ZÉÈÊ] et [moi|toi|lui|elle|nous|vous|eux|elles] - <<- morph(\2, ":M") and not before(r"\b(?:plus|moins|aussi) .* que +$") + <<- morph(\2, ":M") and not before("\\b(?:plus|moins|aussi) .* que +$") ~2:4>> =rewriteSubject(\2,\4) + "||" ~^[A-ZÉÈÊ] et [moi|toi|lui|elle|nous|vous|eux|elles] <<- morph(\2, ":M") ~2:0>> =rewriteSubject(\2,\4) + "||" @@ -10012,11 +10013,11 @@ __purge_tous_deux_trois__ >faire tous [deux|trois] <<- ~2:0>> * >faire tous - <<- morph(\1, ":[123]p") or (\1 == "fait" and before(r"(?i)\bon ")) ~2>> * + <<- morph(\1, ":[123]p") or (\1 == "fait" and value(<1, "|on|")) ~2>> * @@@@ @@@@ @@ -10950,11 +10951,11 @@ __gn_det_plur_3m__ [ces|mes|tes|ses|nos|vos|leurs|quels|quelles|aux] *WORD *WORD *WORD [plusieurs|quelques|certains|certaines|moult] *WORD *WORD *WORD [lesdits|lesdites|desdits|desdites|auxdits|auxdites] *WORD *WORD *WORD - <<- /gn/ morph(\2, ":[NA].*:[pi]") and morph(\3, ":[NA].*:[pi]", ":(?:[123][sp]|G)") and morph(\4, ":[NA].*:s", "*") and not before(r"(?i)\bune? de +$") + <<- /gn/ morph(\2, ":[NA].*:[pi]") and morph(\3, ":[NA].*:[pi]", ":(?:[123][sp]|G)") and morph(\4, ":[NA].*:s", "*") and not before("(?i)\\bune? de +$") -4>> =suggPlur(\4) # Accord de nombre erroné avec « \1 \2 \3 » : « \4 » devrait être au pluriel. TEST: ces petites sottes {{déjantée}} @@ -11730,11 +11731,11 @@ __sgpl_pied__ [>avoir|>perdre] pieds <<- /sgpl/ -2>> pied # Locution “\1 pied” : écrivez “pied” au singulier. à pieds - <<- /sgpl/ not before(r"(?i)\b(?:lit|fauteuil|armoire|commode|guéridon|tabouret|chaise)s?\b") and not morph(>1, ">sculpter/") + <<- /sgpl/ not before("(?i)\\b(?:lit|fauteuil|armoire|commode|guéridon|tabouret|chaise)s?\\b") and not morph(>1, ">sculpter/") -2>> pied # Location “à pied” : écrivez “pied” au singulier.|https://fr.wiktionary.org/wiki/%C3%A0_pied [à|aux] >pied >levée <<- /sgpl/ ->> au pied levé # Locution adverbiale invariable. @@ -13141,11 +13142,11 @@ [de|d’] ?[ne|n’]¿ [lui|leur] en @:V¬:Y <<- /infi/ --1>> =suggVerbInfi(\-1) # Après “de”, le verbe devrait être à l’infinitif. [de|d’] @:V1.*:Q¬:N <<- /infi/ not \2[0:1].isupper() - and not before(r"(?i)\b(?:quelqu(?:e chose|’une?)|(?:l(es?|a)|nous|vous|me|te|se) trait|personne|point +$|rien(?: +[a-zéèêâîûù]+|) +$)") + and not before("(?i)\\b(?:quelqu(?:e chose|’une?)|(?:l(es?|a)|nous|vous|me|te|se) trait|personne|point +$|rien(?: +[a-zéèêâîûù]+|) +$)") -2>> =suggVerbInfi(\2) # Le verbe devrait être à l’infinitif. TEST: d’en {{parlé}} sans cesse TEST: cela suffit de les {{aimait}} TEST: de ne leur en {{avancé}} que le nécessaire. @@ -13546,13 +13547,13 @@ # Participes passés __ocr_être_participe_passé__ >être ~es?$ <<- /ocr/ not value(\1, "|êtres|") >>> - <<- /ocr/ \2.endswith("e") and morph(\2, ":V1.*:Ip.*:[13]s", ":[GMA]") and not before(r"(?i)\belle +(?:ne +|n’|)$") + <<- /ocr/ \2.endswith("e") and morph(\2, ":V1.*:Ip.*:[13]s", ":[GMA]") and not before("(?i)\\belle +(?:ne +|n’|)$") -2>> =suggVerbPpas(\2, ":m:s") # Erreur de numérisation ? - <<- /ocr/ __else__ and \2.endswith("s") and morph(\2, ":V1.*:Ip.*:2s", ":[GMA]") and not before(r"(?i)\belles +(?:ne +|n’|)$") + <<- /ocr/ __else__ and \2.endswith("s") and morph(\2, ":V1.*:Ip.*:2s", ":[GMA]") and not before("(?i)\\belles +(?:ne +|n’|)$") -2>> =suggVerbPpas(\2, ":m:p") # Erreur de numérisation ? __ocr_avoir_participe_passé__ >avoir ~es?$ <<- /ocr/ not value(\1, "|avoirs|") >>> @@ -13708,11 +13709,11 @@ TEST: fait pourtant avéré et corroboré par le même sondage. TEST: ce fait rapporté par des témoins au-delà de tout soupçon n’est pas contestable. #__[i]/infi(infi_faire)__ # (f(?:ai|[iî]|er|on)\w+) +({w_2}(?:ée?s?|ez)) @@0,$ -# <<- morph(\1, ">faire/") and not before(r"(?i)\b(?:en|[mtsldc]es?|[nv]ous|un) +$") and morph(\2, ":V", ":M") +# <<- morph(\1, ">faire/") and not before("(?i)\\b(?:en|[mtsldc]es?|[nv]ous|un) +$") and morph(\2, ":V", ":M") # and not (re.search("(?i)^fait$", \1) and \2.endswith("é")) # and not (re.search("(?i)^faits$", \1) and \2.endswith("és")) # -2>> =suggVerbInfi(@) # Le verbe devrait être à l’infinitif. @@ -13889,17 +13890,17 @@ __ppas_se_être__ [me|m’|te|se|s’] ?[y|en]¿ (>être) (*WORD) t’ [y|en] (>être) (*WORD) <<- /ppas/ morph(\2, ":(?:Y|[123][sp])", ":Q") -2>> =suggVerbPpas(\2) # Incohérence. Après « s’être », le verbe doit être un participe passé. - <<- /ppas/ __else__ and morph(\1, ":[123]s") and morph(\2, ":Q.*:p") and not before(r"(?i)\bqu[e’][, ]|\bon (?:ne |)$") + <<- /ppas/ __else__ and morph(\1, ":[123]s") and morph(\2, ":Q.*:p") and not before("(?i)\\bqu[e’][, ]|\\bon (?:ne |)$") -2>> =suggSing(\2) # Le participe passé devrait être au singulier. t’ >être *WORD <<- /ppas/ not value(\2, "|es|étais|") >>> <<- /ppas/ morph(\3, ":(?:Y|[123][sp])", ":Q") -3>> =suggVerbPpas(\3) # Incohérence. Après « s’être », le verbe doit être un participe passé. - <<- /ppas/ __else__ and morph(\2, ":[123]s") and morph(\3, ":Q.*:p") and not before(r"(?i)\bqu[e’][, ]|\bon (?:ne |)$") + <<- /ppas/ __else__ and morph(\2, ":[123]s") and morph(\3, ":Q.*:p") and not before("(?i)\\bqu[e’][, ]|\\bon (?:ne |)$") -3>> =suggSing(\3) # Le participe passé devrait être au singulier. TEST: s’être {{donner}} le mot. TEST: je me suis {{donnés}} à fond TEST: c’est de ce qui s’est {{passe}}. @@ -14857,11 +14858,11 @@ TEST: Ils ne me l’ont pas {{donnés}} __ppas_m_t_avoir__ [m’|t’] >avoir @:V[0-3]..t_.*:Q.*:p¬:[GWsi] - <<- /ppas/ not before(r"\bqu[e’]") -3>> =suggSing(\3) + <<- /ppas/ not before("(?i)\\bqu(?:e |’)") -3>> =suggSing(\3) # Accord avec “\1”. S’il s’agit d’un COD, le participe passé “\3” devrait être au singulier (et accordé en genre).|http://fr.wikipedia.org/wiki/Accord_du_participe_pass%C3%A9_en_fran%C3%A7ais TEST: ces livres m’avaient {{ennuyés}} au-delà du dicible. TEST: Les élèves m’ont {{écoutés}}. TEST: Les élèves t’ont de temps en temps {{écoutées}}. @@ -15010,11 +15011,11 @@ !! __ppas_avoir_pronom__ *WORD /VCint *WORD <<- /ppas/ morphVC(\2, ":V0a") and morph(\3, ":(?:Y|2p|Q.*:[fp])", ":m:[si]") and \3 != "prise" - and not morph(\1, ">(?:les|[nv]ous|en)|:[NA].*:[fp]") and not before(r"(?i)\b(?:quel(?:le|)s?|combien) ") + and not morph(\1, ">(?:les|[nv]ous|en)|:[NA].*:[fp]") and not before("(?i)\\b(?:quel(?:le|)s?|combien) ") -3>> =suggMasSing(\3) # Avec “avoir”, il faut un participe passé au masculin singulier, sauf si un COD précède. ?n’¿ (/VCint) *WORD <<- /ppas/ morphVC(\1, ":V0a") and morph(\-1, ":(?:Y|2p|Q.*:[fp])", ":m:[si]") and \-1 != "prise" --1>> =suggMasSing(\-1) # Avec “avoir”, il faut un participe passé au masculin singulier, sauf si un COD précède. @@ -15081,11 +15082,11 @@ [ne|n’] [le|l’] [lui|leur|en|y] soit [ne|n’] [lui|leur] en soit <<- /imp/ --1>> sois # S’il s’agit d’un impératif, écrivez “sois”. soit @:A¬:G - <<- /imp/ not after(r"\bsoit\b") -2>> sois # S’il s’agit d’un impératif, écrivez “sois”. + <<- /imp/ not after(" soit ") -2>> sois # S’il s’agit d’un impératif, écrivez “sois”. TEST: ne lui {{soit}} pas odieux. TEST: {{Soit}} cohérent avec toi-même. TEST: Ne {{soit}} pas con. TEST: ne leur en {{soit}} pas reconnaissant, ce n’était qu’un calcul de leur part. @@ -16368,18 +16369,18 @@ __conj_det_plur_nom__ [ces|mes|tes|ses|nos|vos|leurs|quelques] @:[NA].*:[pi] @:V¬:(?:[13]p|P|Y|G|A.*:e:[pi]) <<- /conj/ morph(<1, ":C||>,") - and not( morph(\3, ":3s") and before(r"(?i)\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") ) >>> + and not( morph(\3, ":3s") and before("(?i)\\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") ) >>> <<- /conj/ not checkAgreement(\2, \3) -3>> =suggVerb(\3, ":3p") # Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du pluriel. <<- /conj/ __else__ and isAmbiguousAndWrong(\2, \3, ":p", ":3p") -3>> =suggVerb(\3, ":3p", suggPlur) # Accord avec « \1 \2… » incorrect. Conjugaison erronée ou accord nom/adjectif incorrect. [ces|mes|tes|ses|nos|vos|leurs|quelques] @:[NA].*:[pi] qui @:V¬:(?:[13]p|P|Y|G|A.*:e:[pi]) <<- /conj/ morph(<1, ":C||>,") - and not( morph(\4, ":3s") and before(r"(?i)\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") ) + and not( morph(\4, ":3s") and before("(?i)\\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") ) -4>> =suggVerb(\4, ":3p") # Conjugaison erronée. Accord avec “\1 \2 \3…”. Le verbe devrait être à la 3ᵉ personne du pluriel. TEST: Ses « chiens » {{coure}} sur ma pelouse. TEST: mes filles {{passe}} ce matin TEST: vos filles {{passes}} ce matin @@ -16389,35 +16390,35 @@ __conj_det_plur_nom_confusion__ les @:[NA].*:[pi] @:V¬:(?:3p|P|Y|G|A.*:e:[pi]) <<- /conj/ morph(<1, ":C||>,") - and not( morph(\3, ":3s") and before(r"(?i)\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") ) >>> + and not( morph(\3, ":3s") and before("(?i)\\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") ) >>> <<- /conj/ not checkAgreement(\2, \3) -3>> =suggVerb(\3, ":3p") # Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du pluriel. <<- /conj/ __else__ and isVeryAmbiguousAndWrong(\2, \3, ":p", ":3p", value(<1, "||,|")) -3>> =suggVerb(\3, ":3p", suggPlur) # Accord avec “\1 \2…” incorrect. Conjugaison erronée ou accord nom/adjectif incorrect. [certains|certaines] @:[NA].*:[pi] @:V¬:(?:3p|P|Y|G|A.*:e:[pi]) <<- /conj/ morph(<1, ":C||>,") - and not( morph(\3, ":3s") and before(r"(?i)\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") ) >>> + and not( morph(\3, ":3s") and before("(?i)\\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") ) >>> <<- /conj/ not checkAgreement(\2, \3) -3>> =suggVerb(\3, ":3p") # Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du pluriel. <<- /conj/ __else__ and isVeryAmbiguousAndWrong(\2, \3, ":m:p", ":3p", value(<1, "||,|")) -3>> =suggVerb(\3, ":3p", suggMasPlur) # Accord avec “\1 \2…” incorrect. Conjugaison erronée ou accord nom/adjectif incorrect. <<- /conj/ __else__ and isVeryAmbiguousAndWrong(\2, \3, ":f:p", ":3p", value(<1, "||,|")) -3>> =suggVerb(\3, ":3p", suggFemPlur) # Accord avec “\1 \2…” incorrect. Conjugaison erronée ou accord nom/adjectif incorrect. plusieurs @:[NA].*:[pi] @:V¬:(?:3p|P|Y|G|A.*:e:[pi]) <<- /conj/ morph(<1, ":C||>,") - and not( morph(\3, ":3s") and before(r"(?i)\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") ) + and not( morph(\3, ":3s") and before("(?i)\\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") ) and not checkAgreement(\2, \3) -3>> =suggVerb(\3, ":3p") # Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du pluriel. [les|certains|certaines|plusieurs] @:[NA].*:[pi] qui @:V¬:(?:[13]p|P|Y|G) <<- /conj/ morph(<1, ":C||>,") - and not( morph(\4, ":3s") and before(r"(?i)\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") ) + and not( morph(\4, ":3s") and before("(?i)\\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") ) -4>> =suggVerb(\4, ":3p") # Conjugaison erronée. Accord avec “\1 \2 \3…”. Le verbe devrait être à la 3ᵉ personne du pluriel. TEST: Les abstentions {{est}} présumée manifester un défaut d’opinion marquée TEST: Les cours de culture générale nous {{apporte}} de l’ouverture d’esprit. TEST: Les hommes ne le lui {{pardonnes}} pas. @@ -16469,13 +16470,13 @@ #### NOMS PROPRES # 3sg __conj_nom_propre__ ~^[A-ZÉÈ] @:[123][sp]¬:(?:G|3s|3p!|P|M|A.*:[si]|N.*:m:s) - <<- /conj/ not before(r"\b[dD]e l’ *$") and morph(\1, ":M") - and not morph(<1, ":[VRD]|>(?:ni|et|ou)/") and not before(r"([A-ZÉÈ][\w-]+), +([A-ZÉÈ][\w-]+), +$") - and not ( morph(\2, ":3p") and before(r"\w") ) + <<- /conj/ not before("\\b[dD]e l’ *$") and morph(\1, ":M") + and not morph(<1, ":[VRD]|>(?:ni|et|ou)/") and not before("([A-ZÉÈ][\\w-]+), +([A-ZÉÈ][\\w-]+), +$") + and not ( morph(\2, ":3p") and before("\\w") ) -2>> =suggVerb(\2, ":3s") # Conjugaison erronée. Accord avec “\1”. Le verbe devrait être à la 3ᵉ personne du singulier. TEST: Marc {{arrives}} demain. TEST: Paul ne {{viens}} pas demain. TEST: Marc Aurèle {{étaient}} l’empereur des Romains. (Pas de trait d’union sur Marc Aurèle.)