Grammalecte  Check-in [0ac16f9805]

Overview
Comment:[fr] ajustements et faux positifs
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk | fr
Files: files | file ages | folders
SHA3-256: 0ac16f9805dad97972bb3c9f20b7c26b25927b5e5428ad42fd911c08d461e054
User & Date: olr on 2020-05-14 17:50:47
Other Links: manifest | tags
Context
2020-05-14
18:12
[build][fr] don’t use list as parameter for define() check-in: d2825ab76b user: olr tags: build, fr, trunk
17:50
[fr] ajustements et faux positifs check-in: 0ac16f9805 user: olr tags: fr, trunk
2020-05-13
19:24
[fr] faux positifs et ajustements check-in: 6673276764 user: olr tags: fr, trunk
Changes

Modified gc_lang/fr/rules.grx from [d7191e8747] to [fcd3649112].

2235
2236
2237
2238
2239
2240
2241







2242
2243
2244
2245
2246
2247
2248
....
2253
2254
2255
2256
2257
2258
2259













2260
2261
2262
2263
2264
2265
2266
....
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
....
8346
8347
8348
8349
8350
8351
8352

8353
8354
8355
8356
8357
8358
8359
8360
.....
15117
15118
15119
15120
15121
15122
15123

15124
15125
15126
15127
15128
15129
15130
.....
24965
24966
24967
24968
24969
24970
24971
24972
24973
24974
24975
24976
24977
24978
24979
.....
25981
25982
25983
25984
25985
25986
25987

25988
25989
25990

25991
25992
25993
25994
25995
25996
25997

25998
25999
26000

26001
26002
26003

26004
26005
26006

26007
26008
26009

26010
26011
26012

26013
26014
26015

26016
26017
26018

26019
26020
26021

26022
26023
26024

26025
26026
26027

26028
26029
26030

26031
26032
26033

26034
26035
26036

26037
26038
26039

26040
26041
26042

26043
26044
26045

26046
26047
26048

26049
26050
26051

26052
26053
26054

26055
26056
26057

26058
26059
26060

26061
26062
26063

26064
26065
26066

26067
26068
26069

26070
26071
26072

26073
26074
26075

26076
26077
26078

26079
26080
26081

26082
26083
26084

26085
26086
26087

26088
26089
26090

26091
26092
26093

26094
26095
26096

26097
26098
26099

26100
26101
26102

26103
26104
26105

26106
26107
26108

26109
26110
26111

26112
26113
26114

26115
26116
26117

26118
26119
26120

26121
26122
26123

26124
26125
26126

26127
26128
26129

26130
26131
26132

26133
26134
26135

26136
26137
26138

26139
26140
26141

26142
26143
26144

26145
26146
26147

26148
26149
26150

26151
26152
26153
26154
26155
26156
26157

26158
26159
26160
26161
26162
26163
26164
26165
26166

26167
26168
26169

26170
26171
26172
26173

26174
26175
26176
26177
26178
26179
26180
26181

26182
26183
26184
26185
26186
26187
26188
.....
26235
26236
26237
26238
26239
26240
26241

26242
26243
26244
26245
26246
26247
26248
.....
26956
26957
26958
26959
26960
26961
26962

26963
26964
26965
26966
26967
26968
26969
26970
.....
27001
27002
27003
27004
27005
27006
27007

27008
27009
27010
27011
27012
27013
27014

27015
27016
27017
27018
27019
27020
27021
27022
27023
27024
27025
27026
27027
27028
27029
.....
27314
27315
27316
27317
27318
27319
27320

27321
27322
27323
27324
27325
27326
27327
27328
27329
27330
27331
27332
27333
27334
.....
27342
27343
27344
27345
27346
27347
27348

27349
27350
27351
27352
27353
27354
27355
27356
27357
27358
27359
27360
27361
27362
.....
27393
27394
27395
27396
27397
27398
27399

27400
27401
27402
27403
27404
27405
27406
27407

27408
27409
27410
27411
27412
27413
27414
27415

27416
27417
27418
27419
27420
27421
27422
27423
27424
27425
27426
27427
27428
27429
    machine [learning+s]
    nec plus ultra
    standing >ovation
    star [system+s]
    quantitative easing
        <<- ~>> ␣








    presqu’ [>ile|>île]
        <<- ~>> ␣
        <<- =>> change_meta(\1, "WORD")

    *NUM : *NUM
        <<- space_after(\1, 0, 0) and space_after(\1, 0, 0) ~>> ␣

................................................................................
__fusions_noms_communs_séparés_slah__
    *WORD  /  *WORD
        <<- space_after(\1, 0, 0) and space_after(\2, 0, 0) and morph(\1, ":N") and morph(\-1, ":N") ~>> ␣
        <<- =>> define(\1, [":N:e:i"])


__fusions_noms_propres__













    cac  40
        <<- ~>> ␣

    France [2|3|4|5|0|O]
        <<- ~>> ␣

    Peugeot  ~^\d0\d\d?$
................................................................................
        <<- analyse_with_next(\1, " ", ":") ~>> ␣
        <<- __else__ and morph(\1, ":M") and morph(\2, ":V", ":[GM]") =>> define(\2, [":M2"])

    Me  ~^[A-ZÀÂÉÈÊÎÔ].
        <<- =>> define(\1, [":T"])
        <<- ~1>> *

    notre père
        <<- morph(<1, ":D.*:[mp]") ~>> ␣
        <<- __also__ =>> define(\1, [":N:m:i"])

    [la|cette] ~^[A-ZÀÂÉÈÊÎÔ]. ?~^[A-ZÀÂÉÈÊÎÔ].¿ [Administration|Area|Army|Assocation|Avenue|Chamber|Church|City|Community|Court|Company|Corporation|Cup|Enterprise|Foundation|Fraternity|Gallery|Highway|House|League|Library|Mansion|Nation|Navy|Organization|Reserve|Road|River|Sea|Society|Station|Sorority|Tavern|Tower|University|Valley]
        <<- ~2:0>> ␣
        <<- =>> define(\2, [":MP:f:s"])

    [le|au|du|ce] ~^[A-ZÀÂÉÈÊÎÔ]. ?~^[A-ZÀÂÉÈÊÎÔ].¿ [Act|Building|Bureau|Casino|Castle|Championship|Club|College|Comity|Consortium|Cottage|Covent|Day|Desert|Forum|Hall|Garden|Hospital|Hostel|Institute|Magazine|Manor|Monastery|Mount|Museum|News|Newspaper|Ocean|Office|Opera|Park|Party|Palace|Post|Restaurant|State|Theatre|Tournament]
        <<- ~2:0>> ␣
        <<- =>> define(\2, [":MP:m:s"])

    the ~^[A-ZÀÂÉÈÊÎÔ]. ?~^[A-ZÀÂÉÈÊÎÔ].¿ [Administration|Area|Assocation|Chamber|Church|Community|Company|Corporation|Cup|Enterprise|Foundation|Gallery|House|League|Library|Navy|Reserve|Society|Station|University]
    the ~^[A-ZÀÂÉÈÊÎÔ]. ?~^[A-ZÀÂÉÈÊÎÔ].¿ [Act|Championship|College|Consortium|Day|Hall|Hospital|Institute|Magazine|Museum|News|Opera|Park|Palace|Post|Restaurant|Theatre|Tournament]
        <<- ~2:0>> ␣
        <<- =>> define(\2, [":MP:e:s"])

    ~^[A-ZÀÂÉÈÊÎÔ]. Airways
        <<- ~>> ␣
        <<- =>> define(\2, [":MP:e:i"])

................................................................................

    en cour martiale
    en cour [de|d’] [cassation|justice]
    en cour d’ >assise
        <<- !1:2>>

    en cour

        <<- /conf/ ->> en cours                             && Confusion probable. Une cour… Un cours… Adjectif : court(e).

    [<start>|,|en|un|le|ce|mon|notre|votre|leur|des|les|mes|tes|ses|ces|nos|vos|leurs|quelques|plusieurs|certains] [court+s] [de|d’]
        || [allemand|anglais|arabe|arabe|bengali|bhodjpouri|cantonais|coréen|égyptien|espagnol|français|grec|gujarati|haoussa|hébreu|hindi|indonésien|italien|italien|latin|japonais|javanais|mandarin|marathi|minnan|ourdou|pendjabi|persan|portugais|russe|sanskrit|sanscrit|swahili|tamoul|thaï|turc|tégoulou|vietnamien|wu]
    [<start>|,|en|un|le|ce|mon|notre|votre|leur|des|les|mes|tes|ses|ces|nos|vos|leurs|quelques|plusieurs|certains] [court+s] [de|d’]
        || [>administration|>agriculture|>agronomie|>art|>biologie|>chant|>commerce|>culture|>cristallographie|>conduite|>cuisine|>danse|>dessin|>ébénisterie|>écriture|>épistémologie|>droit|>éducation|>électronique|>électrotechnique|>élocution|>éthique|>géographie|>gestion|>histoire|>karaté|>kung-fu|>informatique|>langue|>lettre|>littérature|>orientation|>morale|maintien|>mathématique|>math|>mécanique|>médecine|>menuiserie|>musique|>odontologie|>pâtisserie|>peinture|>philosophie|>philo|>physique|>programmation|>psychologie|>science|>sport|>théâtre|>théologie]
        <<- /conf/ -2>> cours                               && Confusion probable : “court” signifie “de peu de longueur”. Pour un enseignement, écrivez “cours”.|https://fr.wiktionary.org/wiki/cours

