Grammalecte  Check-in [663cc65183]

Overview
Comment:[fr] conversion: regex rules -> graph rules
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | fr | rg
Files: files | file ages | folders
SHA3-256: 663cc6518364c113ce4c44297357614c0f3aa8fc2a2b59c9a24055c7fa97e1d9
User & Date: olr on 2018-07-26 11:51:04
Other Links: branch diff | manifest | tags
Context
2018-07-27
08:32
[fr] conversion: regex rules -> graph rules check-in: 070d93f9ad user: olr tags: fr, rg
2018-07-26
11:51
[fr] conversion: regex rules -> graph rules check-in: 663cc65183 user: olr tags: fr, rg
08:31
[core] gc engine: use stored morphologies in tokens if they exist check-in: eecbc6012a user: olr tags: core, rg
Changes

Modified gc_lang/fr/rules.grx from [7d831c71bf] to [e57d770e9f].

6502
6503
6504
6505
6506
6507
6508
6509
6510
6511
6512
6513
6514
6515
6516
6517
6518
6519
6520
6521
6522
6523
6524
6525
6526
6527
6528
6529
6530
6531
6532
6533
6534
6535
6536
6537
6538
....
6584
6585
6586
6587
6588
6589
6590
6591
6592
6593
6594
6595
6596
6597
6598
6599
6600
6601
6602
....
6663
6664
6665
6666
6667
6668
6669
6670
6671
6672
6673
6674
6675
6676
6677
....
6706
6707
6708
6709
6710
6711
6712
6713
6714
6715
6716
6717
6718
6719
6720
....
6916
6917
6918
6919
6920
6921
6922
6923
6924
6925
6926
6927
6928
6929
6930
....
7001
7002
7003
7004
7005
7006
7007
7008
7009
7010
7011
7012
7013
7014
7015
7016
7017
7018
7019
7020
7021
7022
7023
....
7055
7056
7057
7058
7059
7060
7061
7062
7063
7064
7065
7066
7067
7068
7069
....
7169
7170
7171
7172
7173
7174
7175
7176
7177
7178
7179
7180
7181
7182
7183
7184
7185
7186
7187
7188
7189
....
7195
7196
7197
7198
7199
7200
7201
7202
7203
7204
7205
7206
7207
7208
7209
....
7312
7313
7314
7315
7316
7317
7318
7319
7320
7321
7322
7323
7324
7325
7326
....
7342
7343
7344
7345
7346
7347
7348
7349
7350
7351
7352
7353
7354
7355
7356
7357
....
7863
7864
7865
7866
7867
7868
7869
7870
7871
7872
7873
7874
7875
7876
7877
7878
7879
7880
7881
7882
7883
7884
7885
7886
7887
7888
7889

7890
7891
7892
7893
7894
7895
7896
....
9167
9168
9169
9170
9171
9172
9173

9174
9175
9176
9177
9178
9179
9180
....
9199
9200
9201
9202
9203
9204
9205
9206
9207








9208




































9209
9210
9211
9212
9213
9214
9215
9216
9217
9218
9219
9220
9221
9222
9223
9224
9225
....
9231
9232
9233
9234
9235
9236
9237
9238
9239
9240
9241
9242
9243
9244
9245
....
9247
9248
9249
9250
9251
9252
9253
9254
9255
9256
9257
9258
9259
9260
9261
9262
9263
9264
9265
9266
9267
9268
9269
9270
9271
9272
9273
9274
9275
9276
9277
9278
9279
9280
9281
9282
9283
9284
9285
9286
9287
9288
9289
9290
9291
9292
9293
9294
9295
9296
9297
9298
9299
9300
9301
9302
9303
9304
9305
9306
9307
9308
9309
9310
9311
9312
9313
9314
9315
9316
9317
9318
9319
9320
9321
9322
9323
9324
9325
9326
9327
9328
9329
9330
9331
9332
9333
9334
9335
9336
9337
9338
9339
9340
9341
9342
9343
9344
9345
9346

9347
9348
9349
9350
9351

9352
9353
9354
9355
9356
9357
9358
.....
15300
15301
15302
15303
15304
15305
15306
15307

15308
15309
15310
15311
15312
15313
15314
15315
15316
15317

15318
15319
15320
15321
15322
15323
15324
15325
15326
15327
15328
15329
15330
15331
15332
15333
15334
15335
15336
!!!
!!!
!!! Processeur: épuration des adverbes, locutions adverbiales, interjections et expressions usuelles  !!
!!!
!!!

__purge_dates__
    depuis le           [1er|1ᵉʳ|~\d\d?]  {mois}    ?[dernier|prochain|~\d{2,5}]¿
    [le|du|au]          [1er|1ᵉʳ|~\d\d?]  {mois}    ?[dernier|prochain|~\d{2,5}]¿
    [jusqu’|jusqu]  au  [1er|1ᵉʳ|~\d\d?]  {mois}    ?[dernier|prochain|~\d{2,5}]¿
    à  compter  du      [1er|1ᵉʳ|~\d\d?]  {mois}    ?[dernier|prochain|~\d{2,5}]¿
    en  l’  an  ~\d{2,5}
    en  l’  an  de  grâce  ~\d{2,5}
    en  {mois}  ~\d{2,5}
    [de|d’|D’]  {mois}  ~\d{2,5}
    à  la  {mi_mois}    ?~\d{2,5}¿
        <<- ~>> *

    en  ~\d{2,5}  [,|<end>]
    en  ~\d{2,5}  @:¬:[AN].*:[pi]
    de  ~\d{2,5}  @:A.*:s
        <<- ~1:2>> *

TEST: ils sont depuis le 2 janvier {{parti}} à l’étranger.
TEST: ils sont depuis le 2 janvier 2012 {{parti}} à l’étranger.


__purge_saisons__
    à  l’  [été|automne|hiver]  ~\d{2,4}
    au  printemps  ~\d{2,4}
        <<- ~>> *

TEST: Une étude de 2005 publiée dans le Journal
TEST: Les cinq variantes de la couverture du magazine Wired d’avril 2016 consacrée à Silicon Valley.
TEST: c’est donc la cinquième en 50 ans


................................................................................
    mois        après   mois
    décennie    après   décennie
    année       après   année
    siècle      après   siècle
    génération  après   génération
        <<- ~>> *

    [à|de]  ~\d\d?  h  ?~\d\d?¿
    [à|de]  ~\d\d?  h  ?~\d\d?¿   [du|ce]  [matin|soir]
    [à|de]  ~\d\d?  h  ?~\d\d?¿   de  l’ après-midi
    [à|de]  ~\d\d?  h  ?~\d\d?¿   cet  après-midi
    [à|de]  ~\d\d?  h  ?~\d\d?¿   demain  [matin|soir|après-midi]
        <<- ~>> *

TEST: Le train de 2 h 47 {{arriveraient}} en retard.
TEST: Le train de 2 h 47 du matin {{arriveraient}} en retard.


__purge_prépositions_qqn__
................................................................................
    mutatis     mutandis
        <<- ~>> *


__purge_locutions__
    , [oui|non] ,
    , entre autres ?choses¿ ,
    à ~\d+(?:,\d+|)  %
    à [autrui|bâbord|califourchon|chacun|confesse|contrecœur|contre-cœur|contretemps|demi-mot|foison|grand-peine|loisir|merveille|moitié|nouveau|outrance|peine|perpétuité|présent|raison|rallonge|rebrousse-poil|reculons|regret|renverse|risque|tâtons|tort|tribord|tout-va]
    à aucun prix
    à autre chose
    à bas [cout|coût|prix]
    à bâtons rompus
    à beaucoup près
    à belles dents
