Grammalecte  Check-in [7830f4d1c0]

Overview
Comment:[fr] ajustements
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk | fr
Files: files | file ages | folders
SHA3-256: 7830f4d1c05e162415cfb4bf8c55a2d01417ef9e684ba89ae8b48a67b294af40
User & Date: olr on 2021-02-06 18:17:46
Other Links: manifest | tags
Context
2021-02-09
10:09
[fr] ajustements [core][fr] suggestions mechanism update check-in: d86a7e72a6 user: olr tags: core, fr, trunk
2021-02-06
18:17
[fr] ajustements check-in: 7830f4d1c0 user: olr tags: fr, trunk
01:52
[fr] ajustements check-in: 111afef718 user: olr tags: fr, trunk
Changes

Modified gc_lang/fr/rules.grx from [c40affd524] to [1293ea0eda].

2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
....
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
....
3064
3065
3066
3067
3068
3069
3070




3071
3072
3073
3074
3075
3076
3077
....
9536
9537
9538
9539
9540
9541
9542













9543
9544
9545
9546
9547
9548
9549
.....
11239
11240
11241
11242
11243
11244
11245
11246
11247
11248
11249
11250
11251
11252
11253
11254
11255
11256
11257
11258
.....
17009
17010
17011
17012
17013
17014
17015

17016
17017
17018
17019
17020
17021
17022
.....
18112
18113
18114
18115
18116
18117
18118

18119
18120
18121
18122
18123
18124
18125
.....
21943
21944
21945
21946
21947
21948
21949
21950
21951




21952


21953
21954
21955
21956
21957
21958
21959
.....
23653
23654
23655
23656
23657
23658
23659

23660
23661
23662
23663
23664
23665
23666

23667
23668
23669
23670
23671
23672
23673
23674


23675
23676
23677
23678
23679
23680
23681
.....
23758
23759
23760
23761
23762
23763
23764
23765

23766
23767
23768








23769
23770
23771
23772

23773
23774
23775
23776

23777
23778
23779




23780
23781
23782
23783
23784
23785
23786
.....
24047
24048
24049
24050
24051
24052
24053

24054
24055
24056
24057
24058
24059
24060

24061
24062
24063
24064
24065
24066

24067
24068

24069
24070
24071
24072
24073
24074
24075
.....
24078
24079
24080
24081
24082
24083
24084

24085
24086
24087
24088
24089
24090
24091

24092
24093
24094
24095
24096
24097
24098
24099
24100


24101
24102
24103
24104
24105
24106
24107
.....
24841
24842
24843
24844
24845
24846
24847

24848
24849
24850
24851
24852
24853
24854
.....
25347
25348
25349
25350
25351
25352
25353
25354
25355
25356
25357
25358
25359














25360
25361
25362
25363
25364
25365
25366
.....
25370
25371
25372
25373
25374
25375
25376




25377
25378
25379
25380
25381
25382
25383
.....
25744
25745
25746
25747
25748
25749
25750
25751
25752
25753

25754
25755
25756
25757
25758
25759
25760
25761
25762
25763
25764
25765
25766
25767
25768
25769
25770
25771









25772
25773
25774
25775
25776
25777
25778
25779


25780
25781
25782




25783
25784



25785
25786











































25787


































25788


25789
25790
25791
25792
25793
25794
25795
.....
34555
34556
34557
34558
34559
34560
34561