................................................................................
    >homme d’ âge mûr
    >homme à poigne
    >homme à tout faire
    >horaire à rallonge
    >hôtel [de|d’] ville
    >hôtesse d’ accueil
    >infirmier [de|d’] garde

    >inspection [de|d’] routine
    >instinct [de|d’] survie
    >interface [utilisateur+s]
    >intermittent du spectacle
    >invité d’ honneur
    >invité surprise
    >issue de secours
................................................................................
TEST: les avais-tu {{acheté}} là-bas ?
TEST: les ont-ils {{détecté}} ?
TEST: les avaient-ils {{détectez}} ?


!!
!!
!!!! Accords avec l’adjectif précédant le pronom                                                  !!
!!
!!

__ppas_adj_accord_je_tu__
    <start>  *WORD  ?,¿  [je|j’|tu|iel]
        <<- /ppas/ morph(\2, ":A.*:p", ":[GEMWPsi]") and not tag(\2, "_exctx_")
        -2>> =suggSing(\2)                                                      && Si cet adjectif se réfère au pronom « \-1 », l’adjectif devrait être au singulier (et accordé en genre).
................................................................................
!!! Processeur: purge des préverbes                                                               !!
!!!
!!!

__purge_préverbes1__
    [ne|n’|me|m’|te|se|s’|y]  @:(?:[123][sp]|P|Y)¬:X|>rien/
        <<- ~1>> *


    t’  @:(?:[123][sp]|P|Y)¬:(?:X|2s)|>(?:rien|ie?ls?|elles?|on)/
        <<- ~1>> *


    le    @:(?:[123][sp]|P|Y)¬:(?:[NA].*:[me]:[si]|G|M)
    la    @:(?:[123][sp]|P|Y)¬:(?:[NA].*:[fe]:[si]|G|M)
    l’    @:(?:[123][sp]|P|Y)¬:(?:[NA].*:[si]|G|M)
    les   @:(?:[123][sp]|P|Y)¬:(?:[NA].*:[pi]|G|M)
    leur  @:(?:[123][sp]|P|Y)¬:(?:[NA].*:[si]|G|M)
        <<- \2.islower() ~1>> *


    en    @:(?:[123][sp]|P|Y)¬:[NA]
        <<- \2.islower() and not (value(\2, "|attendant|admettant|") and value(>1, "|que|qu’|")) ~1>> *


    nous  @:(?:[123][sp]|P|Y)¬:1p
        <<- \2.islower() and not (morph(<1, ":1p") and not value(<1, "|sachons|veuillons|allons|venons|partons|") and value(<2, "|<start>|,|")) ~1>> *


    vous  @:(?:[123][sp]|P|Y)¬:2p
        <<- \2.islower() and not (morph(<1, ":2p") and not value(<1, "|sachez|veuillez|allez|venez|partez|") and value(<2, "|<start>|,|")) ~1>> *


    lui   @:(?:[123][sp]|P|Y)¬:3s
        <<- not morph(<1, ":R") ~1>> *


    [je|j’|il|on]  le   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":[123]s") or not morph(\3, ":N.*:[me]:[si]") ~2>> *


    [je|j’|il|on]  la   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":[123]s") or not morph(\3, ":N.*:[fe]:[si]") ~2>> *


    [je|j’|il|on]  [l’|leur]   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":[123]s") or not morph(\3, ":N.*:[si]") ~2>> *


    [je|j’|il|on]  les  @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":[123]s") or not morph(\3, ":N.*:[pi]") ~2>> *


    [je|j’|il|on]  en  @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":[123]s") or not morph(\3, ":[NA]") ~2>> *


    tu  le   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:[123]s|V0)") or not morph(\3, ":N.*:[me]:[si]") ~2>> *


    tu  la   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:[123]s|V0)") or not morph(\3, ":N.*:[fe]:[si]") ~2>> *


    tu  [l’|leur]   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:[123]s|V0)") or not morph(\3, ":N.*:[si]") ~2>> *


    tu  les  @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:[123]s|V0)") or not morph(\3, ":N.*:[pi]") ~2>> *


    tu  en  @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:[123]s|V0)") or not morph(\3, ":[NA]") ~2>> *


    [lui|celui-là|celui-ci]  le   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:3s|R)") or not morph(\3, ":N.*:[me]:[si]") ~2>> *


    [lui|celui-là|celui-ci]  la   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:3s|R)") or not morph(\3, ":N.*:[fe]:[si]") ~2>> *


    [lui|celui-là|celui-ci]  [l’|leur]   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:3s|R)") or not morph(\3, ":N.*:[si]") ~2>> *


    [lui|celui-là|celui-ci]  les  @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:3s|R)") or not morph(\3, ":N.*:[pi]") ~2>> *


    [lui|celui-là|celui-ci]  en  @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:3s|R)") or not morph(\3, ":[NA]") ~2>> *


    [elle|iel|celle-là|celle-ci]  le   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:3s|R)") or not morph(\3, ":N.*:[me]:[si]") ~2>> *


    [elle|iel|celle-là|celle-ci]  la   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:3s|R)") or not morph(\3, ":N.*:[fe]:[si]") ~2>> *


    [elle|iel|celle-là|celle-ci]  [l’|leur]   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:3s|R)") or not morph(\3, ":N.*:[si]") ~2>> *


    [elle|iel|celle-là|celle-ci]  les  @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:3s|R)") or not morph(\3, ":N.*:[pi]") ~2>> *


    [elle|iel|celle-là|celle-ci]  en  @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:3s|R)") or not morph(\3, ":[NA]") ~2>> *


    nous  le   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:1p|R)") or not morph(\3, ":N.*:[me]:[si]") ~2>> *


    nous  la   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:1p|R)") or not morph(\3, ":N.*:[fe]:[si]") ~2>> *


    nous  [l’|leur]   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:1p|R)") or not morph(\3, ":N.*:[si]") ~2>> *


    nous  les  @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:1p|R)") or not morph(\3, ":N.*:[pi]") ~2>> *


    nous  en  @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:1p|R)") or not morph(\3, ":[NA]") ~2>> *


    vous  le   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:2p|R)") or not morph(\3, ":N.*:[me]:[si]") ~2>> *


    vous  la   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:2p|R)") or not morph(\3, ":N.*:[fe]:[si]") ~2>> *


    vous  [l’|leur]   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:2p|R)") or not morph(\3, ":N.*:[si]") ~2>> *


    vous  les  @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:2p|R)") or not morph(\3, ":N.*:[pi]") ~2>> *


    vous  en  @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:2p|R)") or not morph(\3, ":[NA]") ~2>> *


    ils  le   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":3p") or not morph(\3, ":N.*:[me]:[si]") ~2>> *


    ils  la   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":3p") or not morph(\3, ":N.*:[fe]:[si]") ~2>> *


    ils  [l’|leur]   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":3p") or not morph(\3, ":N.*:[si]") ~2>> *


    ils  les  @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":3p") or not morph(\3, ":N.*:[pi]") ~2>> *


    ils  en  @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":3p") or not morph(\3, ":[NA]") ~2>> *


    [eux|ceux-là|ceux-ci]  le   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":3p") or not morph(\3, ":N.*:[me]:[si]") ~2>> *


    [eux|ceux-là|ceux-ci]  la   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":3p") or not morph(\3, ":N.*:[fe]:[si]") ~2>> *


    [eux|ceux-là|ceux-ci]  [l’|leur]   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":3p") or not morph(\3, ":N.*:[si]") ~2>> *


    [eux|ceux-là|ceux-ci]  les  @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":3p") or not morph(\3, ":N.*:[pi]") ~2>> *


    [eux|ceux-là|ceux-ci]  en  @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":3p") or not morph(\3, ":[NA]") ~2>> *


    [elles|iels|celles-là|celles-ci]  le   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:3p|R)") or not morph(\3, ":N.*:[me]:[si]") ~2>> *


    [elles|iels|celles-là|celles-ci]  la   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:3p|R)") or not morph(\3, ":N.*:[fe]:[si]") ~2>> *


    [elles|iels|celles-là|celles-ci]  [l’|leur]   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:3p|R)") or not morph(\3, ":N.*:[si]") ~2>> *


    [elles|iels|celles-là|celles-ci]  les  @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:3p|R)") or not morph(\3, ":N.*:[pi]") ~2>> *


    [elles|iels|celles-là|celles-ci]  en  @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:3p|R)") or not morph(\3, ":[NA]") ~2>> *


    [je|j’|il|on|ils]  [nous|vous|lui]  @:(?:[123][sp]|P|Y)
        <<- ~2>> *


    tu  [nous|vous|lui]  @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":V0") ~2>> *


    [lui|celui-là|celui-ci]          [nous|vous|lui]  @:(?:[123][sp]|P|Y)
    [elle|celle-là|celle-ci|iel]     [nous|vous|lui]  @:(?:[123][sp]|P|Y)
    [nous|vous]                      [nous|vous|lui]  @:(?:[123][sp]|P|Y)
    [eux|ceux-là|ceux-ci]            [nous|vous|lui]  @:(?:[123][sp]|P|Y)
    [elles|celles-là|celles-ci|iels] [nous|vous|lui]  @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":R") ~2>> *