................................................................................
    à couper le souffle
    à court terme
    à courte [échéance|portée]
    à des kilomètres à la ronde
    à défaut d’autre chose
    à dose homéopathique
    à durée limitée
    à ~\d+ reprises
    à @:B reprises
    à [plusieurs|quelques|maintes] reprises
    à de  [nombreuses|multiples]  reprises
    à double [titre|tranchant]
    à en juger par [mon|ton|son|notre|votre|leur] expérience
    à en perdre haleine
    à en perdre la tête
................................................................................
    au propre comme au figuré
    au préalable
    au quotidien
    au ras des pâquerettes
    au saut du lit
    au sens [figuré|large|propre]
    au surplus
    au ~[xXvViI]+[eᵉ] siècle
    au-delà du descriptible
    au-dessus [de|d’] {pronom_obj}
    aujourd’hui
    auparavant
    ?tout¿ aussi
    aussitôt
    ?tout¿ au fond [de|d’] {pronom_obj}
................................................................................
    [croyez-le|crois-le] ou [non|pas]
    cul par-dessus tête
    dans [ce|ces] [cas-là|cas-ci]
    dans ce cas [précis|particulier]
    dans ces cas [précis|particuliers]
    dans l’ [idéal|immédiat]
    dans la mesure du possible
    dans les années ~\d\d+
    dans peu de temps
    dans tout [cela|ça|ceci]
    dans très peu de temps
    dans un cas comme dans l’autre
    dans une [certaine|large|moindre] mesure
    début {mois} ~\d\d{2,5}
    au début {mois} ~\d\d{2,5}
    en ce début {mois} ~\d\d{2,5}
    d’ abord
    d’ affilée
    d’ ailleurs
    d’ année en année
    d’ aujourd’hui
    d’ antan
    d’ autant [plus|moins]
................................................................................
    d’ un commun accord
    d’ une autre trempe
    d’ une [façon|manière] ou d’une autre
    d’ une certaine [façon|manière]
    d’ une tout autre ampleur
    d’ une [minute|seconde] à l’ autre
    de-ci ?,¿ de-là
    de ~\d+(?:,\d+|) %
    de [cesse|conserve|facto|fait|guingois|luxe|nouveau|permanence|partout|préférence|profundis|rechange|routine|surcroît|surcroit|visu]
    de A à Z
    de bas (?:en haut|étage)
    de basse [condition|extraction]
    de bon [aloi|cœur|gré|matin|sens|ton]
    de bonne [facture|famille|foi|heure|humeur|grâce|qualité|compagnie]
    de bric et de broc
................................................................................
    debout
    derechef
    donc
    dorénavant
    déjà
    désormais
    depuis @:B [ans|années|mois|semaines|jours|heures|minutes|secondes]
    depuis ~\d+ [ans|années|mois|semaines|jours|heures|minutes|secondes]
    depuis assez longtemps
    depuis belle lurette
    depuis bien longtemps
    depuis de ?très¿ longues années
    depuis des lustres
    depuis les années ~\d\d+
    depuis longtemps
    depuis lors
    depuis peu de temps
    depuis quelque temps
    depuis quelques [secondes|minutes|heures|jours|semaines|mois|trimestres|semestres|années|décennies|siècles|millénaires]
    depuis si longtemps
    depuis toujours
................................................................................
    des [années|mois|siècles|millénaires|décennies|semaines] plus [tôt|tard]
    dès [maintenant|lors|aujourd’hui]
    dès à présent
    dès que possible
    dès [demain|hier] ?[soir|matin|après-midi]¿
    Dieu [m’|t’|l’|nous|vous|les] en [garde|préserve]
    Dieu [m’|t’|lui|nous|vous|leur] en soit témoin
    du ~[xXvViI]+[eᵉ] siècle
    du [Ier|Iᵉʳ|1er|1ᵉʳ] siècle
    du bout des lèvres
    du début à la fin
    du fond du cœur
    du jour au lendemain
    du haut en bas
    du même [acabit|coup|ordre|tonneau]
................................................................................
    en ce [moment|temps-là]
    en ce qui [me|te|le|la|les|nous|vous] [concerne|concernait]
    en cet instant
    encore
    encore une fois
    encore et [encore|toujours]
    enfin
    entre {mois} ?~\d{2,5}¿ et {mois} ?~\d{2,5}¿
    entre chien et loup
    entre de [bonnes|mauvaises] mains
    entre l’ [un|une] et l’ autre
    entre les uns et les autres
    entre [quatre|quatr’|quat’] [zyeux|yeux]
    entre [quatre-zyeux|quatr’zyeux|quat’zyeux|quatre-yeux|quatr’yeux|quat’yeux]
    ensuite
................................................................................
    ici [comme|ou] ailleurs
    ici et [là|maintenant]
    ici même
    ici-bas
    il y a ?très¿ longtemps
    il y a ?très¿ peu de temps
    il y a quelques [secondes|minutes|heures|jours|semaines|mois|année|ans|siècles|millénaires]
    il y a moins de ~\d+ [secondes|minutes|heures|jours|semaines|mois|année|ans|siècles|millénaires]
    il y a ~\d+ [secondes|minutes|heures|jours|semaines|mois|année|ans|siècles|millénaires]
    il y a quelque temps
    il n’y a pas ?si¿ longtemps
    illico ?presto¿
    jadis
    j’ en passe et des [meilleurs|meilleures]
    jour pour jour
    [jusqu’|jusqu] [alors|ici|aujourd’hui|Noël|Pâques]
................................................................................
    je      [t’|vous]   en  [prie|supplie]
    nous    [t’|vous]   en  [prions|supplions]
        <<- ~>> *


# Déterminant + nombre
__p_dét_plur_nombre_nom__
    [les|des|mes|tes|ses|nos|vos|leurs]  ~\d+  @:[NA].*:[pi]¬:(?:V0|3p|Oo|X)|>(?:janvier|février|mars|avril|mai|juin|juillet|ao[ûu]t|septembre|octobre|novembre|décembre|vendémiaire|brumaire|frimaire|nivôse|pluviôse|ventôse|germinal|floréal|prairial|messidor|thermidor|fructidor)
        <<- ~2>> *

    [les|des|mes|tes|ses|nos|vos|leurs]  ~\d+  ou  ~\d+  @:[NA].*:[pi]¬:(?:V0|3p|Oo|X)|>(?:janvier|février|mars|avril|mai|juin|juillet|ao[ûu]t|septembre|octobre|novembre|décembre|vendémiaire|brumaire|frimaire|nivôse|pluviôse|ventôse|germinal|floréal|prairial|messidor|thermidor|fructidor)
        <<- ~2:4>> *

    [les|des]   >numéro  [un|~\d+|@:B]  et  [~\d+|@:B]
        <<- ~3:0>> *

    la  >numéro  un
    la  >numéro  @:B
    la  >numéro  ~\d+
        <<- =>> define(\2, [">numéro/:N:f:s"])
        <<- ~3>> *

    le  numéro  un  @:¬:N:[em]:[is]
        <<- ~3>> *

    >numéro  @:B
    >numéro  ~\d+

        <<- ~2>> *


__mot_composé_avec_là__
    ~-[lL][àÀ]$
        <<- morph(\1, ":[NAQ]", ":G", 0, -3) ~>> =\1[:-3]

