Grammalecte  Diff

Differences From Artifact [ededcbbd1d]:

To Artifact [f9a016b950]:


425
426
427
428
429
430
431
432

433
434
435
436
437
438
439
425
426
427
428
429
430
431

432
433
434
435
436
437
438
439







-
+







    versions? ([0-9]+(?:[.][0-9]+[a-z]?)*) @@$ <<- ~1>> *

# sigles
__<s>(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)__
    J[.]-[A-Z][.] <<- ~>> =\0.replace(".", "").replace("-","")

451
452
453
454
455
456
457
458

459
460
461
462
463
464
465
451
452
453
454
455
456
457

458
459
460
461
462
463
464
465







-
+








# Patronyme réduit à une seule lettre
__[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(" ", "_")

# IP
__[s](p_adresse_IP)__
662
663
664
665
666
667
668
669

670
671
672
673
674
675
676
662
663
664
665
666
667
668

669
670
671
672
673
674
675
676







-
+







    -2>> =\2.capitalize()                                                                           # Après un point, une majuscule est généralement requise.

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.


!!
!!
!!!! Virgules                                                                                     !!
721
722
723
724
725
726
727
728

729
730
731
732
733
734
735
721
722
723
724
725
726
727

728
729
730
731
732
733
734
735







-
+








TEST: ceci, cela{{, …}}                                                   ->> …
TEST: Les chiens, les chats{{.,}} les poules.                             ->> ,|.


# Fin de paragraphe
#__<i>/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.


!!
!!
!!!! Espaces manquants                                                                            !!
!!
957
958
959
960
961
962
963
964

965
966
967
968
969
970
971
957
958
959
960
961
962
963

964
965
966
967
968
969
970
971







-
+







!!
!!!! Guillemets typographiques                                                                    !!
!!
!!

__<s>/typo(typo_guillemets_typographiques_doubles_ouvrants)__
    "(?=\w)
    <<- not before(r"[a-zA-Zéïîùàâäôö]$") ->> « |“                                                  # Guillemets typographiques ouvrants.
    <<- not before("[a-zA-Zéïîùàâäôö]$") ->> « |“                                                   # Guillemets typographiques ouvrants.
__<s>/typo(typo_guillemets_typographiques_doubles_fermants)__
    [\w.?!…,](")(?!\w)  @@*
    <<- -1>> " »|”"                                                                                 # Guillemets typographiques fermants.

TEST: {{"}}Le grand homme.”                                                 ->> « |“
TEST: “Le grand homme.{{"}}                                                 ->> " »|”"

1022
1023
1024
1025
1026
1027
1028
1029
1030


1031
1032
1033
1034


1035
1036
1037
1038
1039
1040
1041
1042

1043
1044
1045
1046
1047


1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066

1067
1068
1069
1070
1071
1072
1073
1022
1023
1024
1025
1026
1027
1028


1029
1030
1031
1032


1033
1034
1035
1036
1037
1038
1039
1040
1041

1042
1043
1044
1045


1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065

1066
1067
1068
1069
1070
1071
1072
1073







-
-
+
+


-
-
+
+







-
+



-
-
+
+


















-
+







!!
!!!! Cohérence des guillemets                                                                     !!
!!
!!

__<s>/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 («).
__<s>/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à.


__<s>/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 (“).
__<s>/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{{’}}.


__[i]/typo(typo_guillemets_doubles_ouvrants_non_fermés)__
    (“)\w[^”"»]+$  @@0
    <<- -1>> _                                                                                      # Guillemets fermants introuvables dans la suite du paragraphe.
__[i]/typo(typo_guillemets_doubles_fermants_non_ouverts)__
    ^[^“„«"]+\w(”)  @@$
    <<- -1>> _                                                                                      # Guillemets ouvrants introuvables dans ce paragraphe.

TEST: C’était mon affaire{{”}}.
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.
TEST: ces actions ne représentent rien{{’}} pour moi.

1121
1122
1123
1124
1125
1126
1127
1128
1129


1130
1131
1132
1133
1134
1135
1136
1121
1122
1123
1124
1125
1126
1127


1128
1129
1130
1131
1132
1133
1134
1135
1136







-
-
+
+







!!

__[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)__
    (?<!,)(\d\d\d\d)[  ]([a-zA-Zµ][a-zA-Z0-9Ωℓ⁰¹²³⁴⁵⁶⁷⁸⁹/·]*) @@0,$
    <<- morph(\2, ";S", ":[VCR]") or mbUnit(\2) -1>> =formatNumber(\1)                              # Formatage des grands nombres

TEST: {{12345}}                                 ->> 12 345
1166
1167
1168
1169
1170
1171
1172
1173

1174
1175
1176
1177
1178
1179
1180
1166
1167
1168
1169
1170
1171
1172

1173
1174
1175
1176
1177
1178
1179
1180







-
+







!!
!!
!!!! Dates                                                                                        !!
!!
!!
__[i]/date(date_nombres)__
    (?<!\d[ /.-])(\d\d?)[ /.-](\d\d?)[ /.-](\d\d\d+)(?![ /.-]\d)  @@0,w,$
    <<- not checkDate(\1, \2, \3) and not before(r"(?i)\bversions? +$") ->> _                       # 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}}
TEST: le {{81/01/2012}}
TEST: 12-12-2012
1243
1244
1245
1246
1247
1248
1249
1250

1251
1252
1253
1254
1255
1256
1257
1243
1244
1245
1246
1247
1248
1249

1250
1251
1252
1253
1254
1255
1256
1257







-
+







TEST: __ocr__ {{II}} pleut tout le temps.
TEST: __ocr__ En l’an {{2OO1}}, tout commença.


## 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
TEST: __ocr__ parler de Nicole, {{Le}} sommeil ne vient pas.
TEST: __ocr__ a fait de toi, Charles, {{Tu}} étais beau quand
1271
1272
1273
1274
1275
1276
1277
1278

1279
1280
1281
1282
1283
1284
1285
1286
1287

1288
1289
1290
1291
1292
1293
1294
1271
1272
1273
1274
1275
1276
1277

1278
1279
1280
1281
1282
1283
1284
1285
1286

1287
1288
1289
1290
1291
1292
1293
1294







-
+








-
+







TEST: __ocr__ Part-{{On}} demain ?
TEST: __ocr__ À ce compte-{{Ci}}, on n’en viendra jamais à bout.
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.
TEST: __ocr__ Ça a duré 3 h.
TEST: __ocr__ c’est alors que je suis fort.
2342
2343
2344
2345
2346
2347
2348
2349

2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364

2365
2366
2367
2368
2369

2370
2371
2372
2373
2374
2375
2376
2342
2343
2344
2345
2346
2347
2348

2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363

2364
2365
2366
2367
2368

2369
2370
2371
2372
2373
2374
2375
2376







-
+














-
+




-
+








# 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 ?
        <<- 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]
        <<- ->> 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") >>>
        <<- \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.
TEST: __ocr__ Il scrute Pierre, {{Pair}} maussade.
TEST: __ocr__ Une grosse vague arrivait et {{Peau}} remplit.
2625
2626
2627
2628
2629
2630
2631
2632

2633
2634
2635
2636
2637
2638
2639
2625
2626
2627
2628
2629
2630
2631

2632
2633
2634
2635
2636
2637
2638
2639







-
+








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 ?
        <<- before("\\w") ->> l’est                                                                 # Erreur de numérisation ?

TEST: __ocr__ ça {{Test}} à leurs yeux.


# tête / tète
__ocr_tête__
    tète
2963
2964
2965
2966
2967
2968
2969
2970

2971
2972
2973
2974

2975
2976
2977
2978
2979
2980
2981
2963
2964
2965
2966
2967
2968
2969

2970
2971
2972
2973

2974
2975
2976
2977
2978
2979
2980
2981







-
+



-
+







TEST: le {{31 avril}}
TEST: le {{30 février}}
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
TEST: {{jeudi}} 17 aout 1912                                              ->> samedi
TEST: lundi, 18 août 1912 avant Jésus-Christ (date imaginaire)
3868
3869
3870
3871
3872
3873
3874
3875

3876
3877
3878
3879

3880
3881
3882
3883
3884
3885
3886
3868
3869
3870
3871
3872
3873
3874

3875
3876
3877
3878

3879
3880
3881
3882
3883
3884
3885
3886







-
+



-
+







TEST: les méfaits de la {{vidéoprotection}}


#__[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.


#([mts]e|[nv]ous) (rappel\w+) (de) <<- word(1) != "ne" and not morph(word(1), ":V")
#   -3>> _                                                     # Expression impropre. « Se rappeler quelque chose » ou « Se souvenir de quelque chose ».
4567
4568
4569
4570
4571
4572
4573
4574

4575
4576
4577
4578
4579
4580
4581
4582
4583
4584
4585
4586
4587
4588
4589
4590
4591
4592
4593
4594

4595
4596
4597
4598
4599
4600
4601
4567
4568
4569
4570
4571
4572
4573

4574
4575
4576
4577
4578
4579
4580
4581
4582
4583
4584
4585
4586
4587
4588
4589
4590
4591
4592
4593

4594
4595
4596
4597
4598
4599
4600
4601







-
+



















-
+







    [me|m’|te|t’|nous|vous]     ?[le|la|l’|les|en|y]¿   (~ai$)
    [le|la|l’|les]              [lui|leur|en|y]         (~ai$)
    [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$)
        <<- /conj/ morph(\1, ":2s", ":(?:G|W|M|J|3[sp])")
        -1>> =suggVerb(\1, ":3s")                                                                   # Incohérence. Ceci est un verbe à la 2ᵉ personne du singulier. Sujet (“tu” ou “toi qui”) introuvable.

    [ne|n’]  ?[le|la|l’|les|en|me|m’|te|t’|nous|vous|lui|leur|y]¿  (~[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.

    [me|m’|te|t’|nous|vous]     ?[le|la|l’|les|en|y]¿   (~[ae]s$)
    [le|la|l’|les]              [lui|leur|en|y]         (~[ae]s$)
    [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$)
        <<- /conj/ morph(\1, ":[12]s", ":(?:G|W|M|J|3[sp]|2p|1p)")
        -1>> =suggVerb(\1, ":3s")                                                                   # Incohérence. Le sujet de cette forme verbale est introuvable.
4609
4610
4611
4612
4613
4614
4615
4616

4617
4618
4619
4620
4621

4622
4623
4624
4625
4626
4627
4628
4629
4630
4631
4632
4633
4634
4635
4636
4637
4638
4639
4640
4641

4642
4643
4644
4645
4646

4647
4648
4649
4650
4651
4652
4653
4654
4655
4656
4657
4658
4659
4660
4661
4662
4663
4664
4665

4666
4667
4668
4669
4670

4671
4672
4673
4674
4675
4676
4677
4609
4610
4611
4612
4613
4614
4615

4616
4617
4618
4619
4620

4621
4622
4623
4624
4625
4626
4627
4628
4629
4630
4631
4632
4633
4634
4635
4636
4637
4638
4639
4640

4641
4642
4643
4644
4645

4646
4647
4648
4649
4650
4651
4652
4653
4654
4655
4656
4657
4658
4659
4660
4661
4662
4663
4664

4665
4666
4667
4668
4669

4670
4671
4672
4673
4674
4675
4676
4677







-
+




-
+



















-
+




-
+


















-
+




-
+







    [le|la|l’|les]              [lui|leur|en|y]         (~[iudnrtpcï]s$)
    [lui|leur]                  en                      (~[iudnrtpcï]s$)
        <<- /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__
    [se|s’]  ?[en|y|le|la|l’|les]¿  ([peux|veux|vaux|équivaux|prévaux])
        <<- /conj/ -1>> =suggVerb(\1, ":3s")                                                        # Incohérence. Le sujet de cette forme verbale est introuvable.

    [ne|n’]  ?[le|la|l’|les|en|me|m’|te|t’|nous|vous|lui|leur|y]¿  ([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.

    [me|m’|te|t’|nous|vous]     ?[le|la|l’|les|en|y]¿   ([peux|veux|vaux|équivaux|prévaux])
    [le|la|l’|les]              [lui|leur|en|y]         ([peux|veux|vaux|équivaux|prévaux])
    [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.
TEST: Lui, quand il y pensait, en {{arrivai}} à chaque fois à la même conclusion.
TEST: Elle, ici et dans tous les cas de figure, {{veux}} toujours en faire plus.
TEST: Le total de cette opération, contrairement à ce qu’on pense, {{équivaux}} à au moins trois d’entre eux.
TEST: {{j'}}ai signalé que {{j'}}essayais de regrouper les paragraphes. (Tests avec apostrophe droite.)
TEST: je me questionne, {{exiges}} des réponses mais n’en obtiens pas…
TEST: dans tous les cas de figure imaginés par cette bande de nuls, il n’y en a pas un qui les sauvera.
TEST: ces gens qui vont par monts et par vaux.
TEST: pour ne justement pas donner l’impression de s’être trompé.


## 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
TEST: Comme on lui disait que vous-même aviez déjà consulté le notaire
TEST: ce sont des terroristes et ça ne nous arrivera pas à nous, qui n’avons rien à nous reprocher
4742
4743
4744
4745
4746
4747
4748
4749

4750
4751
4752
4753
4754
4755
4756
4742
4743
4744
4745
4746
4747
4748

4749
4750
4751
4752
4753
4754
4755
4756







-
+







        -2>> =suggSimil(\2, ":[NA]:.:[si]", True)                                                   # Incohérence avec « \1 » : « \2 » est un verbe.

    [<start>|,]  [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.
TEST: {{ce}} {{rappelle}} n’en finit pas.
TEST: mon {{rackette}} n’a pas porté les fruits espérés.
5111
5112
5113
5114
5115
5116
5117
5118

5119
5120
5121
5122
5123
5124
5125
5111
5112
5113
5114
5115
5116
5117

5118
5119
5120
5121
5122
5123
5124
5125







-
+









__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.


5415
5416
5417
5418
5419
5420
5421
5422

5423
5424
5425
5426
5427
5428
5429
5430
5431
5432

5433
5434
5435
5436
5437
5438
5439
5415
5416
5417
5418
5419
5420
5421

5422
5423
5424
5425
5426
5427
5428
5429
5430
5431

5432
5433
5434
5435
5436
5437
5438
5439







-
+









-
+







    a vive allure
    a voix [haute|basse]
    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]$|(?<!-)\b(?:il|elle|on|y|n’en) +$")
        <<- /conf/ not value(<1, "|l’|n’|il|elle|on|y|") and not before("(?i)n’en +$")
        -1>> à              # 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]$|(?<!-)\b(?:il|elle|on|y|n’en) +$)")
        <<- /conf/ not value(<1, "|que|qu|l|n’|il|elle|on|y|") and not before("(?i)n’en +$")
        -1>> à              # 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
TEST: On s’y fait, d’une manière ou d’une autre, {{a}} notre corps défendant.
TEST: on fait ça {{a}} la va-vite.
5675
5676
5677
5678
5679
5680
5681
5682

5683
5684
5685
5686
5687
5688
5689
5675
5676
5677
5678
5679
5680
5681

5682
5683
5684
5685
5686
5687
5688
5689







-
+







    sa  @:G¬>(?:tr(?:ès|op)|peu|bien|plus|moins|toute|presque)/|:[NAQ].*:f
        <<- /conf/ -1>> ça                              # Confusion : “sa” (sa maison, sa passion) ≠ “ça” (ça vient, ça heurte).

    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 ».

    sa  <end>
        <<- /conf/ -1>> ça                              # Confusion probable : “sa” est un déterminant féminin singulier. Pour l’équivalent de “cela” ou “ceci”, écrivez :
6620
6621
6622
6623
6624
6625
6626
6627

6628
6629
6630
6631
6632
6633
6634
6620
6621
6622
6623
6624
6625
6626

6627
6628
6629
6630
6631
6632
6633
6634







-
+







    [peux|peut] [importent|importe]
        <<- /conf/ morph(<1, ":C|<start>") -1>> peu                         # Confusion : « \1 » est une conjugaison de “pouvoir”, utilisez “peu” pour dire “pas beaucoup”.

    [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
        <<- /conf/ --1>> peux                                               # Confusion : « peu » signifie « pas beaucoup ».

6705
6706
6707
6708
6709
6710
6711

6712

6713
6714
6715

6716
6717
6718
6719
6720
6721
6722
6705
6706
6707
6708
6709
6710
6711
6712

6713
6714
6715

6716
6717
6718
6719
6720
6721
6722
6723







+
-
+


-
+







    depuis [>prêt|>pré]
        <<- /conf/ --1>> près                                               # Confusion probable. Être prêt(e) à faire quelque chose. Être près de quelque chose. Le pré est un champ d’herbes.

    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 value(<1, "|peu|de|") and not before("(?i)\\bau plus $")
        <<- /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.
        -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]
        <<- /conf/ \3.islower() -1>> près                                   # Confusion probable. Être près de (faire) quelque chose. Prêt à faire quelque chose.

7049
7050
7051
7052
7053
7054
7055
7056

7057
7058
7059
7060
7061
7062
7063
7064

7065
7066
7067
7068
7069
7070
7071
7050
7051
7052
7053
7054
7055
7056

7057
7058
7059
7060
7061
7062
7063
7064

7065
7066
7067
7068
7069
7070
7071
7072







-
+







-
+







    [qui|que|comment|pourquoi|lorsque|quand] son [,|@:[DR]]
        <<- /conf/ -2>> sont    # Confusion probable : “son” est un déterminant ou un nom masculin. Le verbe “être” à la 3ᵉ personne du pluriel s’écrit “sont”.

    [<start>|,] 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}}
TEST: en {{sont}} {{absence}}
TEST: qui {{son}} ces gens ?
7261
7262
7263
7264
7265
7266
7267
7268

7269
7270
7271
7272
7273
7274
7275
7262
7263
7264
7265
7266
7267
7268

7269
7270
7271
7272
7273
7274
7275
7276







-
+







# voir / voire
__conf_voir_voire__
    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)
        <<- /conf/ -1>> voir            # Confusion probable : “voire” signifie “et même possiblement”. Pour le verbe, écrivez “voir”.|https://fr.wiktionary.org/wiki/voire

9360
9361
9362
9363
9364
9365
9366
9367

9368
9369
9370
9371
9372
9373
9374
9361
9362
9363
9364
9365
9366
9367

9368
9369
9370
9371
9372
9373
9374
9375







-
+







    entre [moi|toi|lui|elle|nous|vous|eux|elles] et [moi|toi|lui|elle|nous|vous|eux|elles]
        <<- ~>> *

    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]
        <<- morph(<1, ":(?:R|C[sc])") ~1>> *

9675
9676
9677
9678
9679
9680
9681
9682

9683
9684
9685
9686
9687
9688
9689
9676
9677
9678
9679
9680
9681
9682

9683
9684
9685
9686
9687
9688
9689
9690







-
+







    [la|cette]  [baronne|docteur|docteure|députée|duchesse|ministre|sœur|princesse|présidente|professeure|reine|sénatrice]  @:M[12]
        <<- ~3>> *

    [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) + "||"

    <start>  ~^[A-ZÉÈÊ]  et  [moi|toi|lui|elle|nous|vous|eux|elles]
        <<- morph(\2, ":M")
        ~2:0>> =rewriteSubject(\2,\4) + "||"


10010
10011
10012
10013
10014
10015
10016
10017

10018
10019
10020
10021
10022
10023
10024
10011
10012
10013
10014
10015
10016
10017

10018
10019
10020
10021
10022
10023
10024
10025







-
+









__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>> *



@@@@
@@@@
@@@@
@@@@
10948
10949
10950
10951
10952
10953
10954
10955

10956
10957
10958
10959
10960
10961
10962
10949
10950
10951
10952
10953
10954
10955

10956
10957
10958
10959
10960
10961
10962
10963







-
+







TEST: les heureux imbéciles {{payé}} au lance-pierre.


__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}}


## certains / certaines
__gn_certains_1m__
11728
11729
11730
11731
11732
11733
11734
11735

11736
11737
11738
11739
11740
11741
11742
11729
11730
11731
11732
11733
11734
11735

11736
11737
11738
11739
11740
11741
11742
11743







-
+








# pied
__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.

TEST: ils ont tout simplement perdu {{pieds}}
TEST: ils y sont allés à {{pieds}}.
13139
13140
13141
13142
13143
13144
13145
13146

13147
13148
13149
13150
13151
13152
13153
13140
13141
13142
13143
13144
13145
13146

13147
13148
13149
13150
13151
13152
13153
13154







-
+







    [de|d’] ?[ne|n’]¿  [me|m’|te|t’|se|s’|nous|vous]  [le|la|l’|les|en|y]        @:V¬:Y
    [de|d’] ?[ne|n’]¿  [le|la|l’|les]                 [lui|leur|en|y]            @:V¬:Y
    [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.
TEST: de l’y {{poussé}}
TEST: arrête d’y {{consacré}} autant de temps.
13544
13545
13546
13547
13548
13549
13550
13551

13552
13553

13554
13555
13556
13557
13558
13559
13560
13545
13546
13547
13548
13549
13550
13551

13552
13553

13554
13555
13556
13557
13558
13559
13560
13561







-
+

-
+








!!!! OCR                                                                                          !!

# 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|") >>>
        <<- /ocr/ \2.endswith("e") and morph(\2, ":V1.*:Ip.*:[13]s", ":[GM]|>envie/")
        -2>> =suggVerbPpas(\2, ":m:s")                                                              # Erreur de numérisation ?
13706
13707
13708
13709
13710
13711
13712
13713

13714
13715
13716
13717
13718
13719
13720
13707
13708
13709
13710
13711
13712
13713

13714
13715
13716
13717
13718
13719
13720
13721







-
+







TEST: ce sont des faits constestés.
TEST: c’est un fait reconnu.
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.


__infi_me_te_se_faire__
    [me|te|se]  >faire  ~(?:ée?s?|ez)$
13887
13888
13889
13890
13891
13892
13893
13894

13895
13896
13897
13898
13899
13900

13901
13902
13903
13904
13905
13906
13907
13888
13889
13890
13891
13892
13893
13894

13895
13896
13897
13898
13899
13900

13901
13902
13903
13904
13905
13906
13907
13908







-
+





-
+







TEST: sans fin elles se sont succédé


__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}}.
TEST: Ça s’était toujours {{passe}} comme ça avec elle
TEST: elle s’est {{approche}} de la penderie
14855
14856
14857
14858
14859
14860
14861
14862

14863
14864
14865
14866
14867
14868
14869
14856
14857
14858
14859
14860
14861
14862

14863
14864
14865
14866
14867
14868
14869
14870







-
+







TEST: Nous l’avons {{mangés}}.
TEST: Nous l’avons {{mangées}}.
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}}.
TEST: Les élèves ne m’ont pas {{écoutés}}.
TEST: Les élèves ne m’ont pas {{écoutées}}.
15008
15009
15010
15011
15012
15013
15014
15015

15016
15017
15018
15019
15020
15021
15022
15009
15010
15011
15012
15013
15014
15015

15016
15017
15018
15019
15020
15021
15022
15023







-
+







!!!! Participes passés avec formes interrogatives                                                 !!
!!
!!

__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.

    <start>  ?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.

__ppas_l_m_t_avoir_pronom__
15079
15080
15081
15082
15083
15084
15085
15086

15087
15088
15089
15090
15091
15092
15093
15080
15081
15082
15083
15084
15085
15086

15087
15088
15089
15090
15091
15092
15093
15094







-
+







    <start>  [ne|n’]  ?[le|l’|en|me|m’|te|t’|nous|vous|lui|leur|y]¿  soit
    <start>  [ne|n’]  [me|m’|te|t’|nous|vous]  [le|l’|en|y]          soit
    <start>  [ne|n’]  [le|l’]                  [lui|leur|en|y]       soit
    <start>  [ne|n’]  [lui|leur]               en                    soit
        <<- /imp/ --1>> sois                                                        # S’il s’agit d’un impératif, écrivez “sois”.

    <start>  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.
TEST: Ne {{soit}} pas en retard !

16366
16367
16368
16369
16370
16371
16372
16373

16374
16375
16376
16377
16378
16379
16380

16381
16382
16383
16384
16385
16386
16387
16388
16389
16390
16391
16392
16393
16394

16395
16396
16397
16398
16399
16400
16401
16402

16403
16404
16405
16406
16407
16408
16409
16410
16411
16412

16413
16414
16415
16416
16417
16418

16419
16420
16421
16422
16423
16424
16425
16367
16368
16369
16370
16371
16372
16373

16374
16375
16376
16377
16378
16379
16380

16381
16382
16383
16384
16385
16386
16387
16388
16389
16390
16391
16392
16393
16394

16395
16396
16397
16398
16399
16400
16401
16402

16403
16404
16405
16406
16407
16408
16409
16410
16411
16412

16413
16414
16415
16416
16417
16418

16419
16420
16421
16422
16423
16424
16425
16426







-
+






-
+













-
+







-
+









-
+





-
+







TEST: certaine est la défaite.
TEST: si tu persévères, certaine deviendra la réussite.


__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|<start>|>,")
            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|<start>|>,")
            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
TEST: ces travaux qui {{demande}} tant d’efforts.
TEST: vos questions ne {{réclame}} aucune réflexion.
TEST: le lien entre les agences de renseignement et ces mêmes entreprises pouvait reposer sur des activités de surveillance à proprement parler.


__conj_det_plur_nom_confusion__
    les  @:[NA].*:[pi]  @:V¬:(?:3p|P|Y|G|A.*:e:[pi])
        <<- /conj/ morph(<1, ":C|<start>|>,")
            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, "|<start>|,|"))
        -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|<start>|>,")
            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, "|<start>|,|"))
        -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, "|<start>|,|"))
        -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|<start>|>,")
            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|<start>|>,")
            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.
TEST: Les infirmières à mi-temps ne {{travaille}} pas dans cette aile.
TEST: les données, en quantité plus que suffisante, {{indique}} que…
16467
16468
16469
16470
16471
16472
16473
16474
16475
16476



16477
16478
16479
16480
16481
16482
16483
16468
16469
16470
16471
16472
16473
16474



16475
16476
16477
16478
16479
16480
16481
16482
16483
16484







-
-
-
+
+
+









#### 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.)
TEST: Arthur D. parvient à…
TEST: Les fondateurs pionniers de l’Internet n’avaient pas prévu