__purge_préverbes2__
    nous              [le|la|l’|les|en|y]  @:(?:[123][sp]|P|Y)¬:(?:X|1p)
    vous              [le|la|l’|les|en|y]  @:(?:[123][sp]|P|Y)¬:(?:X|2p)
    [me|m’|te|se|s’]  [le|la|l’|les|en|y]  @:(?:[123][sp]|P|Y)¬:X
    [le|la|l’|les]    [lui|leur|en|y]      @:(?:[123][sp]|P|Y)¬:X
    leur              en                   @:(?:[123][sp]|P|Y)¬:X
        <<- ~1:2>> *


    lui               en                   @:(?:[123][sp]|P|Y)¬:X
        <<- not morph(<1, ":(?:R|3s)") ~1:2>> *


    t’  [le|la|l’|les|en|y]  @:(?:[123][sp]|P|Y)¬:X
        <<- not morph(\3, ":2s") or value(<1, "|je|j’|tu|il|elle|on|nous|vous|ils|elles|iel|iels|") ~1:2>> *
        <<- ~2>> *



__purge_préverbes_négation__
    [ne|n’]  [le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]  @:(?:[123][sp]|P|Y)¬:X
    [ne|n’]  [me|m’|te|t’|se|s’|nous|vous]  [le|la|l’|les|en|y]        @:(?:[123][sp]|P|Y)¬:X
    [ne|n’]  [le|la|l’|les]                 [lui|leur|en|y]            @:(?:[123][sp]|P|Y)¬:X
    [ne|n’]  [lui|leur]                     en                         @:(?:[123][sp]|P|Y)¬:X
        <<- ~1:-2>> *