................................................................................
        -2>> =suggPlur(\2)                                                                  # Accord de nombre erroné : « \2 » devrait être au pluriel.

TEST: plusieurs {{foi}} par jour.


## Autres pluriels


__gn_certains_accord__
    certains  *WORD
        <<- /gn/ morph(\2, ":[NAQ].*:f", ":[emGWP]") -1>> certaines                         # Accord de genre erroné : « \2 » est féminin.
        <<- /gn/ __also__ and hasMasForm(\2) -2>> =suggMasPlur(\2, True)                    # Accord de genre erroné : « \1 » est un déterminant masculin.
        <<- /gn/ ( morph(\2, ":[NAQ].*:s", ":(?:[ipGWP]|V0)") and not (value(>1, "|et|ou|") and morph(>2, ":[NAQ]")) )
            or \1 in aREGULARPLURAL
        -2>> =suggPlur(\2)                                                                  # Accord de nombre erroné : « \2 » devrait être au pluriel.
................................................................................

TEST: Certaines {{danse}}
TEST: Certains {{chien}}
TEST: {{certains}} des {{nouvelles}} sont à côté de la plaque.
TEST: {{certaines}} des hommes
TEST: Un problème rapporté par certains est l’incapacité à trouver un partenaire


## Cas particuliers













































__gn_det_plur_cas_particuliers__
    [ces|des|mes|tes|ses|nos|vos|leurs|quelques] [même|point|son|ton]
        <<- /gn/ -2>> \1s                                                                   # Accord de nombre erroné : mettez au pluriel.

TEST: des {{son}} que nous entendons jour et nuit.
TEST: j’entends ces {{même}} âneries tous les jours


## Pluriel des groupes

__gn_nombre_de_accord__
    nombre  [de|d’]  *WORD
        <<- /gn/ (morph(\3, ":[NAQ].*:s", ":[ip]|>o(?:nde|xydation|r)/") and morph(<1, ":(?:G|[123][sp])|<start>", ":[AD]"))
            or \3 in aREGULARPLURAL
        -3>> =suggPlur(\3)                                                                  # Ici, « nombre de » devrait probablement être suivi d’un pluriel.

TEST: Je connais nombre d’{{emmerdeur}} et aucun n’est pire que lui.
................................................................................
        -4>> =suggPlur(\4)                                                                  # Avec des « \2 \3 \4 », mettre au pluriel.

TEST: des centaines de {{bête}} à cornes passèrent devant nous.     ->> bêtes
TEST: une multitude d’{{homme}}                                     ->> hommes


## quelque adverbe

__gn_quelque_adverbe__
    quelques  ~^\d+$
        <<- /gn/ -1>> quelque                                                               # Devant un nombre, « quelque » est un adverbe, donc invariable.

    quelques  @:B
        <<- /gn/ \2 != "cents" -1>> quelque                                                 # Devant un nombre, « quelque » est un adverbe, donc invariable.

................................................................................
TEST: Il commande {{quelques}} trois cents hommes.
TEST: {{Quelques}} 120 hommes                                 ->> Quelque
TEST: {{Quelques}} deux cents hommes.                         ->> Quelque
TEST: les quelque 2,5 millions d’habitants
TEST: les quelque 12 000 stations-service



@@@@
@@@@END_GRAPH                                                                                      _
@@@@



## Nombres

__[i]/gn(gn_nombre_lettres_accord)__
    (d(?:eux|ix|ouze)|tr(?:ois|eize)|qua(?:tre(?:-vingt(?:s|-dix)|)|torze|rante)|cinq(?:uante|)|six|sept(?:ante|)|huit(?:ante|)|onze|quinze|seize|vingt|trente|soixante(?:-dix|)|cents?|octante|nonante) +({w_2})  @@0,$
    <<- (morph(\2, ":[NAQ].*:s")
        and not re.search("(?i)^(janvier|février|mars|avril|mai|juin|juillet|ao[ûu]t|septembre|octobre|novembre|décembre|rue|route|ruelle|place|boulevard|avenue|allée|chemin|sentier|square|impasse|cour|quai|chaussée|côte|vendémiaire|brumaire|frimaire|nivôse|pluviôse|ventôse|germinal|floréal|prairial|messidor|thermidor|fructidor)$", \2))
        or \2 in aREGULARPLURAL
    -2>> =suggPlur(@)                                                                               # Accord de nombre erroné avec « \1 » : « \2 » devrait être au pluriel.

TEST: ce sont trois {{idiot}} pas foutus de trouver leur chemin avec un GPS.


__[i]/gn(gn_neuf_accord)__
    (neuf) +({w_2})  @@0,$
    <<- (morph(\2, ":[NAQ].*:s") and not morph(word(-1), ":N", False)
        and not re.search("(?i)^(janvier|février|mars|avril|mai|juin|juillet|ao[ûu]t|septembre|octobre|novembre|décembre|rue|route|ruelle|place|boulevard|avenue|allée|chemin|sentier|square|impasse|cour|quai|chaussée|côte|vendémiaire|brumaire|frimaire|nivôse|pluviôse|ventôse|germinal|floréal|prairial|messidor|thermidor|fructidor)$", \2))
        or \2 in aREGULARPLURAL
    -2>> =suggPlur(@)                                                                               # Accord de nombre erroné avec « \1 » : « \2 » devrait être au pluriel.

TEST: Il a abandonné neuf {{enfant}}.


__[i]/gn(gn_mille_accord)__
    mille +({w_2})  @@$
    <<- (morph(\1, ":[NAQ].*:s") or \1 in aREGULARPLURAL) and not before(r"(?i)\b(?:le|un|ce|du) +$")
    -1>> =suggPlur(@)                                                                               # Accord de nombre erroné avec « mille » : « \1 » devrait être au pluriel.

TEST: On peut trouver mille {{travailleur}} d’un claquement de doigts.


__[i]/gn(gn_01_accord)__
    [01] ({w_2})  @@$
    <<- morph(\1, ":[NAQ].*:p")
        and not re.search("(?i)^(janvier|février|mars|avril|mai|juin|juillet|ao[ûu]t|septembre|octobre|novembre|décembre|rue|route|ruelle|place|boulevard|avenue|allée|chemin|sentier|square|impasse|cour|quai|chaussée|côte|vendémiaire|brumaire|frimaire|nivôse|pluviôse|ventôse|germinal|floréal|prairial|messidor|thermidor|fructidor|Rois|Corinthiens|Thessaloniciens)$", \1)
    -1>> =suggSing(@)                                                                               # Accord de nombre erroné : « \1 » devrait être au singulier.

TEST: 00 heure, 01 heure
TEST: il a adopté 1 {{chiens}}.


__[i]/gn(gn_nombre_chiffres_accord)__
    (?<!/)(\d+) ({w_2})  @@0,$
    <<- not re.search("^0*[01]$", \1)
        and ((morph(\2, ":[NAQ].*:s") and not re.search("(?i)^(janvier|février|mars|avril|mai|juin|juillet|ao[ûu]t|septembre|octobre|novembre|décembre|rue|route|ruelle|place|boulevard|avenue|allée|chemin|sentier|square|impasse|cour|quai|chaussée|côte|vendémiaire|brumaire|frimaire|nivôse|pluviôse|ventôse|germinal|floréal|prairial|messidor|thermidor|fructidor)$", \2))
        or \1 in aREGULARPLURAL)
    -2>> =suggPlur(@)                                                                               # Accord de nombre erroné : « \2 » devrait être au pluriel.

TEST: 22 {{heure}}
TEST: 3 {{heure}}