34562
34563
34564
34565
34566
34567
34568
    [le|du|au] groupe    ?nominal¿  «          $:D  @:[NA]  ?@:[NA]¿  ?@:[NA]¿  »
    [le|du|au] groupe    ?nominal¿  [‘|'|’|`]  $:D  @:[NA]  ?@:[NA]¿  ?@:[NA]¿  [‘|'|’|`]
    [le|du|au] groupe    ?nominal¿  ‹          $:D  @:[NA]  ?@:[NA]¿  ?@:[NA]¿  ›
    [le|du|au] syntagme  ?nominal¿  [“|”|"]    [*WORD|*WORDELD]  *WORD  ?*WORD¿  ?*WORD¿  [“|”|"]
    [le|du|au] syntagme  ?nominal¿  «          [*WORD|*WORDELD]  *WORD  ?*WORD¿  ?*WORD¿  »
    [le|du|au] syntagme  ?nominal¿  [‘|'|’|`]  [*WORD|*WORDELD]  *WORD  ?*WORD¿  ?*WORD¿  [‘|'|’|`]
    [le|du|au] syntagme  ?nominal¿  ‹          [*WORD|*WORDELD]  *WORD  ?*WORD¿  ?*WORD¿  ›
    la proposition                  [“|”|"]    [*WORD|*WORDELD]  [*WORD|*WORDELD]  ?[*WORD|*WORDELD]¿  ?[*WORD|*WORDELD]¿  ?[*WORD|*WORDELD]¿  [“|”|"]
    la proposition                  «          [*WORD|*WORDELD]  [*WORD|*WORDELD]  ?[*WORD|*WORDELD]¿  ?[*WORD|*WORDELD]¿  ?[*WORD|*WORDELD]¿  »
    la proposition                  [‘|'|’|`]  [*WORD|*WORDELD]  [*WORD|*WORDELD]  ?[*WORD|*WORDELD]¿  ?[*WORD|*WORDELD]¿  ?[*WORD|*WORDELD]¿  [‘|'|’|`]
    la proposition                  ‹          [*WORD|*WORDELD]  [*WORD|*WORDELD]  ?[*WORD|*WORDELD]¿  ?[*WORD|*WORDELD]¿  ?[*WORD|*WORDELD]¿  ›
    [<start>|la] locution  ?[nominale|adjectivale|adverbiale|verbale|pronominale]¿  [“|”|"]    [*WORD|*WORDELD] ?,¿ [*WORD|*WORDELD]  ?[*WORD|*WORDELD]¿  ?[*WORD|*WORDELD]¿  ?[*WORD|*WORDELD]¿ ?*WORD¿  [“|”|"]
    [<start>|la] locution  ?[nominale|adjectivale|adverbiale|verbale|pronominale]¿  «          [*WORD|*WORDELD] ?,¿ [*WORD|*WORDELD]  ?[*WORD|*WORDELD]¿  ?[*WORD|*WORDELD]¿  ?[*WORD|*WORDELD]¿ ?*WORD¿  »
    [<start>|la] locution  ?[nominale|adjectivale|adverbiale|verbale|pronominale]¿  [‘|'|’|`]  [*WORD|*WORDELD] ?,¿ [*WORD|*WORDELD]  ?[*WORD|*WORDELD]¿  ?[*WORD|*WORDELD]¿  ?[*WORD|*WORDELD]¿ ?*WORD¿  [‘|'|’|`]
    [<start>|la] locution  ?[nominale|adjectivale|adverbiale|verbale|pronominale]¿  ‹          [*WORD|*WORDELD] ?,¿ [*WORD|*WORDELD]  ?[*WORD|*WORDELD]¿  ?[*WORD|*WORDELD]¿  ?[*WORD|*WORDELD]¿ ?*WORD¿  ›
        <<- ~3:0>> *

    [<start>|l’] ancienne locution  ?[nominale|adjectivale|adverbiale|verbale|pronominale]¿
................................................................................
    [<start>|,]  [“|”|"]    *WORD       [“|”|"]    est féminin
    [<start>|,]  «          *WORD       »          est féminin
    [<start>|,]  [‘|'|’|`]  *WORD       [‘|'|’|`]  est féminin
    [<start>|,]  ‹          *WORD       ›          est féminin
    [<start>|,]  [“|”|"]    *WORD       [“|”|"]    est masculin
    [<start>|,]  «          *WORD       »          est masculin
    [<start>|,]  [‘|'|’|`]  *WORD       [‘|'|’|`]  est masculin
    [<start>|,]  ‹          $:N         ›          est masculin
    [<start>|,]  [“|”|"]    $:Y         [“|”|"]    est [un|le]     verbe
    [<start>|,]  «          $:Y         »          est [un|le]     verbe
    [<start>|,]  [‘|'|’|`]  $:Y         [‘|'|’|`]  est [un|le]     verbe
    [<start>|,]  ‹          $:Y         ›          est [un|le]     verbe
    [<start>|,]  [“|”|"]    $:Q         [“|”|"]    est [un|le]     participe passé
    [<start>|,]  «          $:Q         »          est [un|le]     participe passé
    [<start>|,]  [‘|'|’|`]  $:Q         [‘|'|’|`]  est [un|le]     participe passé
................................................................................
    [ne|n’] point
        <<- =>> select(\-1, "", ":N")

__da_nos__
    nos $¬:B
        <<- =>> select(\1, ":D")





__da_parmi__
    parmi *WORD
        <<- =>> select(\1, ":R")

__da_pas__
    pas
        <<- morph(<1, ":[VWX]") =>> select(\1, "", ":N")
................................................................................
    !! à en juger par ¡¡
    [à|a] [en|>an] [juger|jugé+ses|jugeait|jugeais] [par|pare+s|>part]
        <<- /loc/ ->> à en juger par                                                                && Confusion : “à en juger par” c’est-à-dire “selon le jugement qu’on se fait avec”.

TEST: {{a en jugé part}} cet article, c’est bientôt la fin.                 ->> à en juger par
TEST: ils sont à en juger par leurs résultats les prochains champions.















__conf_à_risques_et_périls__
    !! à [mes|tes|ses|nos|vos|leurs] risques et périls ¡¡
    [a|à] [mes|tes|ses|nos|vos|leur|leurs] [risque+s] [et|est|é|eh|hé|ai|aie+s|ait] [péril+s|>pérille]
        <<- /loc/ ->> à \2 risques et périls                                            && Confusion. Locution “à ses risques et périls”.|https://fr.wiktionary.org/wiki/%C3%A0_ses_risques_et_p%C3%A9rils

TEST: {{à leurs risques et périlles}}                               ->> à leurs risques et périls
................................................................................
    [fausse+s] des îles [aléoutiennes|caïmans|Kouriles|Tonga]
    [fausse+s] du [Chili|Japon|Pérou|Pérou-Chili]
    [fausse+s] d’ [aisance|orchestre|Amérique|Atacama|Izu-Bonin|Izu-Ogasawara]
    [fausse+s] de l’ orchestre
    [fausse+s] à [>compost|>déchet|>lisier|>fumier|>plongeon|>plongée|>purin|>merde|>ordure]
    [fausse+s] [au|aux|des] [>caïman|>crocodile|>charognard|>lion|>loup|>louve|ours|>serpent|>cobra|>diable]
    [fausse+s] [>abyssal|>canin|>béant|>commun|>océanique|sous-marine+s|>septique|>immense|>profond|>nasal|>iliaque|>temporal]
        <<- /conf/ -1>> =\1.replace("au", "o").replace("AU", "O")           && Confusion probable : le mot “fausse” est l’adjectif féminin de “faux”. Pour évoquer une profondeur, écrivez “fosse”.

    au bord de la fausse
        <<- /conf/ --1>> fosse                                              && Confusion probable : le mot “fausse” est l’adjectif féminin de “faux”. Pour évoquer une profondeur, écrivez “fosse”.

    >fosse [>alerte|>déclaration]
        <<- /conf/ -1>> =\1.replace("o", "au").replace("O", "AU")
        && Confusion probable : une fosse est une dépression ou une cavité dans le sol. Pour évoquer une falsification ou une erreur, écrivez “fausse”.|https://fr.wiktionary.org/wiki/fausse

TEST: la {{fausse}} Calypso.                                            ->> fosse
TEST: La {{fausse}} des Mariannes.                                      ->> fosse
TEST: La {{fausse}} d’aisance.                                          ->> fosse
TEST: La {{fausse}} à lisier.                                           ->> fosse
................................................................................
    en rangs d’ oignons ?serrés¿
    en rase campagne
    en rase-mottes
    en règle générale
    en roue libre
    en second lieu
    en sens inverse

    en situation [irrégulière|régulière]
    en sous-main
    en sous-nombre ?[évident|flagrant]¿
    en sous nombre ?[évident|flagrant]¿
    en tant [que|qu’] >tel
    en tête à tête
    en tête-à-tête
................................................................................
    >billet [de|d’] [*NUM|@:B:.:p] [euros|dollars|centimes|cents|livres|shillings]
    >bisphénol A
    [>boîte|>boite] [aux|à] lettres
    [>boîte|>boite] à [bijoux|gants|outils|sardines]
    [>boîte|>boite] [de|d’] nuit
    >bombe à [eau|fission|fusion|fragmentation|hydrogène|neutrons|retardement|sous-munitions]
    >bombe à rayonnement renforcé

    >bonnet [de|d’] nuit
    [bonne+s|>bonniche] à tout faire
    >bordereau d’ expédition
    >boucle d’ >oreille
    >bouée [de|d’] sauvetage
    >bouffée d’ air [frais|pur]
    >bout [de|d’] gras
................................................................................
TEST: faire faux bond


# fausse / fosse
__conf_fausse_fosse__
    >faire une fosse couche
    combien de >fosse [couche+s]
        <<- /conf/ -3>> =\3.replace("o", "au").replace("O", "AU")           && Confusion. Une “fausse couche”.





TEST: elle a fait une {{fosse}} couche.                                     ->> fausse




# filtre / philtre
__conf_filtre_philtre2__
    >boire $:D >filtre
        <<- /conf/ -3>> philtre|philtres
        && Confusion probable. Un filtre est un instrument de filtrage, un philtre est une boisson (magique) procurant des effets sur le buveur.|https://fr.wiktionary.org/wiki/philtre
................................................................................


__gn_le_2m__
    le  *WORD  *WORD
        <<- /gn/ morph(\1, ":D") and not value(<1, "|et|ou|de|") and not morph(\3, ">seul/") >>>
        <<- /gn/ morph(\2, ":[NA].*:[me]", ":(?:B|G|V0)") and morph(\3, ":[NA].*:f", "*") and not apposition(\2, \3)
        -3>> =suggMasSing(\3, True)                                                                 && Accord de genre erroné : le syntagme « \1 \2 » est masculin, « \3 » est féminin.

        <<- /gn/ morph(\2, ":[NA].*:[si]", ":G") and morph(\3, ":[NA].*:p", ":[GWsi]") and not apposition(\2, \3)
        -3>> =suggMasSing(\3)                                                                       && Accord de nombre erroné avec « \1 \2 » : « \3 » devrait être au singulier.

    [et|ou]  le  *WORD  *WORD
        <<- /gn/ morph(\2, ":D") and not morph(<1, ":[NA]") and not morph(\4, ">seul/") >>>
        <<- /gn/ morph(\3, ":[NA].*:[me]", ":(?:B|G|V0|f)") and morph(\4, ":[NA].*:f", "*") and not apposition(\3, \4)
        -4>> =suggMasSing(\4, True)                                                                 && Accord de genre erroné : le syntagme « \2 \3 » est masculin, « \4 » est féminin.

        <<- /gn/ morph(\3, ":[NA].*:[si]", ":G") and morph(\4, ":[NA].*:p", ":[GWsi]") and not apposition(\4, \4)
        -4>> =suggMasSing(\4)                                                                       && Accord de nombre erroné avec « \2 \3 » : « \4 » devrait être au singulier.

TEST: le test très {{cons}} qu’on a passé hier.                                         ->> con
TEST: c’était le chien {{perdue}} des voisins.                                          ->> perdu
TEST: viens vite ou le pari {{imperdables}} sera moins facile…                          ->> imperdable
TEST: connaître et le grand {{perdante}}                                                ->> perdant
TEST: Le bruit {{perçus}} par les voisins.                                              ->> perçu


TEST: si le premier film est un triomphe, le deuxième est un demi-succès, et le troisième une déception.
TEST: Cela aboutira sur une contractualisation coûteuse pour organiser cette divergence d’intérêts, et le gestionnaire aura le dernier mot.


__gn_le_2m_virg__
    <start>  le  *WORD  ,  $:A¬:G
        <<- /gn/ morph(\3, ":[NA].*:[me]:[si]", ":3[sp]") and not agreement(\3, \5)
................................................................................
TEST: Je la levai, la brandis et frappai de taille.


__gn_la_2m__
    la  *WORD  *WORD
        <<- /gn/ morph(\1, ":D") and not value(<1, "|et|ou|de|d’|") and not morph(\3, ">seul/") >>>
        <<- /gn/ morph(\2, ":[NA].*:[fe]", ":(?:B|G|V0)") and morph(\3, ":[NA].*:m", "*") and not apposition(\2, \3)
        -3>> =suggFemSing(\3, True)                                                         && Accord de genre erroné : le syntagme « \1 \2 » est féminin, « \3 » est masculin.

        <<- /gn/ morph(\2, ":[NA].*:[si]", ":G") and morph(\3, ":[NA].*:p", ":[GWsi]") and not apposition(\2, \3)
        -3>> =suggFemSing(\3)                                                               && Accord de nombre erroné avec « \1 \2 » : « \3 » devrait être au singulier.









    [et|ou|de|d’]  la  *WORD  *WORD
        <<- /gn/ morph(\2, ":D") and not morph(<1, ":[NA]|>(?:et|ou)/") and not morph(\4, ">seul/") >>>
        <<- /gn/ morph(\3, ":[NA].*:[fe]", ":(?:B|G|V0|m)") and morph(\4, ":[NA].*:m", "*") and not apposition(\3, \4)
        -4>> =suggFemSing(\4, True)                                                         && Accord de genre erroné : le syntagme « \2 \3 » est féminin, « \4 » est masculin.

        <<- /gn/ morph(\3, ":[NA].*:[si]", ":G") and morph(\4, ":[NA].*:p", ":[GWsi]") and not apposition(\3, \4)
        -4>> =suggFemSing(\4)                                                               && Accord de nombre erroné avec « \2 \3 » : « \4 » devrait être au singulier.

TEST: La plus grande {{cinglé}}.                                                ->> cinglée

TEST: il imaginait de la pluie {{noir}} tombant sur une terre dévastée.         ->> noire
TEST: la place {{balayées}} par le vent                                         ->> balayée
TEST: je voyais de la pluie {{noires}}                                          ->> noire




TEST: Il faut donc examiner ensemble le panneau et la paroi latérale.
TEST: Il faut donc examiner ensemble le panneau et la paroi latéraux.
TEST: Il faut donc examiner ensemble les panneaux et la paroi latéraux.
TEST: Il faut donc examiner ensemble les panneaux et la paroi latérale.


__gn_la_2m_virg__
................................................................................

## un / une
__gn_un_2m__
    un  *WORD  *WORD
        <<- /gn/ not value(<1, "|et|ou|d’|") and not morph(\3, ">seul/") >>>
        <<- /gn/ morph(\2, ":[NA].*:[me]", ":(?:B|G|V0)") and morph(\3, ":[NA].*:f", "*") and not apposition(\2, \3)
        -3>> =suggMasSing(\3, True)                                                                 && Accord de genre erroné : le syntagme « \1 \2 » est masculin, « \3 » est féminin.

        <<- /gn/ morph(\2, ":[NA].*:[si]", ":G") and morph(\3, ":[NA].*:p", "*") and not apposition(\2, \3)
        -3>> =suggMasSing(\3)                                                                       && Accord de nombre erroné avec « \2 » : « \3 » devrait être au singulier.

    [et|ou|d’]  un  *WORD  *WORD
        <<- /gn/ not morph(<1, ":[NA]|>(?:et|ou)/") and not morph(\4, ">seul/") >>>
        <<- /gn/ morph(\3, ":[NA].*:[me]", ":(?:B|G|V0|f)") and morph(\4, ":[NA].*:f", "*") and not apposition(\3, \4)
        -4>> =suggMasSing(\4, True)                                                                 && Accord de genre erroné : le syntagme « \2 \3 » est masculin, « \4 » est féminin.

        <<- /gn/ morph(\3, ":[NA].*:[si]", ":G") and morph(\4, ":[NA].*:p", "*") and not apposition(\3, \4)
        -4>> =suggMasSing(\4)                                                                       && Accord de nombre erroné avec « \2 \3 » : « \4 » devrait être au singulier.

TEST: un exercice pas très {{utiles}}.                                                      ->> utile
TEST: un homme {{grands}}                                                                   ->> grand
TEST: un homme {{futiles}}                                                                  ->> futile

TEST: que sais-tu d’un homme {{grande}} comme un arbre                                      ->> grand
TEST: je me souviens d’un homme {{arrogants}}                                               ->> arrogant

TEST: C’est pas les quelques vues sur Linux qui vont rattraper un scénario {{bancale}}.     ->> bancal


__gn_un_2m_virg__
    <start>  un  *WORD  ,  $:A¬:G
        <<- /gn/ morph(\3, ":[NA].*:[me]:[si]") and not agreement(\3, \5)
        --1>> =suggMasSing(\-1)                                                                     && Cet adjectif n’est pas accordé avec “\2 \3”.
................................................................................


__gn_une_2m__
    une  *WORD  *WORD
        <<- /gn/ not value(<1, "|et|ou|d’|") and not morph(\3, ">seul/") >>>
        <<- /gn/ morph(\2, ":[NA].*:[fe]", ":(?:B|G|V0)") and morph(\3, ":[NA].*:m", "*") and not apposition(\2, \3)
        -3>> =suggFemSing(\3, True)                                                                 && Accord de genre erroné : le syntagme « \1 \2 » est féminin, « \3 » est masculin.

        <<- /gn/ \2 != "fois" and morph(\2, ":[NA].*:[si]", ":G") and morph(\3, ":[NA].*:p", "*") and not apposition(\2, \3)
        -3>> =suggFemSing(\3)                                                                       && Accord de nombre erroné avec « \1 \2 » : « \3 » devrait être au singulier.

    [et|ou|d’]  une  *WORD  *WORD
        <<- /gn/ not morph(<1, ":[NA]|>(?:et|ou)/") and not morph(\4, ">seul/") >>>
        <<- /gn/ morph(\3, ":[NA].*:[fe]", ":(?:B|G|V0|m)") and morph(\4, ":[NA].*:m", "*") and not apposition(\3, \4)
        -4>> =suggFemSing(\4, True)                                                                 && Accord de genre erroné : le syntagme « \2 \3 » est féminin, « \4 » est masculin.

        <<- /gn/ \3 != "fois" and morph(\3, ":[NA].*:[si]", ":G") and morph(\4, ":[NA].*:p", "*") and not apposition(\3, \4)
        -4>> =suggFemSing(\4)                                                                       && Accord de nombre erroné avec « \2 \3 » : « \4 » devrait être au singulier.

TEST: Une femme {{laconiques}}.                                                 ->> laconique
TEST: Une grande {{homme}}.                                                     ->>
TEST: une géologue {{intelligents}}                                             ->> intelligente
TEST: Et une femme {{déterminées}}                                              ->> déterminée
TEST: on parle là d’une femme {{inconnu}}                                       ->> inconnue
TEST: on parle d’une Église {{brûlées}}                                         ->> brûlée


TEST: L’or allume le feu d’une cupidité d’une couleur et d’une sorte différentes.


__gn_une_2m_virg__
    <start>  une  *WORD  ,  $:A¬:G
        <<- /gn/ morph(\3, ":[NA].*:[fe]:[si]") and not agreement(\3, \5)
        --1>> =suggFemSing(\-1)                                                                     && Cet adjectif n’est pas accordé avec “\2 \3”.
................................................................................
        <<- /gn/ __also__ and hasFemForm(\2) -2>> =switchGender(\2, True)                           && Accord de genre erroné avec « \3 ».
        <<- /gn/ morph(\2, ":[NA].*:[pi]", ":(?:B|G|V0)") and morph(\3, ":[NA].*:s", "*") and not apposition(\2, \3) and not (value(>1, "|et|,|") and morph(>2, ":A"))
        -3>> =suggPlur(\3)                                                                          && Accord de nombre erroné avec « \1 \2 » : « \3 » devrait être au pluriel.

TEST: deux sombres {{idiot}}                                                                ->> idiots
TEST: sept valeurs {{aléatoire}}                                                            ->> aléatoires
TEST: huit {{grandes}} {{claviers}}                                                         ->> grands|||

TEST: X a perdu mon estime et ma considération.
TEST: vivre une situation hors du commun à deux a aussi pesé dans la balance.
TEST: deux jours minimum
TEST: ils disent finalement tous les deux la même chose


__gn_nombre_2m_virg__
................................................................................


## Nombres
__gn_nombre_lettres_1m__
    [cent|mille]  ~[iI][èÈ][mM][eE]$  @:[NA].*:[si]
        <<- !2>>

    @:B:.:p  *WORD
        <<- /gn/ not value(\1, "|neuf|mille|") and morph(\2, ":[NA].*:s", "*") and not morph(<1, ":D.*:s")
            and not value(\2, "|maximum|minimum|multiplié|divisé|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|")
            and not re.search("^[IVXLDM]+$", \1)
        -2>> =suggPlur(\2)                                                                  && Accord de nombre erroné avec « \1 » : « \2 » devrait être au pluriel.















    neuf  *WORD
        <<- /gn/ morph(\2, ":[NA].*:s", "*") and not morph(<1, ":N.*:m:[is]") and not morph(<1, ":D.*:s")
            and not value(\2, "|maximum|minimum|multiplié|divisé|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|")
        -2>> =suggPlur(\2)                                                                  && Accord de nombre erroné avec « \1 » : « \2 » devrait être au pluriel.

    mille  *WORD
        <<- /gn/ not value(\2, "|maximum|minimum|multiplié|divisé|") and morph(\2, ":[NA].*:s", "*") and not morph(<1, ":D.*:s")
................................................................................
TEST: Il a abandonné neuf {{enfant}}.                                               ->> enfants
TEST: On peut trouver mille {{travailleur}} d’un claquement de doigts.              ->> travailleurs
TEST: Il y a quatre cents {{mot}} dans la phrase.                                   ->> mots
TEST: cent {{mot}}                                                                  ->> mots
TEST: cinquante {{mot}}                                                             ->> mots
TEST: mille cinquante {{mot}}                                                       ->> mots
TEST: deux {{tête}}                                                                 ->> têtes




TEST: un logement neuf bâti par des professionnels.
TEST: un mille marin.
TEST: L’article VII mentionné dans la revue
TEST: Le produit de cinq multiplié par trois.
TEST: deux divisé par douze
TEST: il en faut trois minimum, cinq maximum
TEST: il vit dans un vingt-quatre mètre carré.
................................................................................

!!
!!
!!!! Groupe nominal: Accords avec de / des / du                                                   !!
!!
!!

__gn_det_nom_de_det_nom_adj__
    [la|ma|ta|sa|une|cette]  *WORD  [de|d’]  [la|ma|ta|sa|cette|une]  *WORD  *WORD
        <<- /gn/ morph(\6, ":[NA].*:(?:m|f:p)", ":(?:G|P|[fe]:[is]|V0|3[sp])") and morph(\5, ":[NA].*:[fe]") and not apposition(\5, \6)

        -6>> =suggFemSing(\6, True)                                                         && Accord erroné : « \6 » devrait être au féminin singulier.

    [le|un|ce|cet]  *WORD  [de|d’]  [ce|cet|un]  *WORD  *WORD
    [le|un|ce|cet]  *WORD  du  *WORD  *WORD
        <<- /gn/ morph(\-1, ":[NA].*:(?:f|m:p)", ":(?:G|P|[me]:[is]|V0|3[sp])") and morph(\-2, ":[NA].*:[me]") and not apposition(\-2, \-1)
        --1>> =suggMasSing(\-1, True)                                                       && Accord erroné : « \-1 » devrait être au masculin singulier.

    [le|un|ce|cet]  *WORD  de  [mon|ton|son]  *WORD  *WORD
        <<- /gn/ morph(\5, ":", ":[NA].*:f|>[aâeéèêiîou].*:e") and morph(\6, ":[NA].*:(?:f|m:p)", ":(?:G|P|m:[is]|V0|3[sp])") and not apposition(\5, \6)
        -6>> =suggMasSing(\6, True)                                                         && Accord erroné : « \6 » devrait être au masculin singulier.

    [mon|ton|son]  *WORD  [de|d’]  [ce|cet|un]  *WORD  *WORD
    [mon|ton|son]  *WORD  du  *WORD  *WORD
        <<- /gn/ morph(\2, ":[NA].*:m", ":G|>[aâeéèêiîou].*:[ef]")
            and morph(\-1, ":[NA].*:(?:f|m:p)", ":(?:G|P|[me]:[is]|V0|3[sp])") and not apposition(\-2, \-1)
        --1>> =suggMasSing(\-1, True)                                                       && Accord erroné : « \-1 » devrait être au masculin singulier.

    [mon|ton|son]  *WORD  de [mon|ton|son]  *WORD  *WORD









        <<- /gn/ morph(\2, ":[NA].*:m", ":G|>[aâeéèêiîou].*:[ef]")
            and not morph(\-2, ":[NA].*:f|>[aâeéèêiîou].*:e") and morph(\-1, ":[NA].*:(?:f|m:p)", ":(?:G|P|[me]:[is]|V0|3[sp])") and not apposition(\-2, \-1)
        --1>> =suggMasSing(\-1, True)                                                       && Accord erroné : « \-1 » devrait être au masculin singulier.

    [les|ces|mes|tes|ses|nos|vos|leurs|quelques]  *WORD  de [ces|mes|tes|ses|nos|vos|leurs]  *WORD  *WORD
    [les|ces|mes|tes|ses|nos|vos|leurs|quelques]  *WORD  des  *WORD  *WORD
        <<- /gn/ morph(\-1, ":[NA].*:s", ":(?:G|P|[me]:[ip]|V0|3[sp])") and morph(\-2, ":[NA].*:[pi]") and not apposition(\-2, \-1)
            and not (value(>1, "|et|ou|") and morph(>2, ":A.*:[si]"))


        --1>> =suggPlur(\-1)                                                                && Accord erroné : « \-1 » devrait être au pluriel.

TEST: La fille de cette belle {{inconnu}}                       ->> inconnue




TEST: Le chien du voisin {{mourante}}                           ->> mourant
TEST: Un chien de ce voisin {{amicale}}                         ->> amical



TEST: mon amour du chocolat {{immodérée}}                       ->> immodéré
TEST: ton amour de son verbe {{enthousiasmante}}                ->> enthousiasmant











































TEST: Cet homme de mon groupe {{oubliés}}                       ->> oublié


































TEST: Les hommes des mines {{voisin}}                           ->> voisins


TEST: Lutter contre le chômage de masse avec les armes des travailleurs reste pour nous une priorité.
TEST: le meurtre de son ex-petite amie
TEST: à cette envie de la voir sourire tout le temps
TEST: sur les raisons de la chute d’un des hommes populaires du pays.
TEST: sur les raisons de la chute d’une des stars populaires du pays.
TEST: Les bombardements des aviations syrienne et américaine

................................................................................
TODO: Les côtes sont dans leur ensemble extrêmement découpées.

!!! Indécidable                                                                                   !!
TEST: Du sable fin grippe les rouages (accord avec ce qui précède).
TEST: Du monde noir sortent les envahisseurs (accord avec ce qui suit).

!!! Autres tests                                                                                  !!

TEST: l’une dit combien elle en a marre
TEST: à travers le temps passent les existences oubliées
TEST: autour de la parole s’adonnent à d’étonnantes pratiques les hommes perdus
TEST: le Onze de France, je compte de un à trois, numéro gagnant : le huit
TEST: Échappe à la cage qu’est ta vie
TEST: Mon père est contre et ma mère se dit pour mais a un discours très hypocrite quand on aborde le sujet.
TEST: l’ambulance censée amener Cédric n’est jamais arrivée







|
|
|
|







 







|







 







>
>
>
>







 







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







 







|


|

|







 







>







 







>







 







|

>
>
>
>

>
>







 







>







>








>
>







 







|
>

|

>
>
>
>
>
>
>
>
|


|
>

|


>



>
>
>
>







 







>







>






>


>







 







>







>









>
>







 







>







 







|





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







 







>
>
>
>







 







|
|
|
>
|

<
|
|
|

|
|
|

|
|
|
<
|

|
>
>
>
>
>
>
>
>
>
|
<
|

<
<
<
<
>
>
|

<
>
>
>
>


>
>
>


>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|
>
>







 







>







2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
....
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
....
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
....
9540
9541
9542
9543
9544
9545
9546
9547
9548
9549
9550
9551
9552
9553
9554
9555
9556
9557
9558
9559
9560
9561
9562
9563
9564
9565
9566
.....
11256
11257
11258
11259
11260
11261
11262
11263
11264
11265
11266
11267
11268
11269
11270
11271
11272
11273
11274
11275
.....
17026
17027
17028
17029
17030
17031
17032
17033
17034
17035
17036
17037
17038
17039
17040
.....
18130
18131
18132
18133
18134
18135
18136
18137
18138
18139
18140
18141
18142
18143
18144
.....
21962
21963
21964
21965
21966
21967
21968
21969
21970
21971
21972
21973
21974
21975
21976
21977
21978
21979
21980
21981
21982
21983
21984
.....
23678
23679
23680
23681
23682
23683
23684
23685
23686
23687
23688
23689
23690
23691
23692
23693
23694
23695
23696
23697
23698
23699
23700
23701
23702
23703
23704
23705
23706
23707
23708
23709
23710
.....
23787
23788
23789
23790
23791
23792
23793
23794
23795
23796
23797
23798
23799
23800
23801
23802
23803
23804
23805
23806
23807
23808
23809
23810
23811
23812
23813
23814
23815
23816
23817
23818
23819
23820
23821
23822
23823
23824
23825
23826
23827
23828
23829
23830
.....
24091
24092
24093
24094
24095
24096
24097
24098
24099
24100
24101
24102
24103
24104
24105
24106
24107
24108
24109
24110
24111
24112
24113
24114
24115
24116
24117
24118
24119
24120
24121
24122
24123
.....
24126
24127
24128
24129
24130
24131
24132
24133
24134
24135
24136
24137
24138
24139
24140
24141
24142
24143
24144
24145
24146
24147
24148
24149
24150
24151
24152
24153
24154
24155
24156
24157
24158
24159
.....
24893
24894
24895
24896
24897
24898
24899
24900
24901
24902
24903
24904
24905
24906
24907
.....
25400
25401
25402
25403
25404
25405
25406
25407
25408
25409
25410
25411
25412
25413
25414
25415
25416
25417
25418
25419
25420
25421
25422
25423
25424
25425
25426
25427
25428
25429
25430
25431
25432
25433
.....
25437
25438
25439
25440
25441
25442
25443
25444
25445
25446
25447
25448
25449
25450
25451
25452
25453
25454
.....
25815
25816
25817
25818
25819
25820
25821
25822
25823
25824
25825
25826
25827

25828
25829
25830
25831
25832
25833
25834
25835
25836
25837
25838

25839
25840
25841
25842
25843
25844
25845
25846
25847
25848
25849
25850
25851

25852
25853




25854
25855
25856
25857

25858
25859
25860
25861
25862
25863
25864
25865
25866
25867
25868
25869
25870
25871
25872
25873
25874
25875
25876
25877
25878
25879
25880
25881
25882
25883
25884
25885
25886
25887
25888
25889
25890
25891
25892
25893
25894
25895
25896
25897
25898
25899
25900
25901
25902
25903
25904
25905
25906
25907
25908
25909
25910
25911
25912
25913
25914
25915
25916
25917
25918
25919
25920
25921
25922
25923
25924
25925
25926
25927
25928
25929
25930
25931
25932
25933
25934
25935
25936
25937
25938
25939
25940
25941
25942
25943
25944
25945
25946
25947
25948
25949
25950
25951
25952
25953
25954
25955
25956
.....
34716
34717
34718
34719
34720
34721
34722
34723
34724
34725
34726
34727
34728
34729
34730
    [le|du|au] groupe    ?nominal¿  «          $:D  @:[NA]  ?@:[NA]¿  ?@:[NA]¿  »
    [le|du|au] groupe    ?nominal¿  [‘|'|’|`]  $:D  @:[NA]  ?@:[NA]¿  ?@:[NA]¿  [‘|'|’|`]
    [le|du|au] groupe    ?nominal¿  ‹          $:D  @:[NA]  ?@:[NA]¿  ?@:[NA]¿  ›
    [le|du|au] syntagme  ?nominal¿  [“|”|"]    [*WORD|*WORDELD]  *WORD  ?*WORD¿  ?*WORD¿  [“|”|"]
    [le|du|au] syntagme  ?nominal¿  «          [*WORD|*WORDELD]  *WORD  ?*WORD¿  ?*WORD¿  »
    [le|du|au] syntagme  ?nominal¿  [‘|'|’|`]  [*WORD|*WORDELD]  *WORD  ?*WORD¿  ?*WORD¿  [‘|'|’|`]
    [le|du|au] syntagme  ?nominal¿  ‹          [*WORD|*WORDELD]  *WORD  ?*WORD¿  ?*WORD¿  ›
    la proposition                  [“|”|"]    [*WORD|*WORDELD]  [*WORD|*WORDELD]  ?[*WORD|*WORDELD]¿  ?[*WORD|*WORDELD]¿  ?*WORD¿  [“|”|"]
    la proposition                  «          [*WORD|*WORDELD]  [*WORD|*WORDELD]  ?[*WORD|*WORDELD]¿  ?[*WORD|*WORDELD]¿  ?*WORD¿  »
    la proposition                  [‘|'|’|`]  [*WORD|*WORDELD]  [*WORD|*WORDELD]  ?[*WORD|*WORDELD]¿  ?[*WORD|*WORDELD]¿  ?*WORD¿  [‘|'|’|`]
    la proposition                  ‹          [*WORD|*WORDELD]  [*WORD|*WORDELD]  ?[*WORD|*WORDELD]¿  ?[*WORD|*WORDELD]¿  ?*WORD¿  ›
    [<start>|la] locution  ?[nominale|adjectivale|adverbiale|verbale|pronominale]¿  [“|”|"]    [*WORD|*WORDELD] ?,¿ [*WORD|*WORDELD]  ?[*WORD|*WORDELD]¿  ?[*WORD|*WORDELD]¿  ?[*WORD|*WORDELD]¿ ?*WORD¿  [“|”|"]
    [<start>|la] locution  ?[nominale|adjectivale|adverbiale|verbale|pronominale]¿  «          [*WORD|*WORDELD] ?,¿ [*WORD|*WORDELD]  ?[*WORD|*WORDELD]¿  ?[*WORD|*WORDELD]¿  ?[*WORD|*WORDELD]¿ ?*WORD¿  »
    [<start>|la] locution  ?[nominale|adjectivale|adverbiale|verbale|pronominale]¿  [‘|'|’|`]  [*WORD|*WORDELD] ?,¿ [*WORD|*WORDELD]  ?[*WORD|*WORDELD]¿  ?[*WORD|*WORDELD]¿  ?[*WORD|*WORDELD]¿ ?*WORD¿  [‘|'|’|`]
    [<start>|la] locution  ?[nominale|adjectivale|adverbiale|verbale|pronominale]¿  ‹          [*WORD|*WORDELD] ?,¿ [*WORD|*WORDELD]  ?[*WORD|*WORDELD]¿  ?[*WORD|*WORDELD]¿  ?[*WORD|*WORDELD]¿ ?*WORD¿  ›
        <<- ~3:0>> *

    [<start>|l’] ancienne locution  ?[nominale|adjectivale|adverbiale|verbale|pronominale]¿
................................................................................
    [<start>|,]  [“|”|"]    *WORD       [“|”|"]    est féminin
    [<start>|,]  «          *WORD       »          est féminin
    [<start>|,]  [‘|'|’|`]  *WORD       [‘|'|’|`]  est féminin
    [<start>|,]  ‹          *WORD       ›          est féminin
    [<start>|,]  [“|”|"]    *WORD       [“|”|"]    est masculin
    [<start>|,]  «          *WORD       »          est masculin
    [<start>|,]  [‘|'|’|`]  *WORD       [‘|'|’|`]  est masculin
    [<start>|,]  ‹          *WORD       ›          est masculin
    [<start>|,]  [“|”|"]    $:Y         [“|”|"]    est [un|le]     verbe
    [<start>|,]  «          $:Y         »          est [un|le]     verbe
    [<start>|,]  [‘|'|’|`]  $:Y         [‘|'|’|`]  est [un|le]     verbe
    [<start>|,]  ‹          $:Y         ›          est [un|le]     verbe
    [<start>|,]  [“|”|"]    $:Q         [“|”|"]    est [un|le]     participe passé
    [<start>|,]  «          $:Q         »          est [un|le]     participe passé
    [<start>|,]  [‘|'|’|`]  $:Q         [‘|'|’|`]  est [un|le]     participe passé
................................................................................
    [ne|n’] point
        <<- =>> select(\-1, "", ":N")

__da_nos__
    nos $¬:B
        <<- =>> select(\1, ":D")

__da_parler__
    [>aller|>entendre|>falloir|>faire|>pouvoir|>savoir|>vouloir] parler
        <<- =>> select(\-1, ":Y")

__da_parmi__
    parmi *WORD
        <<- =>> select(\1, ":R")

__da_pas__
    pas
        <<- morph(<1, ":[VWX]") =>> select(\1, "", ":N")
................................................................................
    !! à en juger par ¡¡
    [à|a] [en|>an] [juger|jugé+ses|jugeait|jugeais] [par|pare+s|>part]
        <<- /loc/ ->> à en juger par                                                                && Confusion : “à en juger par” c’est-à-dire “selon le jugement qu’on se fait avec”.

TEST: {{a en jugé part}} cet article, c’est bientôt la fin.                 ->> à en juger par
TEST: ils sont à en juger par leurs résultats les prochains champions.


__conf_à_l_emporte_pièce__
    !! à l’ emporte-pièce ¡¡
    [à|a] l’ [emporte+s] [>pièce|>pisse]
    [à|a] l’ [en|>an|>hanse] >porte [>pièce|>pisse]
    [à|a] >lent >porte [>pièce|>pisse]
    [à|a] l’ [emporte-pièce|emportes-pièce|emporte-pièces|emportes-pièces]
        <<- /conf/ ->> à l’emporte-pièce                                                && Locution “à l’emporte-pièce”.|https://fr.wiktionary.org/wiki/%C3%A0_l%E2%80%99emporte-pi%C3%A8ce
        <<- !3>>

TEST: agir {{à l’emporte pièce}}                                    ->> à l’emporte-pièce
TEST: réagir à l’emporte-pièce


__conf_à_risques_et_périls__
    !! à [mes|tes|ses|nos|vos|leurs] risques et périls ¡¡
    [a|à] [mes|tes|ses|nos|vos|leur|leurs] [risque+s] [et|est|é|eh|hé|ai|aie+s|ait] [péril+s|>pérille]
        <<- /loc/ ->> à \2 risques et périls                                            && Confusion. Locution “à ses risques et périls”.|https://fr.wiktionary.org/wiki/%C3%A0_ses_risques_et_p%C3%A9rils

TEST: {{à leurs risques et périlles}}                               ->> à leurs risques et périls
................................................................................
    [fausse+s] des îles [aléoutiennes|caïmans|Kouriles|Tonga]
    [fausse+s] du [Chili|Japon|Pérou|Pérou-Chili]
    [fausse+s] d’ [aisance|orchestre|Amérique|Atacama|Izu-Bonin|Izu-Ogasawara]
    [fausse+s] de l’ orchestre
    [fausse+s] à [>compost|>déchet|>lisier|>fumier|>plongeon|>plongée|>purin|>merde|>ordure]
    [fausse+s] [au|aux|des] [>caïman|>crocodile|>charognard|>lion|>loup|>louve|ours|>serpent|>cobra|>diable]
    [fausse+s] [>abyssal|>canin|>béant|>commun|>océanique|sous-marine+s|>septique|>immense|>profond|>nasal|>iliaque|>temporal]
        <<- /conf/ -1>> =\1.replace("au", "o").replace("AU", "O")  && Confusion probable : le mot “fausse” est l’adjectif féminin de “faux”. Pour évoquer une dépression ou une cavité dans le sol, écrivez “fosse”.

    au bord de la fausse
        <<- /conf/ --1>> fosse                                     && Confusion probable : le mot “fausse” est l’adjectif féminin de “faux”. Pour évoquer une dépression ou une cavité dans le sol, écrivez “fosse”.

    >fosse [>alerte|>déclaration|>réponse]
        <<- /conf/ -1>> =\1.replace("o", "au").replace("O", "AU")
        && Confusion probable : une fosse est une dépression ou une cavité dans le sol. Pour évoquer une falsification ou une erreur, écrivez “fausse”.|https://fr.wiktionary.org/wiki/fausse

TEST: la {{fausse}} Calypso.                                            ->> fosse
TEST: La {{fausse}} des Mariannes.                                      ->> fosse
TEST: La {{fausse}} d’aisance.                                          ->> fosse
TEST: La {{fausse}} à lisier.                                           ->> fosse
................................................................................
    en rangs d’ oignons ?serrés¿
    en rase campagne
    en rase-mottes
    en règle générale
    en roue libre
    en second lieu
    en sens inverse
    en simultané
    en situation [irrégulière|régulière]
    en sous-main
    en sous-nombre ?[évident|flagrant]¿
    en sous nombre ?[évident|flagrant]¿
    en tant [que|qu’] >tel
    en tête à tête
    en tête-à-tête
................................................................................
    >billet [de|d’] [*NUM|@:B:.:p] [euros|dollars|centimes|cents|livres|shillings]
    >bisphénol A
    [>boîte|>boite] [aux|à] lettres
    [>boîte|>boite] à [bijoux|gants|outils|sardines]
    [>boîte|>boite] [de|d’] nuit
    >bombe à [eau|fission|fusion|fragmentation|hydrogène|neutrons|retardement|sous-munitions]
    >bombe à rayonnement renforcé
    >bonimenteur [de|d’] foire
    >bonnet [de|d’] nuit
    [bonne+s|>bonniche] à tout faire
    >bordereau d’ expédition
    >boucle d’ >oreille
    >bouée [de|d’] sauvetage
    >bouffée d’ air [frais|pur]
    >bout [de|d’] gras
................................................................................
TEST: faire faux bond


# fausse / fosse
__conf_fausse_fosse__
    >faire une fosse couche
    combien de >fosse [couche+s]
        <<- /conf/ -3>> =\3.replace("o", "au").replace("O", "AU")   && Confusion. Une “fausse couche”.

    [>être|>demeurer|>paraître|>paraitre|>sembler|>rester|>apparaître|>apparaitre] >fosse
        <<- /conf/ not morph(>1, ">septique/")
        --1>> =\-1.replace("o", "au").replace("O", "AU")            && Confusion probable : une fosse est une profondeur, pour l’adjectif féminin de “faux” est “fausse”.|https://fr.wiktionary.org/wiki/fausse

TEST: elle a fait une {{fosse}} couche.                                     ->> fausse
TEST: cette réponse est {{fosse}}                                           ->> fausse
TEST: la réponse à votre question, c’est fosse septique


# filtre / philtre
__conf_filtre_philtre2__
    >boire $:D >filtre
        <<- /conf/ -3>> philtre|philtres
        && Confusion probable. Un filtre est un instrument de filtrage, un philtre est une boisson (magique) procurant des effets sur le buveur.|https://fr.wiktionary.org/wiki/philtre
................................................................................


__gn_le_2m__
    le  *WORD  *WORD
        <<- /gn/ morph(\1, ":D") and not value(<1, "|et|ou|de|") and not morph(\3, ">seul/") >>>
        <<- /gn/ morph(\2, ":[NA].*:[me]", ":(?:B|G|V0)") and morph(\3, ":[NA].*:f", "*") and not apposition(\2, \3)
        -3>> =suggMasSing(\3, True)                                                                 && Accord de genre erroné : le syntagme « \1 \2 » est masculin, « \3 » est féminin.
        <<- /gn/ __also__ and morph(\2, ":A.*:e:[si]") -1>> la                                      && Accord de genre erroné : « \3 » est féminin.
        <<- /gn/ morph(\2, ":[NA].*:[si]", ":G") and morph(\3, ":[NA].*:p", ":[GWsi]") and not apposition(\2, \3)
        -3>> =suggMasSing(\3)                                                                       && Accord de nombre erroné avec « \1 \2 » : « \3 » devrait être au singulier.

    [et|ou]  le  *WORD  *WORD
        <<- /gn/ morph(\2, ":D") and not morph(<1, ":[NA]") and not morph(\4, ">seul/") >>>
        <<- /gn/ morph(\3, ":[NA].*:[me]", ":(?:B|G|V0|f)") and morph(\4, ":[NA].*:f", "*") and not apposition(\3, \4)
        -4>> =suggMasSing(\4, True)                                                                 && Accord de genre erroné : le syntagme « \2 \3 » est masculin, « \4 » est féminin.
        <<- /gn/ __also__ and morph(\3, ":A.*:e:[si]") -2>> la                                      && Accord de genre erroné : « \4 » est féminin.
        <<- /gn/ morph(\3, ":[NA].*:[si]", ":G") and morph(\4, ":[NA].*:p", ":[GWsi]") and not apposition(\4, \4)
        -4>> =suggMasSing(\4)                                                                       && Accord de nombre erroné avec « \2 \3 » : « \4 » devrait être au singulier.

TEST: le test très {{cons}} qu’on a passé hier.                                         ->> con
TEST: c’était le chien {{perdue}} des voisins.                                          ->> perdu
TEST: viens vite ou le pari {{imperdables}} sera moins facile…                          ->> imperdable
TEST: connaître et le grand {{perdante}}                                                ->> perdant
TEST: Le bruit {{perçus}} par les voisins.                                              ->> perçu
TEST: {{le}} gigantesque {{explosion}}                                                  ->> la|||
TEST: je ne sais jamais quoi faire et {{le}} gigantesque {{explosion}} n’a rien arrangé ->> la|||
TEST: si le premier film est un triomphe, le deuxième est un demi-succès, et le troisième une déception.
TEST: Cela aboutira sur une contractualisation coûteuse pour organiser cette divergence d’intérêts, et le gestionnaire aura le dernier mot.


__gn_le_2m_virg__
    <start>  le  *WORD  ,  $:A¬:G
        <<- /gn/ morph(\3, ":[NA].*:[me]:[si]", ":3[sp]") and not agreement(\3, \5)
................................................................................
TEST: Je la levai, la brandis et frappai de taille.


__gn_la_2m__
    la  *WORD  *WORD
        <<- /gn/ morph(\1, ":D") and not value(<1, "|et|ou|de|d’|") and not morph(\3, ">seul/") >>>
        <<- /gn/ morph(\2, ":[NA].*:[fe]", ":(?:B|G|V0)") and morph(\3, ":[NA].*:m", "*") and not apposition(\2, \3)
        -3>> =suggFemSing(\3, True)                                                                 && Accord de genre erroné : le syntagme « \1 \2 » est féminin, « \3 » est masculin.
        <<- /gn/ __also__ and morph(\2, ":A.*:e:[si]") and not value(<1, "|à|") -1>> le             && Accord de genre erroné : « \3 » est masculin.
        <<- /gn/ morph(\2, ":[NA].*:[si]", ":G") and morph(\3, ":[NA].*:p", ":[GWsi]") and not apposition(\2, \3)
        -3>> =suggFemSing(\3)                                                                       && Accord de nombre erroné avec « \1 \2 » : « \3 » devrait être au singulier.

    [et|ou]  la  *WORD  *WORD
        <<- /gn/ morph(\2, ":D") and not morph(<1, ":[NA]|>(?:et|ou)/") and not morph(\4, ">seul/") >>>
        <<- /gn/ morph(\3, ":[NA].*:[fe]", ":(?:B|G|V0|m)") and morph(\4, ":[NA].*:m", "*") and not apposition(\3, \4)
        -4>> =suggFemSing(\4, True)                                                                 && Accord de genre erroné : le syntagme « \2 \3 » est féminin, « \4 » est masculin.
        <<- /gn/ __also__ and morph(\3, ":A.*:e:[si]") -2>> le                                      && Accord de genre erroné : « \4 » est masculin.
        <<- /gn/ morph(\3, ":[NA].*:[si]", ":G") and morph(\4, ":[NA].*:p", ":[GWsi]") and not apposition(\3, \4)
        -4>> =suggFemSing(\4)                                                                       && Accord de nombre erroné avec « \2 \3 » : « \4 » devrait être au singulier.

    [de|d’]  la  *WORD  *WORD
        <<- /gn/ morph(\2, ":D") and not morph(<1, ":[NA]|>(?:et|ou)/") and not morph(\4, ">seul/") >>>
        <<- /gn/ morph(\3, ":[NA].*:[fe]", ":(?:B|G|V0|m)") and morph(\4, ":[NA].*:m", "*") and not apposition(\3, \4)
        -4>> =suggFemSing(\4, True)                                                                 && Accord de genre erroné : le syntagme « \2 \3 » est féminin, « \4 » est masculin.
        <<- /gn/ __also__ and morph(\3, ":A.*:e:[si]") and not hasFemForm(\4) -1:2>> du             && Accord de genre erroné : « \4 » est masculin.
        <<- /gn/ morph(\3, ":[NA].*:[si]", ":G") and morph(\4, ":[NA].*:p", ":[GWsi]") and not apposition(\3, \4)
        -4>> =suggFemSing(\4)                                                                       && Accord de nombre erroné avec « \2 \3 » : « \4 » devrait être au singulier.

TEST: La plus grande {{cinglé}}.                                                ->> cinglée
TEST: {{la}} gigantesque {{monument}}                                           ->> le|||
TEST: il imaginait de la pluie {{noir}} tombant sur une terre dévastée.         ->> noire
TEST: la place {{balayées}} par le vent                                         ->> balayée
TEST: je voyais de la pluie {{noires}}                                          ->> noire
TEST: je le sus et {{la}} légitimiste {{intellect}}                             ->> le|||
TEST: il en avait entendu parler et la belle {{explications}} ne tenait plus    ->> explication
TEST: {{de la}} légitimiste {{intellectualisme}}                                ->> du|||
TEST: de la légitimiste {{intellectuel}}                                        ->> intellectuelle
TEST: Il faut donc examiner ensemble le panneau et la paroi latérale.
TEST: Il faut donc examiner ensemble le panneau et la paroi latéraux.
TEST: Il faut donc examiner ensemble les panneaux et la paroi latéraux.
TEST: Il faut donc examiner ensemble les panneaux et la paroi latérale.


__gn_la_2m_virg__
................................................................................

## un / une
__gn_un_2m__
    un  *WORD  *WORD
        <<- /gn/ not value(<1, "|et|ou|d’|") and not morph(\3, ">seul/") >>>
        <<- /gn/ morph(\2, ":[NA].*:[me]", ":(?:B|G|V0)") and morph(\3, ":[NA].*:f", "*") and not apposition(\2, \3)
        -3>> =suggMasSing(\3, True)                                                                 && Accord de genre erroné : le syntagme « \1 \2 » est masculin, « \3 » est féminin.
        <<- /gn/ __also__ and morph(\2, ":A.*:e:[si]") -1>> une                                     && Accord de genre erroné : « \3 » est féminin.
        <<- /gn/ morph(\2, ":[NA].*:[si]", ":G") and morph(\3, ":[NA].*:p", "*") and not apposition(\2, \3)
        -3>> =suggMasSing(\3)                                                                       && Accord de nombre erroné avec « \2 » : « \3 » devrait être au singulier.

    [et|ou|d’]  un  *WORD  *WORD
        <<- /gn/ not morph(<1, ":[NA]|>(?:et|ou)/") and not morph(\4, ">seul/") >>>
        <<- /gn/ morph(\3, ":[NA].*:[me]", ":(?:B|G|V0|f)") and morph(\4, ":[NA].*:f", "*") and not apposition(\3, \4)
        -4>> =suggMasSing(\4, True)                                                                 && Accord de genre erroné : le syntagme « \2 \3 » est masculin, « \4 » est féminin.
        <<- /gn/ __also__ and morph(\3, ":A.*:e:[si]") -2>> une                                     && Accord de genre erroné : « \4 » est féminin.
        <<- /gn/ morph(\3, ":[NA].*:[si]", ":G") and morph(\4, ":[NA].*:p", "*") and not apposition(\3, \4)
        -4>> =suggMasSing(\4)                                                                       && Accord de nombre erroné avec « \2 \3 » : « \4 » devrait être au singulier.

TEST: un exercice pas très {{utiles}}.                                                      ->> utile
TEST: un homme {{grands}}                                                                   ->> grand
TEST: un homme {{futiles}}                                                                  ->> futile
TEST: {{un}} gigantesque {{explosion}}                                                      ->> une|||
TEST: que sais-tu d’un homme {{grande}} comme un arbre                                      ->> grand
TEST: je me souviens d’un homme {{arrogants}}                                               ->> arrogant
TEST: trois d’{{un}} quelconque {{élégance}}                                                ->> une|||
TEST: C’est pas les quelques vues sur Linux qui vont rattraper un scénario {{bancale}}.     ->> bancal


__gn_un_2m_virg__
    <start>  un  *WORD  ,  $:A¬:G
        <<- /gn/ morph(\3, ":[NA].*:[me]:[si]") and not agreement(\3, \5)
        --1>> =suggMasSing(\-1)                                                                     && Cet adjectif n’est pas accordé avec “\2 \3”.
................................................................................


__gn_une_2m__
    une  *WORD  *WORD
        <<- /gn/ not value(<1, "|et|ou|d’|") and not morph(\3, ">seul/") >>>
        <<- /gn/ morph(\2, ":[NA].*:[fe]", ":(?:B|G|V0)") and morph(\3, ":[NA].*:m", "*") and not apposition(\2, \3)
        -3>> =suggFemSing(\3, True)                                                                 && Accord de genre erroné : le syntagme « \1 \2 » est féminin, « \3 » est masculin.
        <<- /gn/ __also__ and morph(\2, ":A.*:e:[si]") -1>> un                                      && Accord de genre erroné : « \3 » est masculin.
        <<- /gn/ \2 != "fois" and morph(\2, ":[NA].*:[si]", ":G") and morph(\3, ":[NA].*:p", "*") and not apposition(\2, \3)
        -3>> =suggFemSing(\3)                                                                       && Accord de nombre erroné avec « \1 \2 » : « \3 » devrait être au singulier.

    [et|ou|d’]  une  *WORD  *WORD
        <<- /gn/ not morph(<1, ":[NA]|>(?:et|ou)/") and not morph(\4, ">seul/") >>>
        <<- /gn/ morph(\3, ":[NA].*:[fe]", ":(?:B|G|V0|m)") and morph(\4, ":[NA].*:m", "*") and not apposition(\3, \4)
        -4>> =suggFemSing(\4, True)                                                                 && Accord de genre erroné : le syntagme « \2 \3 » est féminin, « \4 » est masculin.
        <<- /gn/ __also__ and morph(\3, ":A.*:e:[si]") -2>> un                                      && Accord de genre erroné : « \4 » est masculin.
        <<- /gn/ \3 != "fois" and morph(\3, ":[NA].*:[si]", ":G") and morph(\4, ":[NA].*:p", "*") and not apposition(\3, \4)
        -4>> =suggFemSing(\4)                                                                       && Accord de nombre erroné avec « \2 \3 » : « \4 » devrait être au singulier.

TEST: Une femme {{laconiques}}.                                                 ->> laconique
TEST: Une grande {{homme}}.                                                     ->>
TEST: une géologue {{intelligents}}                                             ->> intelligente
TEST: Et une femme {{déterminées}}                                              ->> déterminée
TEST: on parle là d’une femme {{inconnu}}                                       ->> inconnue
TEST: on parle d’une Église {{brûlées}}                                         ->> brûlée
TEST: {{une}} gigantesque {{porte-avions}}                                      ->> un|||
TEST: d’{{une}} titanesque {{opportunisme}}                                     ->> un|||
TEST: L’or allume le feu d’une cupidité d’une couleur et d’une sorte différentes.


__gn_une_2m_virg__
    <start>  une  *WORD  ,  $:A¬:G
        <<- /gn/ morph(\3, ":[NA].*:[fe]:[si]") and not agreement(\3, \5)
        --1>> =suggFemSing(\-1)                                                                     && Cet adjectif n’est pas accordé avec “\2 \3”.
................................................................................
        <<- /gn/ __also__ and hasFemForm(\2) -2>> =switchGender(\2, True)                           && Accord de genre erroné avec « \3 ».
        <<- /gn/ morph(\2, ":[NA].*:[pi]", ":(?:B|G|V0)") and morph(\3, ":[NA].*:s", "*") and not apposition(\2, \3) and not (value(>1, "|et|,|") and morph(>2, ":A"))
        -3>> =suggPlur(\3)                                                                          && Accord de nombre erroné avec « \1 \2 » : « \3 » devrait être au pluriel.

TEST: deux sombres {{idiot}}                                                                ->> idiots
TEST: sept valeurs {{aléatoire}}                                                            ->> aléatoires
TEST: huit {{grandes}} {{claviers}}                                                         ->> grands|||
TEST: soixante-et-une femmes {{récompensée}}                                                ->> récompensées
TEST: X a perdu mon estime et ma considération.
TEST: vivre une situation hors du commun à deux a aussi pesé dans la balance.
TEST: deux jours minimum
TEST: ils disent finalement tous les deux la même chose


__gn_nombre_2m_virg__
................................................................................


## Nombres
__gn_nombre_lettres_1m__
    [cent|mille]  ~[iI][èÈ][mM][eE]$  @:[NA].*:[si]
        <<- !2>>

    $:B:e:p  *WORD
        <<- /gn/ not value(\1, "|neuf|mille|") and morph(\2, ":[NA].*:s", "*") and not morph(<1, ":D.*:s")
            and not value(\2, "|maximum|minimum|multiplié|divisé|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|")
            and not re.search("^[IVXLDM]+$", \1)
        -2>> =suggPlur(\2)                                                                  && Accord de nombre erroné avec « \1 » : « \2 » devrait être au pluriel.

    [vingt-et-un|trente-et-un|quarante-et-un|cinquante-et-un|soixante-et-un|septante-et-un|octante-et-un|huitante-et-un|nonante-et-un]  *WORD
        <<- /gn/ morph(\2, ":[NA].*:[fs]", "*") and not morph(<1, ":D.*:s")
            and not value(\2, "|maximum|minimum|multiplié|divisé|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|")
            and not re.search("^[IVXLDM]+$", \1)
        -2>> =suggMasPlur(\2)                                                              && Accord de nombre erroné avec « \1 » : « \2 » devrait être au pluriel.
        <<- /gn/ __also__ and morph(\2, ":[NA].*:f", ":[me]") -1>> \1e                     && Accord de genre erroné : « \2 » est féminin.

    [vingt-et-une|trente-et-une|quarante-et-une|cinquante-et-une|soixante-et-une|septante-et-une|octante-et-une|huitante-et-une|nonante-et-une]  *WORD
        <<- /gn/ morph(\2, ":[NA].*:[ms]", "*") and not morph(<1, ":D.*:s")
            and not value(\2, "|maximum|minimum|multiplié|divisé|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|")
            and not re.search("^[IVXLDM]+$", \1)
        -2>> =suggFemPlur(\2)                                                               && Accord de nombre erroné avec « \1 » : « \2 » devrait être au pluriel.
        <<- /gn/ __also__ and morph(\2, ":[NA].*:m", ":[fe]") -1>> =\1[:-1]                 && Accord de genre erroné : « \2 » est masculin.

    neuf  *WORD
        <<- /gn/ morph(\2, ":[NA].*:s", "*") and not morph(<1, ":N.*:m:[is]") and not morph(<1, ":D.*:s")
            and not value(\2, "|maximum|minimum|multiplié|divisé|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|")
        -2>> =suggPlur(\2)                                                                  && Accord de nombre erroné avec « \1 » : « \2 » devrait être au pluriel.

    mille  *WORD
        <<- /gn/ not value(\2, "|maximum|minimum|multiplié|divisé|") and morph(\2, ":[NA].*:s", "*") and not morph(<1, ":D.*:s")
................................................................................
TEST: Il a abandonné neuf {{enfant}}.                                               ->> enfants
TEST: On peut trouver mille {{travailleur}} d’un claquement de doigts.              ->> travailleurs
TEST: Il y a quatre cents {{mot}} dans la phrase.                                   ->> mots
TEST: cent {{mot}}                                                                  ->> mots
TEST: cinquante {{mot}}                                                             ->> mots
TEST: mille cinquante {{mot}}                                                       ->> mots
TEST: deux {{tête}}                                                                 ->> têtes
TEST: soixante-et-une {{femme}}                                                     ->> femmes
TEST: {{soixante-et-une}} {{hommes}}                                                ->> soixante-et-un|||
TEST: soixante-et-un {{homme}}                                                      ->> hommes
TEST: {{soixante-et-un}} {{femmes}}                                                 ->> soixante-et-une|||
TEST: un logement neuf bâti par des professionnels.
TEST: un mille marin.
TEST: L’article VII mentionné dans la revue
TEST: Le produit de cinq multiplié par trois.
TEST: deux divisé par douze
TEST: il en faut trois minimum, cinq maximum
TEST: il vit dans un vingt-quatre mètre carré.
................................................................................

!!
!!
!!!! Groupe nominal: Accords avec de / des / du                                                   !!
!!
!!

__gn_det_nom_de_det_nom_adj_mas_sing__
    [le|un|ce|cet]  *WORD  [de|d’]  [ce|cet|un]         *WORD  @:[NA].*:(?:f|[me]:p)¬:(?:G|P|[me]:[is]|V0|3[sp])
    [le|un|ce|cet]  *WORD  du                           *WORD  @:[NA].*:(?:f|[me]:p)¬:(?:G|P|[me]:[is]|V0|3[sp])
        <<- /gn/ morph(\-2, ":[NA].*:[me]") and not apposition(\-2, \-1)
        --1>> =suggMasSing(\-1, True)                                                               && Accord erroné : “\-1” devrait être au masculin singulier.


    [le|un|ce|cet]  *WORD  de  [mon|ton|son]            *WORD  @:[NA].*:(?:f|[me]:p)¬:(?:G|P|[me]:[is]|V0|3[sp])
        <<- /gn/ morph(\-2, "[NA].*:[me]", ":[NA].*:f|>[aâeéèêiîoôuh].*:e") and not apposition(\-2, \-1)
        --1>> =suggMasSing(\-1, True)                                                               && Accord erroné : “\-1” devrait être au masculin singulier.

    [le|un|ce|cet]  *WORD  de  [l’|notre|votre|leur]    *WORD  @:[NA].*:(?:f|[me]:p)¬:(?:G|P|[me]:[is]|V0|3[sp])
        <<- /gn/ morph(\-2, "[NA].*:m:[si]", ":[NA].*:[fe]") and not apposition(\-2, \-1)
        --1>> =suggMasSing(\-1, True)                                                               && Accord erroné : “\-1” devrait être au masculin singulier.

    [mon|ton|son]  *WORD  [de|d’]  [ce|cet|un]          *WORD  @:[NA].*:(?:f|[me]:p)¬:(?:G|P|[me]:[is]|V0|3[sp])
    [mon|ton|son]  *WORD  du                            *WORD  @:[NA].*:(?:f|[me]:p)¬:(?:G|P|[me]:[is]|V0|3[sp])
        <<- /gn/ morph(\2, ":[NA].*:[me]:[si]", ":G|>[aâeéèêiîoôuh].*:[ef]") and not apposition(\-2, \-1)

        --1>> =suggMasSing(\-1, True)                                                               && Accord erroné : “\-1” devrait être au masculin singulier.

    [mon|ton|son]  *WORD  de [mon|ton|son]              *WORD  @:[NA].*:(?:f|[me]:p)¬:(?:G|P|[me]:[is]|V0|3[sp])
        <<- /gn/ morph(\2, ":[NA].*:[me]:[si]", ":G|>[aâeéèêiîoôuh].*:[ef]") and morph(\-2, ":[NA].*:[me]:[si]", ":[NA].*:f|>[aâeéèêiîoôuh].*:e") and not apposition(\-2, \-1)
        --1>> =suggMasSing(\-1, True)                                                               && Accord erroné : “\-1” devrait être au masculin singulier.

    [mon|ton|son]  *WORD  de [l’|notre|votre|leur]      *WORD  @:[NA].*:(?:f|[me]:p)¬:(?:G|P|[me]:[is]|V0|3[sp])
        <<- /gn/ morph(\2, ":[NA].*:[me]:[si]", ":G|>[aâeéèêiîoôuh].*:[ef]") and morph(\-2, ":[NA].*:m:[si]", ":[NA].*:[fe]:[si]") and not apposition(\-2, \-1)
        --1>> =suggMasSing(\-1, True)                                                               && Accord erroné : “\-1” devrait être au masculin singulier.

    [l’|notre|votre|leur]  *WORD  [de|d’]  [ce|cet|un]  *WORD  @:[NA].*:(?:f|[me]:p)¬:(?:G|P|[me]:[is]|V0|3[sp])
    [l’|notre|votre|leur]  *WORD  du                    *WORD  @:[NA].*:(?:f|[me]:p)¬:(?:G|P|[me]:[is]|V0|3[sp])
        <<- /gn/ morph(\2, ":[NA].*:m", ":[fe]") and morph(\-2, ":[NA].*:[me]") and not apposition(\-2, \-1)

        --1>> =suggMasSing(\-1, True)                                                               && Accord erroné : “\-1” devrait être au masculin singulier.





    [l’|notre|votre|leur]  *WORD  de  [mon|ton|son]     *WORD  @:[NA].*:(?:f|[me]:p)¬:(?:G|P|[me]:[is]|V0|3[sp])
        <<- /gn/ morph(\2, ":[NA].*:m", ":[fe]") and morph(\-2, ":[NA].*:m:[si]", ":[NA].*:f|>[aâeéèêiîoôuh].*:e") and not apposition(\-2, \-1)
        --1>> =suggMasSing(\-1, True)                                                               && Accord erroné : “\-1” devrait être au masculin singulier.


    [l’|notre|votre|leur]  *WORD  de  [l’|notre|votre|leur]  *WORD  @:[NA].*:(?:f|[me]:p)¬:(?:G|P|[me]:[is]|V0|3[sp])
        <<- /gn/ morph(\2, ":[NA].*:m", ":[fe]") and morph(\-2, "[NA].*:m:[si]", ":[NA].*:[fe]:[si]") and not apposition(\-2, \-1)
        --1>> =suggMasSing(\-1, True)                                                               && Accord erroné : “\-1” devrait être au masculin singulier.

TEST: Le chien du voisin {{mourante}}                           ->> mourant
TEST: Un chien de ce voisin {{amicale}}                         ->> amical
TEST: le chien de son voisin {{tuée}}                           ->> tué
TEST: le chien de leur patron {{malades}}                       ->> malade
TEST: Cet homme de mon groupe {{oubliés}}                       ->> oublié
TEST: mon amour du chocolat {{immodérée}}                       ->> immodéré
TEST: ton amour de son verbe {{enthousiasmante}}                ->> enthousiasmant
TEST: son amour de notre travail {{ardus}}                      ->> ardu
TEST: notre programme du mois {{disparus}}                      ->> disparu
TEST: l’homme de mon parti {{oubliée}}                          ->> oublié
TEST: l’ignorant de leur groupe {{rejetés}} par tous            ->> rejeté


__gn_det_nom_de_det_nom_adj_fem_sing__
    [la|ma|ta|sa|une|cette]  *WORD  [de|d’]  [la|ma|ta|sa|cette|une]    *WORD  @:[NA].*:(?:m|[fe]:p)¬:(?:G|P|[fe]:[is]|V0|3[sp])
        <<- /gn/ morph(\-2, ":[NA].*:[fe]") and not apposition(\-2, \-1)
        --1>> =suggFemSing(\-1, True)                                                               && Accord erroné : “\-1” devrait être au féminin singulier.

    [la|ma|ta|sa|une|cette]  *WORD  [de|d’]  [mon|ton|son]              *WORD  @:[NA].*:(?:m|[fe]:p)¬:(?:G|P|[fe]:[is]|V0|3[sp])
        <<- /gn/ morph(\-2, ">[aâeéèêiîoôuh].*:[NA].*:f:[si]", ":[me]") and not apposition(\-2, \-1)
        --1>> =suggFemSing(\-1, True)                                                               && Accord erroné : “\-1” devrait être au féminin singulier.

    [la|ma|ta|sa|une|cette]  *WORD  [de|d’]  [l’|notre|votre|leur]      *WORD  @:[NA].*:(?:m|[fe]:p)¬:(?:G|P|[fe]:[is]|V0|3[sp])
        <<- /gn/ morph(\-2, ":[NA].*:f:[si]", ":[me]") and not apposition(\-2, \-1)
        --1>> =suggFemSing(\-1, True)                                                               && Accord erroné : “\-1” devrait être au féminin singulier.

    [mon|ton|son]  *WORD  [de|d’]  [la|ma|ta|sa|cette|une]              *WORD  @:[NA].*:(?:m|[fe]:p)¬:(?:G|P|[fe]:[is]|V0|3[sp])
        <<- /gn/ morph(\2, ">[aâeéèêiîoôuh].*:[NA].*:f:[si]", ":[me]") and morph(\-2, ":[NA].*:[fe]") and not apposition(\-2, \-1)
        --1>> =suggFemSing(\-1, True)                                                               && Accord erroné : “\-1” devrait être au féminin singulier.

    [mon|ton|son]  *WORD  [de|d’]  [mon|ton|son]                        *WORD  @:[NA].*:(?:m|[fe]:p)¬:(?:G|P|[fe]:[is]|V0|3[sp])
        <<- /gn/ morph(\2, ">[aâeéèêiîoôuh].*:[NA].*:f:[si]", ":[me]") and morph(\-2, ">[aâeéèêiîoôuh].*:[NA].*:f:[si]", ":[me]") and not apposition(\-2, \-1)
        --1>> =suggFemSing(\-1, True)                                                               && Accord erroné : “\-1” devrait être au féminin singulier.

    [mon|ton|son]  *WORD  [de|d’]  [l’|notre|votre|leur]                *WORD  @:[NA].*:(?:m|[fe]:p)¬:(?:G|P|[fe]:[is]|V0|3[sp])
        <<- /gn/ morph(\2, ">[aâeéèêiîoôuh].*:[NA].*:f:[si]", ":[me]") and morph(\-2, ":[NA].*:f:[si]", ":[me]") and not apposition(\-2, \-1)
        --1>> =suggFemSing(\-1, True)                                                               && Accord erroné : “\-1” devrait être au féminin singulier.

    [l’|notre|votre|leur]  *WORD  [de|d’]  [la|ma|ta|sa|cette|une]      *WORD  @:[NA].*:(?:m|[fe]:p)¬:(?:G|P|[fe]:[is]|V0|3[sp])
        <<- /gn/ morph(\2, ":[NA].*:f:[si]", ":[me]") and morph(\-2, ":[NA].*:[fe]") and not apposition(\-2, \-1)
        --1>> =suggFemSing(\-1, True)                                                               && Accord erroné : “\-1” devrait être au féminin singulier.

    [l’|notre|votre|leur]  *WORD  [de|d’]  [mon|ton|son]                *WORD  @:[NA].*:(?:m|[fe]:p)¬:(?:G|P|[fe]:[is]|V0|3[sp])
        <<- /gn/ morph(\2, ":[NA].*:f:[si]", ":[me]") and morph(\-2, ">[aâeéèêiîoôuh].*:[NA].*:f:[si]", ":[me]") and not apposition(\-2, \-1)
        --1>> =suggFemSing(\-1, True)                                                               && Accord erroné : “\-1” devrait être au féminin singulier.

    [l’|notre|votre|leur]  *WORD  [de|d’]  [l’|notre|votre|leur]        *WORD  @:[NA].*:(?:m|[fe]:p)¬:(?:G|P|[fe]:[is]|V0|3[sp])
        <<- /gn/ morph(\2, ":[NA].*:f:[si]", ":[me]") and morph(\-2, ":[NA].*:f:[si]", ":[me]") and not apposition(\-2, \-1)
        --1>> =suggFemSing(\-1, True)                                                               && Accord erroné : “\-1” devrait être au féminin singulier.

TEST: La fille de cette belle {{inconnu}}                       ->> inconnue
TEST: la fille de notre directrice {{enlevé}}                   ->> enlevée
TEST: cette femme de mon école {{renvoyé}}                      ->> renvoyée
TEST: mon école de ma ville {{rasé}}                            ->> rasée
TEST: ton entreprise de ton institutrice {{racheté}}            ->> rachetée
TEST: son entreprise de leur poche {{racheté}}                  ->> rachetée
TEST: l’école de ma psychiatre {{brûlé}}                        ->> brûlée
TEST: l’école de mon entreprise {{pillé}}                       ->> pillée
TEST: l’école de notre cité {{reconstruites}}                   ->> reconstruite
TEST: l’existence de la foi {{rejeté}}                          ->> rejetée
TEST: son homologue de la ville écarté de l’ordre


__gn_det_nom_de_det_nom_adj_sing!3__
    [le|la|l’|un|une|ce|cet|cette|mon|ton|son|ma|ta|sa|notre|votre|leur]  *WORD  [de|d’]  [la|l’|un|une|ce|cet|cette|mon|ton|son|ma|ta|sa|notre|votre|leur]  *WORD  @:[NA].*:p¬:(?:G|P|[me]:[is]|V0|3[sp])
    [le|la|l’|un|une|ce|cet|cette|mon|ton|son|ma|ta|sa|notre|votre|leur]  *WORD  du                                                                          *WORD  @:[NA].*:p¬:(?:G|P|[me]:[is]|V0|3[sp])
        <<- /gn/ morph(\-2, ":[NA].*:[me]") and not apposition(\-2, \-1)
        --1>> =suggSing(\-1, True)                                                                  && Accord erroné : “\-1” devrait être au masculin singulier.

TEST: la femme de notre homme {{expulsés}}                      ->> expulsé


__gn_det_nom_de_det_nom_adj_plur__
    [les|ces|mes|tes|ses|nos|vos|leurs|quelques]  *WORD  de [ces|mes|tes|ses|nos|vos|leurs|quelques]  *WORD  @:[NA].*:[pi]¬:(?:G|P|s|V0|3[sp])
    [les|ces|mes|tes|ses|nos|vos|leurs|quelques]  *WORD  des                                          *WORD  @:[NA].*:[pi]¬:(?:G|P|s|V0|3[sp])
        <<- /gn/ morph(\2, ":[NA].*:[pi]", ":s") and morph(\-2, ":[NA].*:[pi]") and not apposition(\-2, \-1)
                and not agreement(\-2, \-1) and not agreement(\2, \-1)
        --1>> =suggAgree(\-1, \-2)                                                                  && Accord erroné : “\-1” devrait être accordé avec “\2” ou “\-2”.

    [les|ces|mes|tes|ses|nos|vos|leurs|quelques]  *WORD  de [ces|mes|tes|ses|nos|vos|leurs|quelques]  *WORD  @:[NA].*:s¬:(?:G|P|i|p|V0|3[sp])
    [les|ces|mes|tes|ses|nos|vos|leurs|quelques]  *WORD  des                                          *WORD  @:[NA].*:s¬:(?:G|P|i|p|V0|3[sp])
        <<- /gn/ morph(\2, ":[NA].*:[pi]", ":s") and morph(\-2, ":[NA].*:[pi]") and not apposition(\-2, \-1) and not (value(>1, "|et|ou|") and morph(>2, ":A.*:[si]"))
        --1>> =suggPlur(\-1)                                                                        && Accord erroné : “\-1” devrait être au pluriel.

TEST: ces femmes des mines {{voisins}}                              ->> voisines
TEST: Les hommes des mines {{voisin}}                               ->> voisins
TEST: Les psychologues des mines payés à coup de lance-pierre
TEST: les hommes des mines voisines
TEST: Lutter contre le chômage de masse avec les armes des travailleurs reste pour nous une priorité.
TEST: le meurtre de son ex-petite amie
TEST: à cette envie de la voir sourire tout le temps
TEST: sur les raisons de la chute d’un des hommes populaires du pays.
TEST: sur les raisons de la chute d’une des stars populaires du pays.
TEST: Les bombardements des aviations syrienne et américaine

................................................................................
TODO: Les côtes sont dans leur ensemble extrêmement découpées.

!!! Indécidable                                                                                   !!
TEST: Du sable fin grippe les rouages (accord avec ce qui précède).
TEST: Du monde noir sortent les envahisseurs (accord avec ce qui suit).

!!! Autres tests                                                                                  !!
TEST: Le président d’audience à un prévenu de cambriolage : « Vous aviez un papier avec des suites de quatre chiffres, on sait que ce sont des codes pour des clés. »
TEST: l’une dit combien elle en a marre
TEST: à travers le temps passent les existences oubliées
TEST: autour de la parole s’adonnent à d’étonnantes pratiques les hommes perdus
TEST: le Onze de France, je compte de un à trois, numéro gagnant : le huit
TEST: Échappe à la cage qu’est ta vie
TEST: Mon père est contre et ma mère se dit pour mais a un discours très hypocrite quand on aborde le sujet.
TEST: l’ambulance censée amener Cédric n’est jamais arrivée