__purge_proposition_subordonnée__
    [que|qu’]   je                      ?[ne|n’]¿   ?[le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿  @V[123].*:1s    @:[123][sp]
    [que|qu’]   je                      ?[ne|n’]¿   [me|m’|te|t’|se|s’|nous|vous]   [le|la|l’|les|en|y]         @V[123].*:1s    @:[123][sp]
    [que|qu’]   je                      ?[ne|n’]¿   [le|la|l’|les]                  [lui|leur|en|y]             @V[123].*:1s    @:[123][sp]
    [que|qu’]   je                      ?[ne|n’]¿   [lui|leur|y]                    en                          @V[123].*:1s    @:[123][sp]
................................................................................
    [que|qu’]   [ils|elles|iels]        ?[ne|n’]¿   [le|la|l’|les]                  [lui|leur|en|y]             @:V0.*:3p    @:Q¬:G   @:[123][sp]
    [que|qu’]   [ils|elles|iels]        ?[ne|n’]¿   [lui|leur|y]                    en                          @:V0.*:3p    @:Q¬:G   @:[123][sp]
    [que|qu’]   $:M et $:M              ?[ne|n’]¿   ?[le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿  @:V0.*:3p    @:Q¬:G   @:[123][sp]
    [que|qu’]   $:M et $:M              ?[ne|n’]¿   [me|m’|te|t’|se|s’|nous|vous]   [le|la|l’|les|en|y]         @:V0.*:3p    @:Q¬:G   @:[123][sp]
    [que|qu’]   $:M et $:M              ?[ne|n’]¿   [le|la|l’|les]                  [lui|leur|en|y]             @:V0.*:3p    @:Q¬:G   @:[123][sp]
    [que|qu’]   $:M et $:M              ?[ne|n’]¿   [lui|leur|y]                    en                          @:V0.*:3p    @:Q¬:G   @:[123][sp]
        <<- morph(<1, ":N", ":V") ~1:-2>> *



__purge_substantifs_comme_lui_elle__
    <start>  les  *WORD  comme  [moi|toi|nous|vous|lui|elle|eux|elles|celui-là|celui-ci|celle-là|celle-ci|ceux-là|ceux-ci|celles-là|celles-ci]
    <start>  un   *WORD  comme  [moi|toi|nous|vous|lui|celui-là|celui-ci|ceux-là|ceux-ci]
    <start>  une  *WORD  comme  [moi|toi|nous|vous|elle|elles|celle-là|celle-ci|celles-là|celles-ci]
        <<- ~-2:0>> *
................................................................................

__conj_le_la_leur_nom__
    [le|la|l’|leur]  *WORD  @:V¬:(?:3s|P|Y|3p!|G|M)
        <<- /conj/ not tag(\2, "_enum_") and morph(<1, ":C|<start>|>,", ":[YP]") and morph(\2, ":[NA].*:[si]", ":G")
            and not ( (value(\2, "|dizaine|douzaine|quinzaine|vingtaine|trentaine|quarantaine|cinquantaine|soixantaine|centaine|majorité|minorité|millier|partie|poignée|tas|paquet|moitié|")
                        or tag_before(\1, "_ni_") or value(<1, "|et|ou|")) and morph(\3, ":3?p") ) and not checkAgreement(\2, \3)
            and not ( morph(\2, "(?:[123][sp]|P)") and not value(<1, "|<start>|,|") ) >>>

        <<- /conj/ morph(\3, ":A.*:p") or (morph(\3, ":N.*:p") and morph(\2, ":A")) -3>> =suggVerb(\3, ":3s", suggSing)  && Accord avec “\1 \2…” incorrect. Conjugaison erronée ou accord nom/adjectif incorrect.
        <<- /conj/ __else__ -3>> =suggVerb(\3, ":3s")                                               && Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du singulier.

    [le|la|l’|leur]  *WORD  qui  @:V¬:(?:3s|P|3p!|G|M)
        <<- /conj/ not tag(\2, "_enum_") and morph(<1, ":C|<start>|>,", ":[YP]") and morph(\2, ":[NA].*:[si]", ":G")
            and not ( (value(\2, "|dizaine|douzaine|quinzaine|vingtaine|trentaine|quarantaine|cinquantaine|soixantaine|centaine|majorité|minorité|millier|partie|poignée|tas|paquet|moitié|")
                        or tag_before(\1, "_ni_") or value(<1, "|et|ou|")) and morph(\4, ":3p") )
        -4>> =suggVerb(\4, ":3s")                                                                   && Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du singulier.
................................................................................


__conj_det_sing_nom__
    [un|ce|cet|mon|ton|son|notre|votre]  *WORD  @:V¬:(?:3s|P|Y|3p!|G|M)
        <<- /conj/ not tag(\2, "_enum_") and morph(<1, ":C|<start>|>,", ":[YP]") and morph(\2, ":[NA].*:[me]:[si]", ":G")
            and not ( (value(\2, "|dizaine|douzaine|quinzaine|vingtaine|trentaine|quarantaine|cinquantaine|soixantaine|centaine|majorité|minorité|millier|partie|poignée|tas|paquet|moitié|")
                        or tag_before(\1, "_ni_") or value(<1, "|et|ou|")) and morph(\3, ":3?p") ) and not checkAgreement(\2, \3) >>>

        <<- /conj/ morph(\3, ":A.*:p") or (morph(\3, ":N.*:p") and morph(\2, ":A")) -3>> =suggVerb(\3, ":3s", suggSing) && Accord avec “\1 \2…” incorrect. Conjugaison erronée ou accord nom/adjectif incorrect.
        <<- /conj/ __else__ -3>> =suggVerb(\3, ":3s")                                                                   && Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du singulier.

    [une|cette|mon|ton|son|ma|ta|sa|notre|votre]  *WORD  @:V¬:(?:3s|P|Y|3p!|G|M)
        <<- /conj/ not tag(\2, "_enum_") and morph(<1, ":C|<start>|>,", ":[YP]") and morph(\2, ":[NA].*:[fe]:[si]", ":G")
            and not ( (value(\2, "|dizaine|douzaine|quinzaine|vingtaine|trentaine|quarantaine|cinquantaine|soixantaine|centaine|majorité|minorité|millier|partie|poignée|tas|paquet|moitié|")
                        or tag_before(\1, "_ni_") or value(<1, "|et|ou|")) and morph(\3, ":3?p") ) and not checkAgreement(\2, \3) >>>

        <<- /conj/ morph(\3, ":A.*:p") or (morph(\3, ":N.*:p") and morph(\2, ":A")) -3>> =suggVerb(\3, ":3s", suggSing) && Accord avec “\1 \2…” incorrect. Conjugaison erronée ou accord nom/adjectif incorrect.
        <<- /conj/ __else__ -3>> =suggVerb(\3, ":3s")                                                                   && Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du singulier.

    [un|une|ce|cet|cette|mon|ton|son|ma|ta|sa|notre|votre]  *WORD  qui  @:V¬:(?:3s|P|3p!|G|M)
        <<- /conj/ not tag(\2, "_enum_") and morph(<1, ":C|<start>|>,", ":[YP]") and morph(\2, ":[NA].*:[si]", ":G")
            and not ( (value(\2, "|dizaine|douzaine|quinzaine|vingtaine|trentaine|quarantaine|cinquantaine|soixantaine|centaine|majorité|minorité|millier|partie|poignée|tas|paquet|moitié|")
                        or tag_before(\1, "_ni_") or value(<1, "|et|ou|")) and morph(\4, ":3p") )
        -4>> =suggVerb(\4, ":3s")                                                                                       && Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du singulier.

TEST: Tu devrais le savoir, ce roman-là de Jean-Paul Sartre {{es}} passionnant.
TEST: Cette confusion qui {{donnent}} le tournis.
TEST: tu sais, une hausse de 2 % {{satisfais}} tout le monde                                        ->> satisfait
TEST: tu sais, une petite {{donnes}} satisfaction
TEST: tu penses mal, cet homme {{mens}}
TEST: J’aimerais aussi que mon problème {{sois}} réglé.                                             ->> soit
................................................................................
TEST: elles vont toutes aller faire un tour


__conj_det_plur_nom__
    [ces|mes|tes|ses|nos|vos|leurs|quelques|maints]  @:[NA].*:[pi]¬:V0  @:V¬:(?:3p|P|Y|G|M|A.*:[pi])
        <<- /conj/ morph(<1, ":Cs|<start>|>,")
            and not( morph(\3, ":3s") and before("(?i)\\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") ) >>>

        <<- /conj/ morph(\3, ":A.*:s") or (morph(\3, ":N.*:s") and morph(\2, ":A")) -3>> =suggVerb(\3, ":3p", suggPlur) && Accord avec « \1 \2… » incorrect. Conjugaison erronée ou accord nom/adjectif incorrect.
        <<- /conj/ __else__ -3>> =suggVerb(\3, ":3p")                                                                   && Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du pluriel.

    [ces|mes|tes|ses|nos|vos|leurs|quelques|maints]  @:[NA].*:[pi]¬:V0  qui  @:V¬:(?:3p|P|Y|G|M|A.*:e:[pi])
        <<- /conj/ morph(<1, ":Cs|<start>|>,")
            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: Ces attaques à main armée {{donne}} la chair de poule.
................................................................................

__conj_les_nom__
    les  @:[NA].*:[pi]¬:V0  @:V¬:(?:3p|P|Y|G|M)
        <<- /conj/ morph(<1, ":Cs|<start>|>,")
            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)
            and not ( morph(\2, "(?:[123][sp]|P)") and not value(<1, "|<start>|,|") ) >>>

        <<- /conj/ morph(\3, ":A.*:s") or (morph(\3, ":N.*:s") and morph(\2, ":A")) -3>> =suggVerb(\3, ":3p", suggPlur) && Accord avec “\1 \2…” incorrect. Conjugaison erronée ou accord nom/adjectif incorrect.
        <<- /conj/ __else__ -3>> =suggVerb(\3, ":3p")                                                                   && Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du pluriel.

    les  @:[NA].*:[pi]  qui  @:V¬:(?:3p|P|Y|G|M)
        <<- /conj/ morph(<1, ":Cs|<start>|>,")
            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…
TEST: Les hommes comme celui-là {{mange}} comme deux.
................................................................................

__conj_certains_certaines_plusieurs_nom__
    certains  @:[NA].*:[pi]  @:V¬:(?:3p|P|Y|G|M)
        <<- /conj/ morph(<1, ":Cs|<start>|>,")
            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)
            and not ( morph(\2, "(?:[123][sp]|P)") and not value(<1, "|<start>|,|") ) >>>

        <<- /conj/ morph(\3, ":A.*:s") or (morph(\3, ":N.*:s") and morph(\2, ":A")) -3>> =suggVerb(\3, ":3p", suggMasPlur)  && Accord avec “\1 \2…” incorrect. Conjugaison erronée ou accord nom/adjectif incorrect.
        <<- /conj/ __else__ -3>> =suggVerb(\3, ":3p")                                                                   && Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du pluriel.

    certaines  @:[NA].*:[pi]  @:V¬:(?:3p|P|Y|G|M)
        <<- /conj/ morph(<1, ":Cs|<start>|>,")
            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)
            and not ( morph(\2, "(?:[123][sp]|P)") and not value(<1, "|<start>|,|") ) >>>

        <<- /conj/ morph(\3, ":A.*:s") or (morph(\3, ":N.*:s") and morph(\2, ":A")) -3>> =suggVerb(\3, ":3p", suggFemPlur)  && Accord avec “\1 \2…” incorrect. Conjugaison erronée ou accord nom/adjectif incorrect.
        <<- /conj/ __else__ -3>> =suggVerb(\3, ":3p")                                                                   && Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du pluriel.

    plusieurs  @:[NA].*:[pi]  @:V¬:(?:3p|P|Y|G|M)
        <<- /conj/ morph(<1, ":Cs|<start>|>,")
            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)
            and not ( morph(\2, "(?:[123][sp]|P)") and not value(<1, "|<start>|,|") ) >>>

        <<- /conj/ morph(\3, ":A.*:s") or (morph(\3, ":N.*:s") and morph(\2, ":A")) -3>> =suggVerb(\3, ":3p", suggPlur) && Accord avec “\1 \2…” incorrect. Conjugaison erronée ou accord nom/adjectif incorrect.
        <<- /conj/ __else__ -3>> =suggVerb(\3, ":3p")                                                                   && Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du pluriel.

    [certains|certaines|plusieurs]  @:[NA].*:[pi]  qui  @:V¬:(?:3p|P|Y|G|M)
        <<- /conj/ morph(<1, ":Cs|<start>|>,")
            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 chattes {{danse}}
TEST: certains hommes {{marchande}} sans cesse
TEST: tu sais, certains filtres {{donnes}} de mauvais résultats
TEST: certaines femmes {{danse}} beaucoup
TEST: tu sais, certaines danses {{dérive}} d’autres
TEST: certaines demandes qui {{donne}} le tournis.







>
>
>
>
>
>
>







 







>
>
>
>
>
>
>
>
>
>
>
>
>







 







<
<
<
<
|



|



|
|







 







>
|







 







>







 







|







 







>



>







>



>



>



>



>



>



>



>



>



>



>



>



>



>



>



>



>



>



>



>



>



>



>



>



>



>



>



>



>



>



>



>



>



>



>



>



>



>



>



>



>



>



>



>



>



>



>



>



>



>



>



>







>









>



>




>








>







 







>







 







>
|







 







>
|
|





>
|
|





|







 







>
|
|




|







 







>
|
|




|







 







>
|
|






>
|
|






>
|
|




|







2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
....
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
....
2295
2296
2297
2298
2299
2300
2301