## quel / quels / quelle / quelles
__[i]/gn(gn_quel_accord)__
    (quel) +({w_2})  @@0,$
    <<- morphex(\2, ":[NAQ].*:f:p", ":(?:V0e|[NAQ].*:[me]:[si])")       -1>> quelles                # Accord de genre et de nombre erroné : « \2 » est féminin et au pluriel.
    <<- __also__ and hasFemForm(\2)                                     -2>> =suggMasSing(@, True)  # Accord de genre et de nombre erroné : « \1 » est masculin et au singulier.
    <<- morphex(\2, ":[NAQ].*:m:p", ":(?:V0e|[NAQ].*:[me]:[si])")       -1>> quels                  # Accord de nombre erroné : « \2 » est au pluriel.
    <<- __also__                                                        -2>> =suggSing(@)           # Accord de nombre erroné : « \1 » est au singulier.
    <<- morphex(\2, ":[NAQ].*:f:[si]", ":(?:V0e|[NAQ].*:[me]:[si])")    -1>> quelle                 # Accord de genre erroné : « \2 » est féminin.
    <<- __also__ and hasFemForm(\2)                                     -2>> =suggMasSing(@, True)  # Accord de genre erroné : « \1 » est masculin.
__[i]/gn(gn_quels_accord)__
    (quels) +({w_2})  @@0,$
    <<- morphex(\2, ":[NAQ].*:f:s", ":(?:V0e|[NAQ].*:[me]:[pi])")       -1>> quelle                 # Accord de genre et de nombre erroné : « \2 » est féminin et au singulier.
    <<- __also__ and hasFemForm(\2)                                     -2>> =suggMasPlur(@, True)  # Accord de genre et de nombre erroné : « \1 » est masculin et au pluriel.
    <<- morphex(\2, ":[NAQ].*:m:s", ":(?:V0e|[NAQ].*:[me]:[pi])")       -1>> quel                   # Accord de nombre erroné : « \2 » est au singulier.
    <<- __also__                                                        -2>> =suggPlur(@)           # Accord de nombre erroné : « \1 » est au pluriel.
    <<- morphex(\2, ":[NAQ].*:f:[pi]", ":(?:V0e|[NAQ].*:[me]:[pi])")    -1>> quelles                # Accord de genre erroné : « \2 » est féminin.
    <<- __also__ and hasFemForm(\2)                                     -2>> =suggMasPlur(@, True)  # Accord de genre erroné : « \1 » est masculin.
__[i]/gn(gn_quelle_accord)__
    (quelle) +({w_2})  @@0,$
    <<- morphex(\2, ":[NAQ].*:m:p", ":(?:V0e|[NAQ].*:[fe]:[si])")       -1>> quels                  # Accord de genre et de nombre erroné : « \2 » est masculin et au pluriel.
    <<- __also__ and hasFemForm(\2)                                     -2>> =suggFemSing(@, True)  # Accord de genre et de nombre erroné : « \1 » est féminin et au singulier.
    <<- morphex(\2, ":[NAQ].*:f:p", ":(?:V0e|[NAQ].*:[fe]:[si])")       -1>> quelles                # Accord de nombre erroné : « \2 » est au pluriel.
    <<- __also__                                                        -2>> =suggSing(@)           # Accord de nombre erroné : « \1 » est au singulier.
    <<- morphex(\2, ":[NAQ].*:m:[si]", ":(?:V0e|[NAQ].*:[fe]:[si])")    -1>> quel                   # Accord de genre erroné : « \2 » est masculin.
    <<- __also__ and hasFemForm(\2)                                     -2>> =suggFemSing(@, True)  # Accord de genre erroné : « \1 » est féminin.
__[i]/gn(gn_quelles_accord)__
    (quelles) +({w_2})  @@0,$
    <<- morphex(\2, ":[NAQ].*:m:s", ":(?:V0e|[NAQ].*:[fe]:[pi])")       -1>> quel                   # Accord de genre et de nombre erroné. « \2 » est masculin et au singulier.
    <<- __also__ and hasFemForm(\2)                                     -2>> =suggFemPlur(@, True)  # Accord de genre et de nombre erroné : « \1 » est féminin et au pluriel.
    <<- morphex(\2, ":[NAQ].*:f:s", ":(?:V0e|[NAQ].*:[fe]:[pi])")       -1>> quelle                 # Accord de nombre erroné : « \2 » est au singulier.
    <<- __also__                                                        -2>> =suggPlur(@)           # Accord de nombre erroné : « \1 » est au pluriel.
    <<- morphex(\2, ":[NAQ].*:m:[pi]", ":(?:V0e|[NAQ].*:[fe]:[pi])")    -1>> quels                  # Accord de genre erroné : « \2 » est masculin.
    <<- __also__ and hasFemForm(\2)                                     -2>> =suggFemPlur(@, True)  # Accord de genre erroné : « \1 » est féminin.

TEST: {{Quelle}} homme.                                       ->> Quel

TEST: {{Quel}} femme.                                         ->> Quelle
TEST: {{Quels}} chanson.                                      ->> Quelle
TEST: {{Quelles}} {{tarés}}.
TEST: Quelle sale journée…
TEST: Quelles drôles de prunes



__[i]/gn(gn_quel_quel_accord_être)__
    (quel(?:le|)) (sont|étaient|ser(?:o|aie)nt|fu(?:r|ss)ent)  @@0,$
    <<- not before(r"\btel(?:le|)s? +$")
    -1>> \1s                                                                                        # Accord de nombre erroné avec “\2”.

................................................................................
#TEST: dès que je le {{verrais}}
TEST: dès qu’il le {{voie}}
TEST: donnant à entendre qu’il avait l’intention de violer Laura dès qu’il en aurait l’occasion


# verbe que + subjonctif
__vmode_qqch_que_subjonctif1__
    [afin|avant|pour|quoi|>permettre|>falloir|>vouloir|>ordonner|>exiger|>désirer|>préférer|>suffire]  [que|qu’|qu]  @:(?:Os|M)  @:I¬:[GYS]

        <<- /vmode/ -4>> =suggVerbMode(\4, ":S", \3)                                                # Après « \1 que », ce verbe devrait être au subjonctif.

    >douter  [que|qu’|qu]  @:(?:Os|M)  @:I¬:(?:[GYSK]|If)
        <<- /vmode/ morph(\1, ":V", ":N") -4>> =suggVerbMode(\4, ":S", \3)                          # Après « \1 que », ce verbe devrait être au subjonctif.

TEST: Il suffit qu’il {{court}} plus
TEST: Je veux qu’il {{finit}} son repas.
TEST: quoi qu’il en {{conclut}}
TEST: Je ne veux pas que tu {{es}} des ennuis
TEST: Avant que tu {{pars}}, je voudrais qu’on discute.

TEST: Nul doute qu’elle nourrira à brève échéance la haine de demain à notre égard.
TEST: Je ne doute pas qu’ils réussiront leur mission.
TEST: Je me doutais bien qu’Apple pourrait marcher
TEST: il ne fait aucun doute qu’Amazon le sait.
TEST: quoi que nous autres hommes ayons pu faire


__vmode_qqch_que_subjonctif2__
    à       condition   [que|qu’|qu]    @:(?:Os|M)      @:I¬:[GYS]
    pour    peu         [que|qu’|qu]    @:(?:Os|M)      @:I¬:[GYS]
    il      peut        [que|qu’|qu]    @:(?:Os|M)      @:I¬:[GYS]
        <<- /vmode/ -5>> =suggVerbMode(\5, ":S", \4)                                                    # Ce verbe devrait être au subjonctif.

TEST: à condition qu’il {{finit}} son boulot.
TEST: pour peu qu’il {{prend}} son devoir sérieux…
TEST: il se peut que nous {{avons}} tort.


# Bien que + subjonctif







|
|
|
|
|
|
|
|
|


|
|
|







|
|







 







|
|
|
|
|







 







|







 







|







 







|







 







|





|
|
|







 







|







 







|





|







 







|







 







|







 







|
|







 







|


|


|




|







|
>







 







>







 








|
>
>
>
>
>
>
>
>

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









<







 







<







 







|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
<
<
<
<
<
<
<
<



<
<
<
<
<
<
<
<
<




<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<

<
>
|
<
<
<
<
>







 







|
>










>











|







6502
6503
6504
6505
6506
6507
6508
6509
6510
6511
6512
6513
6514
6515
6516
6517
6518
6519
6520
6521
6522
6523
6524
6525
6526
6527
6528
6529
6530
6531
6532
6533
6534
6535
6536
6537
6538
....
6584
6585
6586
6587
6588
6589
6590
6591
6592
6593
6594
6595
6596
6597
6598
6599
6600
6601
6602
....
6663
6664
6665
6666
6667
6668
6669
6670
6671
6672
6673
6674
6675
6676
6677
....
6706
6707
6708
6709
6710
6711
6712
6713
6714
6715
6716
6717
6718
6719
6720
....
6916
6917
6918
6919
6920
6921
6922
6923
6924
6925
6926
6927
6928
6929
6930
....
7001
7002
7003
7004
7005
7006
7007
7008
7009
7010
7011
7012
7013
7014
7015
7016
7017
7018
7019
7020
7021
7022
7023
....
7055
7056
7057
7058
7059
7060
7061
7062
7063
7064
7065
7066
7067
7068
7069
....
7169
7170
7171
7172
7173
7174
7175
7176
7177
7178
7179
7180
7181
7182
7183
7184
7185
7186
7187
7188
7189
....
7195
7196
7197
7198
7199
7200
7201
7202
7203
7204
7205
7206
7207
7208
7209
....
7312
7313
7314
7315
7316
7317
7318
7319
7320
7321
7322
7323
7324
7325
7326
....
7342
7343
7344
7345
7346
7347
7348
7349
7350
7351
7352
7353
7354
7355
7356
7357
....
7863
7864
7865
7866
7867
7868
7869
7870
7871
7872
7873
7874
7875
7876
7877
7878
7879
7880
7881
7882
7883
7884
7885
7886
7887
7888
7889
7890
7891
7892
7893
7894
7895
7896
7897
....
9168
9169
9170
9171
9172
9173
9174
9175
9176
9177
9178
9179
9180
9181
9182
....
9201
9202
9203
9204
9205
9206
9207
9208
9209
9210
9211
9212
9213
9214
9215
9216
9217
9218
9219
9220
9221
9222
9223
9224
9225
9226
9227
9228
9229
9230
9231
9232
9233
9234
9235
9236
9237
9238
9239
9240
9241
9242
9243
9244
9245
9246
9247
9248
9249
9250
9251
9252
9253
9254
9255
9256
9257
9258
9259
9260
9261
9262
9263

9264
9265
9266
9267
9268
9269
9270
....
9276
9277
9278
9279
9280
9281
9282

9283
9284
9285
9286
9287
9288
9289
....
9291
9292
9293
9294
9295
9296
9297
9298
9299
9300
9301
9302
9303
9304
9305
9306
9307
9308
9309
9310
9311
9312
9313
9314
9315
9316
9317
9318
9319
9320
9321
9322
9323
9324
9325
9326
9327
9328
9329
9330









9331
9332
9333









9334
9335
9336
9337

































9338

9339
9340




9341
9342
9343
9344
9345
9346
9347
9348
.....
15290
15291
15292
15293
15294
15295
15296
15297
15298
15299
15300
15301
15302
15303
15304
15305
15306
15307
15308
15309
15310
15311
15312
15313
15314
15315
15316
15317
15318
15319
15320
15321
15322
15323
15324
15325
15326
15327
15328
!!!
!!!
!!! Processeur: épuration des adverbes, locutions adverbiales, interjections et expressions usuelles  !!
!!!
!!!

__purge_dates__
    depuis le           [1er|1ᵉʳ|~^\d\d?$]  {mois}    ?[dernier|prochain|~^\d{2,5}$]¿
    [le|du|au]          [1er|1ᵉʳ|~^\d\d?$]  {mois}    ?[dernier|prochain|~^\d{2,5}$]¿
    [jusqu’|jusqu]  au  [1er|1ᵉʳ|~^\d\d?$]  {mois}    ?[dernier|prochain|~^\d{2,5}$]¿
    à  compter  du      [1er|1ᵉʳ|~^\d\d?$]  {mois}    ?[dernier|prochain|~^\d{2,5}$]¿
    en  l’  an  ~^\d{2,5}$
    en  l’  an  de  grâce  ~^\d{2,5}$
    en  {mois}  ~^\d{2,5}$
    [de|d’|D’]  {mois}  ~^\d{2,5}$
    à  la  {mi_mois}    ?~^\d{2,5}$¿
        <<- ~>> *

    en  ~^\d{2,5}$  [,|<end>]
    en  ~^\d{2,5}$  @:¬:[AN].*:[pi]
    de  ~^\d{2,5}$  @:A.*:s
        <<- ~1:2>> *

TEST: ils sont depuis le 2 janvier {{parti}} à l’étranger.
TEST: ils sont depuis le 2 janvier 2012 {{parti}} à l’étranger.


__purge_saisons__
    à  l’  [été|automne|hiver]  ~^\d{2,4}$
    au  printemps  ~^\d{2,4}$
        <<- ~>> *

TEST: Une étude de 2005 publiée dans le Journal
TEST: Les cinq variantes de la couverture du magazine Wired d’avril 2016 consacrée à Silicon Valley.
TEST: c’est donc la cinquième en 50 ans


................................................................................
    mois        après   mois
    décennie    après   décennie
    année       après   année
    siècle      après   siècle
    génération  après   génération
        <<- ~>> *

    [à|de]  ~^\d\d?$  h  ?~^\d\d?$¿
    [à|de]  ~^\d\d?$  h  ?~^\d\d?$¿   [du|ce]  [matin|soir]
    [à|de]  ~^\d\d?$  h  ?~^\d\d?$¿   de  l’ après-midi
    [à|de]  ~^\d\d?$  h  ?~^\d\d?$¿   cet  après-midi
    [à|de]  ~^\d\d?$  h  ?~^\d\d?$¿   demain  [matin|soir|après-midi]
        <<- ~>> *

TEST: Le train de 2 h 47 {{arriveraient}} en retard.
TEST: Le train de 2 h 47 du matin {{arriveraient}} en retard.


__purge_prépositions_qqn__
................................................................................
    mutatis     mutandis
        <<- ~>> *


__purge_locutions__
    , [oui|non] ,
    , entre autres ?choses¿ ,
    à ~^\d+(?:,\d+|)$  %
    à [autrui|bâbord|califourchon|chacun|confesse|contrecœur|contre-cœur|contretemps|demi-mot|foison|grand-peine|loisir|merveille|moitié|nouveau|outrance|peine|perpétuité|présent|raison|rallonge|rebrousse-poil|reculons|regret|renverse|risque|tâtons|tort|tribord|tout-va]
    à aucun prix
    à autre chose
    à bas [cout|coût|prix]
    à bâtons rompus
    à beaucoup près
    à belles dents