2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
....
8362
8363
8364
8365
8366
8367
8368
8369
8370
8371
8372
8373
8374
8375
8376
8377
.....
15134
15135
15136
15137
15138
15139
15140
15141
15142
15143
15144
15145
15146
15147
15148
.....
24983
24984
24985
24986
24987
24988
24989
24990
24991
24992
24993
24994
24995
24996
24997
.....
25999
26000
26001
26002
26003
26004
26005
26006
26007
26008
26009
26010
26011
26012
26013
26014
26015
26016
26017
26018
26019
26020
26021
26022
26023
26024
26025
26026
26027
26028
26029
26030
26031
26032
26033
26034
26035
26036
26037
26038
26039
26040
26041
26042
26043
26044
26045
26046
26047
26048
26049
26050
26051
26052
26053
26054
26055
26056
26057
26058
26059
26060
26061
26062
26063
26064
26065
26066
26067
26068
26069
26070
26071
26072
26073
26074
26075
26076
26077
26078
26079
26080
26081
26082
26083
26084
26085
26086
26087
26088
26089
26090
26091
26092
26093
26094
26095
26096
26097
26098
26099
26100
26101
26102
26103
26104
26105
26106
26107
26108
26109
26110
26111
26112
26113
26114
26115
26116
26117
26118
26119
26120
26121
26122
26123
26124
26125
26126
26127
26128
26129
26130
26131
26132
26133
26134
26135
26136
26137
26138
26139
26140
26141
26142
26143
26144
26145
26146
26147
26148
26149
26150
26151
26152
26153
26154
26155
26156
26157
26158
26159
26160
26161
26162
26163
26164
26165
26166
26167
26168
26169
26170
26171
26172
26173
26174
26175
26176
26177
26178
26179
26180
26181
26182
26183
26184
26185
26186
26187
26188
26189
26190
26191
26192
26193
26194
26195
26196
26197
26198
26199
26200
26201
26202
26203
26204
26205
26206
26207
26208
26209
26210
26211
26212
26213
26214
26215
26216
26217
26218
26219
26220
26221
26222
26223
26224
26225
26226
26227
26228
26229
26230
26231
26232
26233
26234
26235
26236
26237
26238
26239
26240
26241
26242
26243
26244
26245
26246
26247
26248
26249
26250
26251
26252
26253
26254
26255
26256
26257
26258
26259
26260
26261
26262
26263
26264
26265
.....
26312
26313
26314
26315
26316
26317
26318
26319
26320
26321
26322
26323
26324
26325
26326
.....
27034
27035
27036
27037
27038
27039
27040
27041
27042
27043
27044
27045
27046
27047
27048
27049
.....
27080
27081
27082
27083
27084
27085
27086
27087
27088
27089
27090
27091
27092
27093
27094
27095
27096
27097
27098
27099
27100
27101
27102
27103
27104
27105
27106
27107
27108
27109
27110
.....
27395
27396
27397
27398
27399
27400
27401
27402
27403
27404
27405
27406
27407
27408
27409
27410
27411
27412
27413
27414
27415
27416
.....
27424
27425
27426
27427
27428
27429
27430
27431
27432
27433
27434
27435
27436
27437
27438
27439
27440
27441
27442
27443
27444
27445
.....
27476
27477
27478
27479
27480
27481
27482
27483
27484
27485
27486
27487
27488
27489
27490
27491
27492
27493
27494
27495
27496
27497
27498
27499
27500
27501
27502
27503
27504
27505
27506
27507
27508
27509
27510
27511
27512
27513
27514
27515
    machine [learning+s]
    nec plus ultra
    standing >ovation
    star [system+s]
    quantitative easing
        <<- ~>> ␣

    jusqu’ [au-boutiste+s|au-boutisme+s]
        <<- ~>> ␣

    notre père
        <<- morph(<1, ":D.*:[mp]") ~>> ␣
        <<- __also__ =>> define(\1, [":N:m:i"])

    presqu’ [>ile|>île]
        <<- ~>> ␣
        <<- =>> change_meta(\1, "WORD")

    *NUM : *NUM
        <<- space_after(\1, 0, 0) and space_after(\1, 0, 0) ~>> ␣

................................................................................
__fusions_noms_communs_séparés_slah__
    *WORD  /  *WORD
        <<- space_after(\1, 0, 0) and space_after(\2, 0, 0) and morph(\1, ":N") and morph(\-1, ":N") ~>> ␣
        <<- =>> define(\1, [":N:e:i"])


__fusions_noms_propres__
    d’ Alembert
    d’ Estaing
    de Gaulle
    de Broglie
    des Cars
    du Bellay
    du Guesclin
    La Bruyère
    La Fayette
    La Fontaine
        <<- ~>> ␣
        <<- =>> define(\1, [":M2:e:i"])

    cac  40
        <<- ~>> ␣

    France [2|3|4|5|0|O]
        <<- ~>> ␣

    Peugeot  ~^\d0\d\d?$
................................................................................
        <<- analyse_with_next(\1, " ", ":") ~>> ␣
        <<- __else__ and morph(\1, ":M") and morph(\2, ":V", ":[GM]") =>> define(\2, [":M2"])

    Me  ~^[A-ZÀÂÉÈÊÎÔ].
        <<- =>> define(\1, [":T"])
        <<- ~1>> *





    [la|cette]  ~^[A-ZÀÂÉÈÊÎÔ].  ?~^[A-ZÀÂÉÈÊÎÔ].¿  ?~^[A-ZÀÂÉÈÊÎÔ].¿  [Administration|Area|Army|Assocation|Avenue|Chamber|Church|City|Community|Court|Company|Corporation|Cup|Enterprise|Foundation|Fraternity|Gallery|Highway|House|Initiative|League|Library|Mansion|Nation|Navy|Organization|Reserve|Road|River|Sea|Society|Station|Sorority|Tavern|Tower|University|Valley]
        <<- ~2:0>> ␣
        <<- =>> define(\2, [":MP:f:s"])

    [le|au|du|ce]  ~^[A-ZÀÂÉÈÊÎÔ].  ?~^[A-ZÀÂÉÈÊÎÔ].¿  ?~^[A-ZÀÂÉÈÊÎÔ].¿  [Act|Building|Bureau|Casino|Castle|Center|Championship|Club|College|Comity|Consortium|Cottage|Covent|Day|Desert|Forum|Hall|Garden|Hospital|Hostel|Institute|Magazine|Manor|Monastery|Mount|Museum|News|Newspaper|Ocean|Office|Opera|Park|Party|Palace|Post|Restaurant|State|Theatre|Tournament]
        <<- ~2:0>> ␣
        <<- =>> define(\2, [":MP:m:s"])

    the  ~^[A-ZÀÂÉÈÊÎÔ].  ?~^[A-ZÀÂÉÈÊÎÔ].¿  ?~^[A-ZÀÂÉÈÊÎÔ].¿  [Administration|Area|Army|Assocation|Avenue|Chamber|Church|City|Community|Court|Company|Corporation|Cup|Enterprise|Foundation|Fraternity|Gallery|Highway|House|Initiative|League|Library|Mansion|Nation|Navy|Organization|Reserve|Road|River|Sea|Society|Station|Sorority|Tavern|Tower|University|Valley]
    the  ~^[A-ZÀÂÉÈÊÎÔ].  ?~^[A-ZÀÂÉÈÊÎÔ].¿  ?~^[A-ZÀÂÉÈÊÎÔ].¿  [Act|Building|Bureau|Casino|Castle|Center|Championship|Club|College|Comity|Consortium|Cottage|Covent|Day|Desert|Forum|Hall|Garden|Hospital|Hostel|Institute|Magazine|Manor|Monastery|Mount|Museum|News|Newspaper|Ocean|Office|Opera|Park|Party|Palace|Post|Restaurant|State|Theatre|Tournament]
        <<- ~2:0>> ␣
        <<- =>> define(\2, [":MP:e:s"])

    ~^[A-ZÀÂÉÈÊÎÔ]. Airways
        <<- ~>> ␣
        <<- =>> define(\2, [":MP:e:i"])

................................................................................

    en cour martiale
    en cour [de|d’] [cassation|justice]
    en cour d’ >assise
        <<- !1:2>>

    en cour
        <<- /conf/ not value(>1, "|suprême|fédérale|")
        ->> en cours                                        && Confusion probable. Une cour… Un cours… Adjectif : court(e).

    [<start>|,|en|un|le|ce|mon|notre|votre|leur|des|les|mes|tes|ses|ces|nos|vos|leurs|quelques|plusieurs|certains] [court+s] [de|d’]
        || [allemand|anglais|arabe|arabe|bengali|bhodjpouri|cantonais|coréen|égyptien|espagnol|français|grec|gujarati|haoussa|hébreu|hindi|indonésien|italien|italien|latin|japonais|javanais|mandarin|marathi|minnan|ourdou|pendjabi|persan|portugais|russe|sanskrit|sanscrit|swahili|tamoul|thaï|turc|tégoulou|vietnamien|wu]
    [<start>|,|en|un|le|ce|mon|notre|votre|leur|des|les|mes|tes|ses|ces|nos|vos|leurs|quelques|plusieurs|certains] [court+s] [de|d’]
        || [>administration|>agriculture|>agronomie|>art|>biologie|>chant|>commerce|>culture|>cristallographie|>conduite|>cuisine|>danse|>dessin|>ébénisterie|>écriture|>épistémologie|>droit|>éducation|>électronique|>électrotechnique|>élocution|>éthique|>géographie|>gestion|>histoire|>karaté|>kung-fu|>informatique|>langue|>lettre|>littérature|>orientation|>morale|maintien|>mathématique|>math|>mécanique|>médecine|>menuiserie|>musique|>odontologie|>pâtisserie|>peinture|>philosophie|>philo|>physique|>programmation|>psychologie|>science|>sport|>théâtre|>théologie]
        <<- /conf/ -2>> cours                               && Confusion probable : “court” signifie “de peu de longueur”. Pour un enseignement, écrivez “cours”.|https://fr.wiktionary.org/wiki/cours