................................................................................
    à couper le souffle
    à court terme
    à courte [échéance|portée]
    à des kilomètres à la ronde
    à défaut d’autre chose
    à dose homéopathique
    à durée limitée
    à ~^\d+$ reprises
    à @:B reprises
    à [plusieurs|quelques|maintes] reprises
    à de  [nombreuses|multiples]  reprises
    à double [titre|tranchant]
    à en juger par [mon|ton|son|notre|votre|leur] expérience
    à en perdre haleine
    à en perdre la tête
................................................................................
    au propre comme au figuré
    au préalable
    au quotidien
    au ras des pâquerettes
    au saut du lit
    au sens [figuré|large|propre]
    au surplus
    au ~^[xXvViI]+[eᵉ]$ siècle
    au-delà du descriptible
    au-dessus [de|d’] {pronom_obj}
    aujourd’hui
    auparavant
    ?tout¿ aussi
    aussitôt
    ?tout¿ au fond [de|d’] {pronom_obj}
................................................................................
    [croyez-le|crois-le] ou [non|pas]
    cul par-dessus tête
    dans [ce|ces] [cas-là|cas-ci]
    dans ce cas [précis|particulier]
    dans ces cas [précis|particuliers]
    dans l’ [idéal|immédiat]
    dans la mesure du possible
    dans les années ~^\d{2,5}$
    dans peu de temps
    dans tout [cela|ça|ceci]
    dans très peu de temps
    dans un cas comme dans l’autre
    dans une [certaine|large|moindre] mesure
    début {mois} ~^\d{2,5}$
    au début {mois} ~^\d{2,5}$
    en ce début {mois} ~^\d{2,5}$
    d’ abord
    d’ affilée
    d’ ailleurs
    d’ année en année
    d’ aujourd’hui
    d’ antan
    d’ autant [plus|moins]
................................................................................
    d’ un commun accord
    d’ une autre trempe
    d’ une [façon|manière] ou d’une autre
    d’ une certaine [façon|manière]
    d’ une tout autre ampleur
    d’ une [minute|seconde] à l’ autre
    de-ci ?,¿ de-là
    de ~^\d+(?:,\d+|)$ %
    de [cesse|conserve|facto|fait|guingois|luxe|nouveau|permanence|partout|préférence|profundis|rechange|routine|surcroît|surcroit|visu]
    de A à Z
    de bas (?:en haut|étage)
    de basse [condition|extraction]
    de bon [aloi|cœur|gré|matin|sens|ton]
    de bonne [facture|famille|foi|heure|humeur|grâce|qualité|compagnie]
    de bric et de broc
................................................................................
    debout
    derechef
    donc
    dorénavant
    déjà
    désormais
    depuis @:B [ans|années|mois|semaines|jours|heures|minutes|secondes]
    depuis ~^\d+$ [ans|années|mois|semaines|jours|heures|minutes|secondes]
    depuis assez longtemps
    depuis belle lurette
    depuis bien longtemps
    depuis de ?très¿ longues années
    depuis des lustres
    depuis les années ~^\d\d+$
    depuis longtemps
    depuis lors
    depuis peu de temps
    depuis quelque temps
    depuis quelques [secondes|minutes|heures|jours|semaines|mois|trimestres|semestres|années|décennies|siècles|millénaires]
    depuis si longtemps
    depuis toujours
................................................................................
    des [années|mois|siècles|millénaires|décennies|semaines] plus [tôt|tard]
    dès [maintenant|lors|aujourd’hui]
    dès à présent
    dès que possible
    dès [demain|hier] ?[soir|matin|après-midi]¿
    Dieu [m’|t’|l’|nous|vous|les] en [garde|préserve]
    Dieu [m’|t’|lui|nous|vous|leur] en soit témoin
    du ~^[xXvViI]+[eᵉ]$ siècle
    du [Ier|Iᵉʳ|1er|1ᵉʳ] siècle
    du bout des lèvres
    du début à la fin
    du fond du cœur
    du jour au lendemain
    du haut en bas
    du même [acabit|coup|ordre|tonneau]
................................................................................
    en ce [moment|temps-là]
    en ce qui [me|te|le|la|les|nous|vous] [concerne|concernait]
    en cet instant
    encore
    encore une fois
    encore et [encore|toujours]
    enfin
    entre {mois} ?~^\d{2,5}¿ et {mois} ?~^\d{2,5}¿
    entre chien et loup
    entre de [bonnes|mauvaises] mains
    entre l’ [un|une] et l’ autre
    entre les uns et les autres
    entre [quatre|quatr’|quat’] [zyeux|yeux]
    entre [quatre-zyeux|quatr’zyeux|quat’zyeux|quatre-yeux|quatr’yeux|quat’yeux]
    ensuite
................................................................................
    ici [comme|ou] ailleurs
    ici et [là|maintenant]
    ici même
    ici-bas
    il y a ?très¿ longtemps
    il y a ?très¿ peu de temps
    il y a quelques [secondes|minutes|heures|jours|semaines|mois|année|ans|siècles|millénaires]
    il y a moins de [~\d+$|@:B] [secondes|minutes|heures|jours|semaines|mois|année|ans|siècles|millénaires]
    il y a [~\d+$|@:B] [secondes|minutes|heures|jours|semaines|mois|année|ans|siècles|millénaires]
    il y a quelque temps
    il n’y a pas ?si¿ longtemps
    illico ?presto¿
    jadis
    j’ en passe et des [meilleurs|meilleures]
    jour pour jour
    [jusqu’|jusqu] [alors|ici|aujourd’hui|Noël|Pâques]
................................................................................
    je      [t’|vous]   en  [prie|supplie]
    nous    [t’|vous]   en  [prions|supplions]
        <<- ~>> *


# Déterminant + nombre
__p_dét_plur_nombre_nom__
    [les|des|mes|tes|ses|nos|vos|leurs]  ~^\d+$  @:[NA].*:[pi]¬:(?:V0|3p|Oo|X)|>(?:janvier|février|mars|avril|mai|juin|juillet|ao[ûu]t|septembre|octobre|novembre|décembre|vendémiaire|brumaire|frimaire|nivôse|pluviôse|ventôse|germinal|floréal|prairial|messidor|thermidor|fructidor)
        <<- ~2>> *

    [les|des|mes|tes|ses|nos|vos|leurs]  ~^\d+$  ou  ~^\d+$  @:[NA].*:[pi]¬:(?:V0|3p|Oo|X)|>(?:janvier|février|mars|avril|mai|juin|juillet|ao[ûu]t|septembre|octobre|novembre|décembre|vendémiaire|brumaire|frimaire|nivôse|pluviôse|ventôse|germinal|floréal|prairial|messidor|thermidor|fructidor)
        <<- ~2:4>> *

    [les|des]   >numéro  [un|~^\d+$|@:B]  et  [~^\d+$|@:B]
        <<- ~3:0>> *

    la  >numéro  un
    la  >numéro  @:B
    la  >numéro  ~^\d+$
        <<- =>> define(\2, [">numéro/:N:f:s"])
        <<- ~3>> *

    le  numéro  un  @:¬:N:[em]:[is]
        <<- ~3>> *

    >numéro  @:B
    >numéro  ~^\d+$
    [n°|no]  ~^\d+$
        <<- ~2>> *