................................................................................
    >homme d’ âge mûr
    >homme à poigne
    >homme à tout faire
    >horaire à rallonge
    >hôtel [de|d’] ville
    >hôtesse d’ accueil
    >infirmier [de|d’] garde
    >ingénieur du son
    >inspection [de|d’] routine
    >instinct [de|d’] survie
    >interface [utilisateur+s]
    >intermittent du spectacle
    >invité d’ honneur
    >invité surprise
    >issue de secours
................................................................................
TEST: les avais-tu {{acheté}} là-bas ?
TEST: les ont-ils {{détecté}} ?
TEST: les avaient-ils {{détectez}} ?


!!
!!
!!!! Participes passés: Accords avec l’adjectif précédant le pronom                               !!
!!
!!

__ppas_adj_accord_je_tu__
    <start>  *WORD  ?,¿  [je|j’|tu|iel]
        <<- /ppas/ morph(\2, ":A.*:p", ":[GEMWPsi]") and not tag(\2, "_exctx_")
        -2>> =suggSing(\2)                                                      && Si cet adjectif se réfère au pronom « \-1 », l’adjectif devrait être au singulier (et accordé en genre).
................................................................................
!!! Processeur: purge des préverbes                                                               !!
!!!
!!!

__purge_préverbes1__
    [ne|n’|me|m’|te|se|s’|y]  @:(?:[123][sp]|P|Y)¬:X|>rien/
        <<- ~1>> *
        <<- /-1>> _ngn_

    t’  @:(?:[123][sp]|P|Y)¬:(?:X|2s)|>(?:rien|ie?ls?|elles?|on)/
        <<- ~1>> *
        <<- /-1>> _ngn_

    le    @:(?:[123][sp]|P|Y)¬:(?:[NA].*:[me]:[si]|G|M)
    la    @:(?:[123][sp]|P|Y)¬:(?:[NA].*:[fe]:[si]|G|M)
    l’    @:(?:[123][sp]|P|Y)¬:(?:[NA].*:[si]|G|M)
    les   @:(?:[123][sp]|P|Y)¬:(?:[NA].*:[pi]|G|M)
    leur  @:(?:[123][sp]|P|Y)¬:(?:[NA].*:[si]|G|M)
        <<- \2.islower() ~1>> *
        <<- /-1>> _ngn_

    en    @:(?:[123][sp]|P|Y)¬:[NA]
        <<- \2.islower() and not (value(\2, "|attendant|admettant|") and value(>1, "|que|qu’|")) ~1>> *
        <<- /-1>> _ngn_

    nous  @:(?:[123][sp]|P|Y)¬:1p
        <<- \2.islower() and not (morph(<1, ":1p") and not value(<1, "|sachons|veuillons|allons|venons|partons|") and value(<2, "|<start>|,|")) ~1>> *
        <<- /-1>> _ngn_

    vous  @:(?:[123][sp]|P|Y)¬:2p
        <<- \2.islower() and not (morph(<1, ":2p") and not value(<1, "|sachez|veuillez|allez|venez|partez|") and value(<2, "|<start>|,|")) ~1>> *
        <<- /-1>> _ngn_

    lui   @:(?:[123][sp]|P|Y)¬:3s
        <<- not morph(<1, ":R") ~1>> *
        <<- /-1>> _ngn_

    [je|j’|il|on]  le   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":[123]s") or not morph(\3, ":N.*:[me]:[si]") ~2>> *
        <<- /-1>> _ngn_

    [je|j’|il|on]  la   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":[123]s") or not morph(\3, ":N.*:[fe]:[si]") ~2>> *
        <<- /-1>> _ngn_

    [je|j’|il|on]  [l’|leur]   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":[123]s") or not morph(\3, ":N.*:[si]") ~2>> *
        <<- /-1>> _ngn_

    [je|j’|il|on]  les  @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":[123]s") or not morph(\3, ":N.*:[pi]") ~2>> *
        <<- /-1>> _ngn_

    [je|j’|il|on]  en  @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":[123]s") or not morph(\3, ":[NA]") ~2>> *
        <<- /-1>> _ngn_

    tu  le   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:[123]s|V0)") or not morph(\3, ":N.*:[me]:[si]") ~2>> *
        <<- /-1>> _ngn_

    tu  la   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:[123]s|V0)") or not morph(\3, ":N.*:[fe]:[si]") ~2>> *
        <<- /-1>> _ngn_

    tu  [l’|leur]   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:[123]s|V0)") or not morph(\3, ":N.*:[si]") ~2>> *
        <<- /-1>> _ngn_

    tu  les  @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:[123]s|V0)") or not morph(\3, ":N.*:[pi]") ~2>> *
        <<- /-1>> _ngn_

    tu  en  @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:[123]s|V0)") or not morph(\3, ":[NA]") ~2>> *
        <<- /-1>> _ngn_

    [lui|celui-là|celui-ci]  le   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:3s|R)") or not morph(\3, ":N.*:[me]:[si]") ~2>> *
        <<- /-1>> _ngn_

    [lui|celui-là|celui-ci]  la   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:3s|R)") or not morph(\3, ":N.*:[fe]:[si]") ~2>> *
        <<- /-1>> _ngn_

    [lui|celui-là|celui-ci]  [l’|leur]   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:3s|R)") or not morph(\3, ":N.*:[si]") ~2>> *
        <<- /-1>> _ngn_

    [lui|celui-là|celui-ci]  les  @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:3s|R)") or not morph(\3, ":N.*:[pi]") ~2>> *
        <<- /-1>> _ngn_

    [lui|celui-là|celui-ci]  en  @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:3s|R)") or not morph(\3, ":[NA]") ~2>> *
        <<- /-1>> _ngn_

    [elle|iel|celle-là|celle-ci]  le   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:3s|R)") or not morph(\3, ":N.*:[me]:[si]") ~2>> *
        <<- /-1>> _ngn_

    [elle|iel|celle-là|celle-ci]  la   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:3s|R)") or not morph(\3, ":N.*:[fe]:[si]") ~2>> *
        <<- /-1>> _ngn_

    [elle|iel|celle-là|celle-ci]  [l’|leur]   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:3s|R)") or not morph(\3, ":N.*:[si]") ~2>> *
        <<- /-1>> _ngn_

    [elle|iel|celle-là|celle-ci]  les  @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:3s|R)") or not morph(\3, ":N.*:[pi]") ~2>> *
        <<- /-1>> _ngn_

    [elle|iel|celle-là|celle-ci]  en  @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:3s|R)") or not morph(\3, ":[NA]") ~2>> *
        <<- /-1>> _ngn_

    nous  le   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:1p|R)") or not morph(\3, ":N.*:[me]:[si]") ~2>> *
        <<- /-1>> _ngn_

    nous  la   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:1p|R)") or not morph(\3, ":N.*:[fe]:[si]") ~2>> *
        <<- /-1>> _ngn_

    nous  [l’|leur]   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:1p|R)") or not morph(\3, ":N.*:[si]") ~2>> *
        <<- /-1>> _ngn_

    nous  les  @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:1p|R)") or not morph(\3, ":N.*:[pi]") ~2>> *
        <<- /-1>> _ngn_

    nous  en  @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:1p|R)") or not morph(\3, ":[NA]") ~2>> *
        <<- /-1>> _ngn_

    vous  le   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:2p|R)") or not morph(\3, ":N.*:[me]:[si]") ~2>> *
        <<- /-1>> _ngn_

    vous  la   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:2p|R)") or not morph(\3, ":N.*:[fe]:[si]") ~2>> *
        <<- /-1>> _ngn_

    vous  [l’|leur]   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:2p|R)") or not morph(\3, ":N.*:[si]") ~2>> *
        <<- /-1>> _ngn_

    vous  les  @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:2p|R)") or not morph(\3, ":N.*:[pi]") ~2>> *
        <<- /-1>> _ngn_

    vous  en  @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:2p|R)") or not morph(\3, ":[NA]") ~2>> *
        <<- /-1>> _ngn_

    ils  le   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":3p") or not morph(\3, ":N.*:[me]:[si]") ~2>> *
        <<- /-1>> _ngn_

    ils  la   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":3p") or not morph(\3, ":N.*:[fe]:[si]") ~2>> *
        <<- /-1>> _ngn_

    ils  [l’|leur]   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":3p") or not morph(\3, ":N.*:[si]") ~2>> *
        <<- /-1>> _ngn_

    ils  les  @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":3p") or not morph(\3, ":N.*:[pi]") ~2>> *
        <<- /-1>> _ngn_

    ils  en  @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":3p") or not morph(\3, ":[NA]") ~2>> *
        <<- /-1>> _ngn_

    [eux|ceux-là|ceux-ci]  le   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":3p") or not morph(\3, ":N.*:[me]:[si]") ~2>> *
        <<- /-1>> _ngn_

    [eux|ceux-là|ceux-ci]  la   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":3p") or not morph(\3, ":N.*:[fe]:[si]") ~2>> *
        <<- /-1>> _ngn_

    [eux|ceux-là|ceux-ci]  [l’|leur]   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":3p") or not morph(\3, ":N.*:[si]") ~2>> *
        <<- /-1>> _ngn_

    [eux|ceux-là|ceux-ci]  les  @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":3p") or not morph(\3, ":N.*:[pi]") ~2>> *
        <<- /-1>> _ngn_

    [eux|ceux-là|ceux-ci]  en  @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":3p") or not morph(\3, ":[NA]") ~2>> *
        <<- /-1>> _ngn_

    [elles|iels|celles-là|celles-ci]  le   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:3p|R)") or not morph(\3, ":N.*:[me]:[si]") ~2>> *
        <<- /-1>> _ngn_

    [elles|iels|celles-là|celles-ci]  la   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:3p|R)") or not morph(\3, ":N.*:[fe]:[si]") ~2>> *
        <<- /-1>> _ngn_

    [elles|iels|celles-là|celles-ci]  [l’|leur]   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:3p|R)") or not morph(\3, ":N.*:[si]") ~2>> *
        <<- /-1>> _ngn_

    [elles|iels|celles-là|celles-ci]  les  @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:3p|R)") or not morph(\3, ":N.*:[pi]") ~2>> *
        <<- /-1>> _ngn_

    [elles|iels|celles-là|celles-ci]  en  @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:3p|R)") or not morph(\3, ":[NA]") ~2>> *
        <<- /-1>> _ngn_

    [je|j’|il|on|ils]  [nous|vous|lui]  @:(?:[123][sp]|P|Y)
        <<- ~2>> *
        <<- /-1>> _ngn_

    tu  [nous|vous|lui]  @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":V0") ~2>> *
        <<- /-1>> _ngn_

    [lui|celui-là|celui-ci]          [nous|vous|lui]  @:(?:[123][sp]|P|Y)
    [elle|celle-là|celle-ci|iel]     [nous|vous|lui]  @:(?:[123][sp]|P|Y)
    [nous|vous]                      [nous|vous|lui]  @:(?:[123][sp]|P|Y)
    [eux|ceux-là|ceux-ci]            [nous|vous|lui]  @:(?:[123][sp]|P|Y)
    [elles|celles-là|celles-ci|iels] [nous|vous|lui]  @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":R") ~2>> *
        <<- /-1>> _ngn_


__purge_préverbes2__
    nous              [le|la|l’|les|en|y]  @:(?:[123][sp]|P|Y)¬:(?:X|1p)
    vous              [le|la|l’|les|en|y]  @:(?:[123][sp]|P|Y)¬:(?:X|2p)
    [me|m’|te|se|s’]  [le|la|l’|les|en|y]  @:(?:[123][sp]|P|Y)¬:X
    [le|la|l’|les]    [lui|leur|en|y]      @:(?:[123][sp]|P|Y)¬:X
    leur              en                   @:(?:[123][sp]|P|Y)¬:X
        <<- ~1:2>> *
        <<- /-1>> _ngn_

    lui               en                   @:(?:[123][sp]|P|Y)¬:X
        <<- not morph(<1, ":(?:R|3s)") ~1:2>> *
        <<- /-1>> _ngn_

    t’  [le|la|l’|les|en|y]  @:(?:[123][sp]|P|Y)¬:X
        <<- not morph(\3, ":2s") or value(<1, "|je|j’|tu|il|elle|on|nous|vous|ils|elles|iel|iels|") ~1:2>> *
        <<- ~2>> *
        <<- /-1>> _ngn_


__purge_préverbes_négation__
    [ne|n’]  [le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]  @:(?:[123][sp]|P|Y)¬:X
    [ne|n’]  [me|m’|te|t’|se|s’|nous|vous]  [le|la|l’|les|en|y]        @:(?:[123][sp]|P|Y)¬:X
    [ne|n’]  [le|la|l’|les]                 [lui|leur|en|y]            @:(?:[123][sp]|P|Y)¬:X
    [ne|n’]  [lui|leur]                     en                         @:(?:[123][sp]|P|Y)¬:X
        <<- ~1:-2>> *
        <<- /-1>> _ngn_