__mot_composé_avec_là__
    ~-[lL][àÀ]$
        <<- morph(\1, ":[NAQ]", ":G", 0, -3) ~>> =\1[:-3]

................................................................................
        -2>> =suggPlur(\2)                                                                  # Accord de nombre erroné : « \2 » devrait être au pluriel.

TEST: plusieurs {{foi}} par jour.


## Autres pluriels

## certains / certaines
__gn_certains_accord__
    certains  *WORD
        <<- /gn/ morph(\2, ":[NAQ].*:f", ":[emGWP]") -1>> certaines                         # Accord de genre erroné : « \2 » est féminin.
        <<- /gn/ __also__ and hasMasForm(\2) -2>> =suggMasPlur(\2, True)                    # Accord de genre erroné : « \1 » est un déterminant masculin.
        <<- /gn/ ( morph(\2, ":[NAQ].*:s", ":(?:[ipGWP]|V0)") and not (value(>1, "|et|ou|") and morph(>2, ":[NAQ]")) )
            or \1 in aREGULARPLURAL
        -2>> =suggPlur(\2)                                                                  # Accord de nombre erroné : « \2 » devrait être au pluriel.
................................................................................

TEST: Certaines {{danse}}
TEST: Certains {{chien}}
TEST: {{certains}} des {{nouvelles}} sont à côté de la plaque.
TEST: {{certaines}} des hommes
TEST: Un problème rapporté par certains est l’incapacité à trouver un partenaire


## quel / quels / quelle / quelles
__gn_quel_accord__
    quel  *WORD
        <<- /gn/ morph(\2, ":[NAQ].*:f:p", ":(?:V0|Oo|[NAQ].*:[me]:[si])")      -1>> quelles                    # Accord de genre et de nombre erroné : « \2 » est féminin et au pluriel.
        <<- /gn/ __also__ and hasFemForm(\2)                                    -2>> =suggMasSing(\2, True)     # Accord de genre et de nombre erroné : « \1 » est masculin et au singulier.
        <<- /gn/ morph(\2, ":[NAQ].*:m:p", ":(?:V0|Oo|[NAQ].*:[me]:[si])")      -1>> quels                      # Accord de nombre erroné : « \2 » est au pluriel.
        <<- /gn/ __also__                                                       -2>> =suggSing(\2)              # Accord de nombre erroné : « \1 » est au singulier.
        <<- /gn/ morph(\2, ":[NAQ].*:f:[si]", ":(?:V0|Oo|[NAQ].*:[me]:[si])")   -1>> quelle                     # Accord de genre erroné : « \2 » est féminin.
        <<- /gn/ __also__ and hasFemForm(\2)                                    -2>> =suggMasSing(\2, True)     # Accord de genre erroné : « \1 » est masculin.

__gn_quels_accord__
    quels  *WORD
        <<- /gn/ morph(\2, ":[NAQ].*:f:s", ":(?:V0|Oo|[NAQ].*:[me]:[pi])")      -1>> quelle                     # Accord de genre et de nombre erroné : « \2 » est féminin et au singulier.
        <<- /gn/ __also__ and hasFemForm(\2)                                    -2>> =suggMasPlur(\2, True)     # Accord de genre et de nombre erroné : « \1 » est masculin et au pluriel.
        <<- /gn/ morph(\2, ":[NAQ].*:m:s", ":(?:V0|Oo|[NAQ].*:[me]:[pi])")      -1>> quel                       # Accord de nombre erroné : « \2 » est au singulier.
        <<- /gn/ __also__                                                       -2>> =suggPlur(\2)              # Accord de nombre erroné : « \1 » est au pluriel.
        <<- /gn/ morph(\2, ":[NAQ].*:f:[pi]", ":(?:V0|Oo|[NAQ].*:[me]:[pi])")   -1>> quelles                    # Accord de genre erroné : « \2 » est féminin.
        <<- /gn/ __also__ and hasFemForm(\2)                                    -2>> =suggMasPlur(\2, True)     # Accord de genre erroné : « \1 » est masculin.

__gn_quelle_accord__
    quelle  *WORD
        <<- /gn/ morph(\2, ":[NAQ].*:m:p", ":(?:V0|Oo|[NAQ].*:[fe]:[si])")      -1>> quels                      # Accord de genre et de nombre erroné : « \2 » est masculin et au pluriel.
        <<- /gn/ __also__ and hasFemForm(\2)                                    -2>> =suggFemSing(\2, True)     # Accord de genre et de nombre erroné : « \1 » est féminin et au singulier.
        <<- /gn/ morph(\2, ":[NAQ].*:f:p", ":(?:V0|Oo|[NAQ].*:[fe]:[si])")      -1>> quelles                    # Accord de nombre erroné : « \2 » est au pluriel.
        <<- /gn/ __also__                                                       -2>> =suggSing(\2)              # Accord de nombre erroné : « \1 » est au singulier.
        <<- /gn/ morph(\2, ":[NAQ].*:m:[si]", ":(?:V0|Oo|[NAQ].*:[fe]:[si])")   -1>> quel                       # Accord de genre erroné : « \2 » est masculin.
        <<- /gn/ __also__ and hasFemForm(\2)                                    -2>> =suggFemSing(\2, True)     # Accord de genre erroné : « \1 » est féminin.

__gn_quelles_accord__
    quelles  *WORD
        <<- /gn/ morph(\2, ":[NAQ].*:m:s", ":(?:V0|Oo|[NAQ].*:[fe]:[pi])")      -1>> quel                       # Accord de genre et de nombre erroné. « \2 » est masculin et au singulier.
        <<- /gn/ __also__ and hasFemForm(\2)                                    -2>> =suggFemPlur(\2, True)     # Accord de genre et de nombre erroné : « \1 » est féminin et au pluriel.
        <<- /gn/ morph(\2, ":[NAQ].*:f:s", ":(?:V0|Oo|[NAQ].*:[fe]:[pi])")      -1>> quelle                     # Accord de nombre erroné : « \2 » est au singulier.
        <<- /gn/ __also__                                                       -2>> =suggPlur(\2)              # Accord de nombre erroné : « \1 » est au pluriel.
        <<- /gn/ morph(\2, ":[NAQ].*:m:[pi]", ":(?:V0|Oo|[NAQ].*:[fe]:[pi])")   -1>> quels                      # Accord de genre erroné : « \2 » est masculin.
        <<- /gn/ __also__ and hasFemForm(\2)                                    -2>> =suggFemPlur(\2, True)     # Accord de genre erroné : « \1 » est féminin.

TEST: {{Quelle}} homme.                                       ->> Quel
TEST: {{Quel}} femme.                                         ->> Quelle
TEST: {{Quels}} chanson.                                      ->> Quelle
TEST: {{Quelles}} {{tarés}}.
TEST: Quelle sale journée…
TEST: Quelles drôles de prunes


## Cas particuliers
__gn_det_plur_cas_particuliers__
    [ces|des|mes|tes|ses|nos|vos|leurs|quelques] [même|point|son|ton]
        <<- /gn/ -2>> \1s                                                                   # Accord de nombre erroné : mettez au pluriel.

TEST: des {{son}} que nous entendons jour et nuit.
TEST: j’entends ces {{même}} âneries tous les jours


## Pluriel des groupes

__gn_nombre_de_accord__
    nombre  [de|d’]  *WORD
        <<- /gn/ (morph(\3, ":[NAQ].*:s", ":[ip]|>o(?:nde|xydation|r)/") and morph(<1, ":(?:G|[123][sp])|<start>", ":[AD]"))
            or \3 in aREGULARPLURAL
        -3>> =suggPlur(\3)                                                                  # Ici, « nombre de » devrait probablement être suivi d’un pluriel.

TEST: Je connais nombre d’{{emmerdeur}} et aucun n’est pire que lui.
................................................................................
        -4>> =suggPlur(\4)                                                                  # Avec des « \2 \3 \4 », mettre au pluriel.

TEST: des centaines de {{bête}} à cornes passèrent devant nous.     ->> bêtes
TEST: une multitude d’{{homme}}                                     ->> hommes


## quelque adverbe

__gn_quelque_adverbe__
    quelques  ~^\d+$
        <<- /gn/ -1>> quelque                                                               # Devant un nombre, « quelque » est un adverbe, donc invariable.

    quelques  @:B
        <<- /gn/ \2 != "cents" -1>> quelque                                                 # Devant un nombre, « quelque » est un adverbe, donc invariable.

................................................................................
TEST: Il commande {{quelques}} trois cents hommes.
TEST: {{Quelques}} 120 hommes                                 ->> Quelque
TEST: {{Quelques}} deux cents hommes.                         ->> Quelque
TEST: les quelque 2,5 millions d’habitants
TEST: les quelque 12 000 stations-service


## Nombres

__gn_nombre_lettres_accord__
    @:B:e:p  *WORD
        <<- /gn/ not value(\1, "|neuf|mille|") and ( (morph(\2, ":[NAQ].*:s", "*") and not value(\2, "|janvier|février|mars|avril|mai|juin|juillet|août|aout|septembre|octobre|novembre|décembre|rue|route|ruelle|place|boulevard|avenue|allée|chemin|sentier|square|impasse|cour|quai|chaussée|côte|vendémiaire|brumaire|frimaire|nivôse|pluviôse|ventôse|germinal|floréal|prairial|messidor|thermidor|fructidor|") )
            or \2 in aREGULARPLURAL)
        -2>> =suggPlur(\2)                                                                  # Accord de nombre erroné avec « \1 » : « \2 » devrait être au pluriel.

    neuf  *WORD
        <<- /gn/ ( morph(\2, ":[NAQ].*:s", "*") and not morph(<1, ":N.*:m:[is]") and not value(\2, "|janvier|février|mars|avril|mai|juin|juillet|août|aout|septembre|octobre|novembre|décembre|rue|route|ruelle|place|boulevard|avenue|allée|chemin|sentier|square|impasse|cour|quai|chaussée|côte|vendémiaire|brumaire|frimaire|nivôse|pluviôse|ventôse|germinal|floréal|prairial|messidor|thermidor|fructidor|") )
            or \2 in aREGULARPLURAL
        -2>> =suggPlur(\2)                                                                  # Accord de nombre erroné avec « \1 » : « \2 » devrait être au pluriel.

    mille  *WORD
        <<- /gn/ (morph(\2, ":[NAQ].*:s", "*") or \1 in aREGULARPLURAL) and not value(<1, "|le|un|ce|du|")
        -2>> =suggPlur(\2)                                                                  # Accord de nombre erroné avec « \1 » : « \2 » devrait être au pluriel.

TEST: ce sont trois {{idiot}} pas foutus de trouver leur chemin avec un GPS.
TEST: Il a abandonné neuf {{enfant}}.
TEST: On peut trouver mille {{travailleur}} d’un claquement de doigts.
TEST: un logement neuf bâti par des professionnels.
TEST: un mille marin.


__gn_nombre_chiffres_accord__
    [0|1|01]  @:[NAQ].*:p¬*
        <<- /gn/ not value(\2, "|Rois|Corinthiens|Thessaloniciens|") -2>> =suggSing(\2)     # Accord de nombre erroné : « \1 » devrait être au singulier.

    ~^\d+$  *WORD
        <<- not value(<1, "|/|") and not re.search("^0*[01]$", \1)
            and ( (morph(\2, ":[NAQ].*:s", "*") and not value(\2, "|janvier|février|mars|avril|mai|juin|juillet|août|aout|septembre|octobre|novembre|décembre|rue|route|ruelle|place|boulevard|avenue|allée|chemin|sentier|square|impasse|cour|quai|chaussée|côte|vendémiaire|brumaire|frimaire|nivôse|pluviôse|ventôse|germinal|floréal|prairial|messidor|thermidor|fructidor|"))
            or \1 in aREGULARPLURAL )
        -2>> =suggPlur(\2)                                                                  # Accord de nombre erroné : « \2 » devrait être au pluriel.










TEST: 00 heure, 01 heure
TEST: il a adopté 1 {{chiens}}.









TEST: 22 {{heure}}
TEST: 3 {{heure}}





































@@@@
@@@@END_GRAPH                                                                                      _




@@@@


__[i]/gn(gn_quel_quel_accord_être)__
    (quel(?:le|)) (sont|étaient|ser(?:o|aie)nt|fu(?:r|ss)ent)  @@0,$
    <<- not before(r"\btel(?:le|)s? +$")
    -1>> \1s                                                                                        # Accord de nombre erroné avec “\2”.

................................................................................
#TEST: dès que je le {{verrais}}
TEST: dès qu’il le {{voie}}
TEST: donnant à entendre qu’il avait l’intention de violer Laura dès qu’il en aurait l’occasion


# verbe que + subjonctif
__vmode_qqch_que_subjonctif1__
    [>permettre|>falloir|>vouloir|>ordonner|>exiger|>désirer|>préférer|>suffire]  [que|qu’|qu]  @:(?:Os|M)  @:I¬:[GYS]
    [afin|avant|pour|quoi|sans]  [que|qu’|qu]  @:(?:Os|M)  @:I¬:[GYS]
        <<- /vmode/ -4>> =suggVerbMode(\4, ":S", \3)                                                # Après « \1 que », ce verbe devrait être au subjonctif.

    >douter  [que|qu’|qu]  @:(?:Os|M)  @:I¬:(?:[GYSK]|If)
        <<- /vmode/ morph(\1, ":V", ":N") -4>> =suggVerbMode(\4, ":S", \3)                          # Après « \1 que », ce verbe devrait être au subjonctif.

TEST: Il suffit qu’il {{court}} plus
TEST: Je veux qu’il {{finit}} son repas.
TEST: quoi qu’il en {{conclut}}
TEST: Je ne veux pas que tu {{es}} des ennuis
TEST: Avant que tu {{pars}}, je voudrais qu’on discute.
TEST: Sans qu’elle {{prend}} le temps d’analyser le problème.
TEST: Nul doute qu’elle nourrira à brève échéance la haine de demain à notre égard.
TEST: Je ne doute pas qu’ils réussiront leur mission.
TEST: Je me doutais bien qu’Apple pourrait marcher
TEST: il ne fait aucun doute qu’Amazon le sait.
TEST: quoi que nous autres hommes ayons pu faire


__vmode_qqch_que_subjonctif2__
    à       condition   [que|qu’|qu]    @:(?:Os|M)      @:I¬:[GYS]
    pour    peu         [que|qu’|qu]    @:(?:Os|M)      @:I¬:[GYS]
    il      peut        [que|qu’|qu]    @:(?:Os|M)      @:I¬:[GYS]
        <<- /vmode/ -5>> =suggVerbMode(\5, ":S", \4)                                                # Ce verbe devrait être au subjonctif.

TEST: à condition qu’il {{finit}} son boulot.
TEST: pour peu qu’il {{prend}} son devoir sérieux…
TEST: il se peut que nous {{avons}} tort.


# Bien que + subjonctif