__purge_proposition_subordonnée__
    [que|qu’]   je                      ?[ne|n’]¿   ?[le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿  @V[123].*:1s    @:[123][sp]
    [que|qu’]   je                      ?[ne|n’]¿   [me|m’|te|t’|se|s’|nous|vous]   [le|la|l’|les|en|y]         @V[123].*:1s    @:[123][sp]
    [que|qu’]   je                      ?[ne|n’]¿   [le|la|l’|les]                  [lui|leur|en|y]             @V[123].*:1s    @:[123][sp]
    [que|qu’]   je                      ?[ne|n’]¿   [lui|leur|y]                    en                          @V[123].*:1s    @:[123][sp]
................................................................................
    [que|qu’]   [ils|elles|iels]        ?[ne|n’]¿   [le|la|l’|les]                  [lui|leur|en|y]             @:V0.*:3p    @:Q¬:G   @:[123][sp]
    [que|qu’]   [ils|elles|iels]        ?[ne|n’]¿   [lui|leur|y]                    en                          @:V0.*:3p    @:Q¬:G   @:[123][sp]
    [que|qu’]   $:M et $:M              ?[ne|n’]¿   ?[le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿  @:V0.*:3p    @:Q¬:G   @:[123][sp]
    [que|qu’]   $:M et $:M              ?[ne|n’]¿   [me|m’|te|t’|se|s’|nous|vous]   [le|la|l’|les|en|y]         @:V0.*:3p    @:Q¬:G   @:[123][sp]
    [que|qu’]   $:M et $:M              ?[ne|n’]¿   [le|la|l’|les]                  [lui|leur|en|y]             @:V0.*:3p    @:Q¬:G   @:[123][sp]
    [que|qu’]   $:M et $:M              ?[ne|n’]¿   [lui|leur|y]                    en                          @:V0.*:3p    @:Q¬:G   @:[123][sp]
        <<- morph(<1, ":N", ":V") ~1:-2>> *
        <<- /-1>> _ngn_


__purge_substantifs_comme_lui_elle__
    <start>  les  *WORD  comme  [moi|toi|nous|vous|lui|elle|eux|elles|celui-là|celui-ci|celle-là|celle-ci|ceux-là|ceux-ci|celles-là|celles-ci]
    <start>  un   *WORD  comme  [moi|toi|nous|vous|lui|celui-là|celui-ci|ceux-là|ceux-ci]
    <start>  une  *WORD  comme  [moi|toi|nous|vous|elle|elles|celle-là|celle-ci|celles-là|celles-ci]
        <<- ~-2:0>> *
................................................................................

__conj_le_la_leur_nom__
    [le|la|l’|leur]  *WORD  @:V¬:(?:3s|P|Y|3p!|G|M)
        <<- /conj/ not tag(\2, "_enum_") and morph(<1, ":C|<start>|>,", ":[YP]") and morph(\2, ":[NA].*:[si]", ":G")
            and not ( (value(\2, "|dizaine|douzaine|quinzaine|vingtaine|trentaine|quarantaine|cinquantaine|soixantaine|centaine|majorité|minorité|millier|partie|poignée|tas|paquet|moitié|")
                        or tag_before(\1, "_ni_") or value(<1, "|et|ou|")) and morph(\3, ":3?p") ) and not checkAgreement(\2, \3)
            and not ( morph(\2, "(?:[123][sp]|P)") and not value(<1, "|<start>|,|") ) >>>
        <<- /conj/ not tag(\-1, "_ngn_") and morph(\3, ":A.*:p") or (morph(\3, ":N.*:p") and morph(\2, ":A"))
        -3>> =suggVerb(\3, ":3s", suggSing)                                                         && Accord avec “\1 \2…” incorrect. Conjugaison erronée ou accord nom/adjectif incorrect.
        <<- /conj/ __else__ -3>> =suggVerb(\3, ":3s")                                               && Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du singulier.

    [le|la|l’|leur]  *WORD  qui  @:V¬:(?:3s|P|3p!|G|M)
        <<- /conj/ not tag(\2, "_enum_") and morph(<1, ":C|<start>|>,", ":[YP]") and morph(\2, ":[NA].*:[si]", ":G")
            and not ( (value(\2, "|dizaine|douzaine|quinzaine|vingtaine|trentaine|quarantaine|cinquantaine|soixantaine|centaine|majorité|minorité|millier|partie|poignée|tas|paquet|moitié|")
                        or tag_before(\1, "_ni_") or value(<1, "|et|ou|")) and morph(\4, ":3p") )
        -4>> =suggVerb(\4, ":3s")                                                                   && Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du singulier.
................................................................................


__conj_det_sing_nom__
    [un|ce|cet|mon|ton|son|notre|votre]  *WORD  @:V¬:(?:3s|P|Y|3p!|G|M)
        <<- /conj/ not tag(\2, "_enum_") and morph(<1, ":C|<start>|>,", ":[YP]") and morph(\2, ":[NA].*:[me]:[si]", ":G")
            and not ( (value(\2, "|dizaine|douzaine|quinzaine|vingtaine|trentaine|quarantaine|cinquantaine|soixantaine|centaine|majorité|minorité|millier|partie|poignée|tas|paquet|moitié|")
                        or tag_before(\1, "_ni_") or value(<1, "|et|ou|")) and morph(\3, ":3?p") ) and not checkAgreement(\2, \3) >>>
        <<- /conj/ not tag(\-1, "_ngn_") and morph(\3, ":A.*:p") or (morph(\3, ":N.*:p") and morph(\2, ":A"))
        -3>> =suggVerb(\3, ":3s", suggSing)                                                         && Accord avec “\1 \2…” incorrect. Conjugaison erronée ou accord nom/adjectif incorrect.
        <<- /conj/ __else__ -3>> =suggVerb(\3, ":3s")                                               && Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du singulier.

    [une|cette|mon|ton|son|ma|ta|sa|notre|votre]  *WORD  @:V¬:(?:3s|P|Y|3p!|G|M)
        <<- /conj/ not tag(\2, "_enum_") and morph(<1, ":C|<start>|>,", ":[YP]") and morph(\2, ":[NA].*:[fe]:[si]", ":G")
            and not ( (value(\2, "|dizaine|douzaine|quinzaine|vingtaine|trentaine|quarantaine|cinquantaine|soixantaine|centaine|majorité|minorité|millier|partie|poignée|tas|paquet|moitié|")
                        or tag_before(\1, "_ni_") or value(<1, "|et|ou|")) and morph(\3, ":3?p") ) and not checkAgreement(\2, \3) >>>
        <<- /conj/ not tag(\-1, "_ngn_") and morph(\3, ":A.*:p") or (morph(\3, ":N.*:p") and morph(\2, ":A"))
        -3>> =suggVerb(\3, ":3s", suggSing)                                                         && Accord avec “\1 \2…” incorrect. Conjugaison erronée ou accord nom/adjectif incorrect.
        <<- /conj/ __else__ -3>> =suggVerb(\3, ":3s")                                               && Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du singulier.

    [un|une|ce|cet|cette|mon|ton|son|ma|ta|sa|notre|votre]  *WORD  qui  @:V¬:(?:3s|P|3p!|G|M)
        <<- /conj/ not tag(\2, "_enum_") and morph(<1, ":C|<start>|>,", ":[YP]") and morph(\2, ":[NA].*:[si]", ":G")
            and not ( (value(\2, "|dizaine|douzaine|quinzaine|vingtaine|trentaine|quarantaine|cinquantaine|soixantaine|centaine|majorité|minorité|millier|partie|poignée|tas|paquet|moitié|")
                        or tag_before(\1, "_ni_") or value(<1, "|et|ou|")) and morph(\4, ":3p") )
        -4>> =suggVerb(\4, ":3s")                                                                   && Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du singulier.

TEST: Tu devrais le savoir, ce roman-là de Jean-Paul Sartre {{es}} passionnant.
TEST: Cette confusion qui {{donnent}} le tournis.
TEST: tu sais, une hausse de 2 % {{satisfais}} tout le monde                                        ->> satisfait
TEST: tu sais, une petite {{donnes}} satisfaction
TEST: tu penses mal, cet homme {{mens}}
TEST: J’aimerais aussi que mon problème {{sois}} réglé.                                             ->> soit
................................................................................
TEST: elles vont toutes aller faire un tour


__conj_det_plur_nom__
    [ces|mes|tes|ses|nos|vos|leurs|quelques|maints]  @:[NA].*:[pi]¬:V0  @:V¬:(?:3p|P|Y|G|M|A.*:[pi])
        <<- /conj/ morph(<1, ":Cs|<start>|>,")
            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 tag(\-1, "_ngn_") and morph(\3, ":A.*:s") or (morph(\3, ":N.*:s") and morph(\2, ":A"))
        -3>> =suggVerb(\3, ":3p", suggPlur)                                                         && Accord avec « \1 \2… » incorrect. Conjugaison erronée ou accord nom/adjectif incorrect.
        <<- /conj/ __else__ -3>> =suggVerb(\3, ":3p")                                               && Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du pluriel.

    [ces|mes|tes|ses|nos|vos|leurs|quelques|maints]  @:[NA].*:[pi]¬:V0  qui  @:V¬:(?:3p|P|Y|G|M|A.*:e:[pi])
        <<- /conj/ morph(<1, ":Cs|<start>|>,")
            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: Ces attaques à main armée {{donne}} la chair de poule.
................................................................................

__conj_les_nom__
    les  @:[NA].*:[pi]¬:V0  @:V¬:(?:3p|P|Y|G|M)
        <<- /conj/ morph(<1, ":Cs|<start>|>,")
            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)
            and not ( morph(\2, "(?:[123][sp]|P)") and not value(<1, "|<start>|,|") ) >>>
        <<- /conj/ not tag(\-1, "_ngn_") and morph(\3, ":A.*:s") or (morph(\3, ":N.*:s") and morph(\2, ":A"))
        -3>> =suggVerb(\3, ":3p", suggPlur)                                                         && Accord avec “\1 \2…” incorrect. Conjugaison erronée ou accord nom/adjectif incorrect.
        <<- /conj/ __else__ -3>> =suggVerb(\3, ":3p")                                               && Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du pluriel.

    les  @:[NA].*:[pi]  qui  @:V¬:(?:3p|P|Y|G|M)
        <<- /conj/ morph(<1, ":Cs|<start>|>,")
            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…
TEST: Les hommes comme celui-là {{mange}} comme deux.
................................................................................

__conj_certains_certaines_plusieurs_nom__
    certains  @:[NA].*:[pi]  @:V¬:(?:3p|P|Y|G|M)
        <<- /conj/ morph(<1, ":Cs|<start>|>,")
            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)
            and not ( morph(\2, "(?:[123][sp]|P)") and not value(<1, "|<start>|,|") ) >>>
        <<- /conj/ not tag(\-1, "_ngn_") and morph(\3, ":A.*:s") or (morph(\3, ":N.*:s") and morph(\2, ":A"))
        -3>> =suggVerb(\3, ":3p", suggMasPlur)                                                      && Accord avec “\1 \2…” incorrect. Conjugaison erronée ou accord nom/adjectif incorrect.
        <<- /conj/ __else__ -3>> =suggVerb(\3, ":3p")                                               && Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du pluriel.

    certaines  @:[NA].*:[pi]  @:V¬:(?:3p|P|Y|G|M)
        <<- /conj/ morph(<1, ":Cs|<start>|>,")
            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)
            and not ( morph(\2, "(?:[123][sp]|P)") and not value(<1, "|<start>|,|") ) >>>
        <<- /conj/ not tag(\-1, "_ngn_") and morph(\3, ":A.*:s") or (morph(\3, ":N.*:s") and morph(\2, ":A"))
        -3>> =suggVerb(\3, ":3p", suggFemPlur)                                                      && Accord avec “\1 \2…” incorrect. Conjugaison erronée ou accord nom/adjectif incorrect.
        <<- /conj/ __else__ -3>> =suggVerb(\3, ":3p")                                               && Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du pluriel.

    plusieurs  @:[NA].*:[pi]  @:V¬:(?:3p|P|Y|G|M)
        <<- /conj/ morph(<1, ":Cs|<start>|>,")
            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)
            and not ( morph(\2, "(?:[123][sp]|P)") and not value(<1, "|<start>|,|") ) >>>
        <<- /conj/ not tag(\-1, "_ngn_") and morph(\3, ":A.*:s") or (morph(\3, ":N.*:s") and morph(\2, ":A"))
        -3>> =suggVerb(\3, ":3p", suggPlur)                                                         && Accord avec “\1 \2…” incorrect. Conjugaison erronée ou accord nom/adjectif incorrect.
        <<- /conj/ __else__ -3>> =suggVerb(\3, ":3p")                                               && Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du pluriel.

    [certains|certaines|plusieurs]  @:[NA].*:[pi]  qui  @:V¬:(?:3p|P|Y|G|M)
        <<- /conj/ morph(<1, ":Cs|<start>|>,")
            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 chattes {{danse}}
TEST: certains hommes {{marchande}} sans cesse
TEST: tu sais, certains filtres {{donnes}} de mauvais résultats
TEST: certaines femmes {{danse}} beaucoup
TEST: tu sais, certaines danses {{dérive}} d’autres
TEST: certaines demandes qui {{donne}} le tournis.