Grammalecte  Check-in [e73a871408]

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: e73a8714081fde59b12b48cc82c5066550cabc9e398cc6aca51c3100824f4112
User & Date: olr on 2018-08-24 17:05:26
Other Links: branch diff | manifest | tags
Context
2018-08-24
20:56
[core] gc engine: don’t parse graph which name is also a valid option set to False check-in: 2a778178ee user: olr tags: core, rg
17:05
[fr] conversion: regex rules -> graph rules check-in: e73a871408 user: olr tags: fr, rg
2018-08-23
10:55
[fr] conversion: regex rules -> graph rules check-in: be3bfebccb user: olr tags: fr, rg
Changes

Modified gc_lang/fr/rules.grx from [bf2f601e79] to [a7cf1dc71f].

474
475
476
477
478
479
480
481

482
483
484
485
486
487
488
474
475
476
477
478
479
480

481
482
483
484
485
486
487
488







-
+








# mètres (m)
__[s>(p_chiffres_m)__
    "\d+ (m) "  @@w <<- ~1>> _

# heures
__[s](p_heures)__
    (?:de  |)[012]?\d[h:]\d\d(?:[m:]\d\ds?|) <<- ~>> *
    (?:de|à|jusqu’à) [012]?\d[h:]\d\d(?:[m:]\d\ds?|) <<- ~>> *

# crochets
__[s](p_points_suspension_entre_crochets)__
    \[…\] <<- ~>> *
__[s](p_mot_entre_crochets)__
    \[({w_1})\] @@1
    <<- \1.isdigit() ~>> *
520
521
522
523
524
525
526

527
528
529
530
531
532
533
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534







+







TEST: C’est le b.a.-ba du métier.
TEST: qui a été le plus honnête [Rires]
TEST: Marion Maréchal-Le Pen. Afin que Maréchal ne soit pas analysé comme un impératif, “Le Pen” devient “Le_Pen”.
TEST: Car [je] deviendrai plus insaisissable que jamais.
TEST: C’est dans le dossier D:\Data
TEST: Dossier C:\Program Files (x86)\LibreOffice
TEST: [1] Dossier à revoir.
TEST: jusqu’à 12h47



!!!
!!!
!!! Processeur: balises HTML et LaTeX                                                             !!
!!!
4142
4143
4144
4145
4146
4147
4148


4149
4150
4151
4152
4153
4154
4155
4143
4144
4145
4146
4147
4148
4149
4150
4151
4152
4153
4154
4155
4156
4157
4158







+
+







    tu  ?[ne|n’]¿  [lui|leur]                     en                         @:V¬:(?:G|P|[ISK].*:2s)
        <<- /conj/ not morph(<1, ":V0.*:2s") --1>> =suggVerb(\-1, ":2s")    # Conjugaison erronée. Accord avec “\1”. Le verbe devrait être à la 2ᵉ personne du singulier.

TEST: Tu ne {{ment}} jamais.
TEST: Tu {{a}} mal ?
TEST: Tu ne le lui {{prend}} pas.
TEST: Tu ne m’{{attendra}} pas.
TEST: Jusqu’ici, on a tu le nom de la créature.
TEST: il s’est tu les jours après son agression.


## 3sg
__conj_il__
    il  @:V¬:(?:3s|G)
        <<- /conj/ not (morph(\2, ":[PQ]") and morph(<1, ":V0.*:3s"))
        -2>> =suggVerb(\2, ":3s")                                           # Conjugaison erronée. Accord avec “\1”. Le verbe devrait être à la 3ᵉ personne du singulier.
12630
12631
12632
12633
12634
12635
12636


12637
12638




12639
12640
12641
12642
12643
12644
12645
12646

12647
12648
12649
12650
12651
12652
12653
12633
12634
12635
12636
12637
12638
12639
12640
12641
12642

12643
12644
12645
12646
12647
12648
12649
12650
12651
12652
12653
12654
12655
12656
12657
12658
12659
12660
12661
12662







+
+

-
+
+
+
+








+







__conf_pâte_patte_pat__
    [>patte|pat] [>alimentaire|>alsacienne|>chinoise|>feuilletée|>italienne|>thermique]
    [>patte|pat] au [basilic|beurre|saumon|pesto|poulet|thon]
    [>patte|pat] [à|a] [>pain|>crêpe|>gaufre|>pizza|>tarte|>modeler|>tartiner]
    [>patte|pat] [d’|de] [>amande|>amende|>fruit]
        <<- /conf/ -1>> pâte|pâtes                              # Confusion. La patte est le membre d’un animal (ou d’une table…). La matière pâteuse s’écrit “pâte”.


    >mettre ?[pas|jamais]¿ la main à la [>patte|pat]
    >coq en [>patte|pat]
        <<- /conf/ -3>> pâte                                    # Confusion. La patte est le membre d’un animal (ou d’une table…). La matière pâteuse s’écrit “pâte”.
        <<- /conf/ --1>> pâte                                   # Confusion. La patte est le membre d’un animal (ou d’une table…). La matière pâteuse s’écrit “pâte”.

    >coup de [>pâte|pat]
        <<- /conf/ -3>> patte                                   # Confusion. Une pâte est une matière pâteuse. Pour désigner le membre d’un animal, écrivez “patte”.

TEST: Prépare la {{patte}} à tarte.
TEST: Ils mangent souvent des {{pattes}} au thon.
TEST: Des {{pattes}} alimentaires.
TEST: Elles ont acheté de la {{patte}} à tartiner.
TEST: La {{patte}} à pizza est plus épaisse que la pâte à crêpes.
TEST: Elle adore la {{patte}} d’amande.
TEST: Il est comme un coq en {{pattes}} là.
TEST: Elle n’a jamais mis la main à la {{patte}}.


# peu / peux / peut
__conf_peut_peux_peu2__
    [peux|peut]  [de|d’]  @:[NA]¬*
        <<- /conf/ space_after(\1, 1, 3) -1>> peu               # Confusion probable : “\1” est une forme conjuguée de “pouvoir”, écrivez “peu” pour dire “pas beaucoup”.

15906
15907
15908
15909
15910
15911
15912
15913

15914
15915
15916
15917
15918
15919
15920
15921
15922
15923
15924

15925
15926


15927
15928
15929

15930
15931
15932
15933

15934
15935
15936
15937
15938

15939
15940
15941
15942
15943


15944
15945
15946

15947
15948
15949


15950
15951
15952
15953
15954




15955
15956
15957
15958
15959
15960
15961

15962
15963
15964
15965
15966
15967





15968
15969
15970
15971
15972
15973
15974


15975
15976
15977
15978
15979
15980
15981
15982










15983
15984
15985
15986
15987

15988
15989
15990

15991
15992
15993



15994
15995
15996
15997
15998




15999
16000
16001
16002




16003
16004
16005
16006
16007
16008
16009
16010
16011
16012

16013
16014
16015
16016
16017
16018
16019
16020
16021
16022
16023
16024
16025
16026
16027
16028




























16029
16030
16031
16032
16033
16034
16035
15915
15916
15917
15918
15919
15920
15921

15922









15923

15924


15925
15926



15927


15928

15929





15930





15931
15932

15933

15934



15935
15936
15937




15938
15939
15940
15941
15942
15943
15944
15945
15946
15947
15948
15949
15950
15951




15952
15953
15954
15955
15956
15957
15958
15959
15960
15961


15962
15963








15964
15965
15966
15967
15968
15969
15970
15971
15972
15973
15974
15975
15976
15977
15978
15979
15980
15981

15982



15983
15984
15985





15986
15987
15988
15989




15990
15991
15992
15993
15994
15995
15996
15997
15998
15999
16000
16001
16002

16003
















16004
16005
16006
16007
16008
16009
16010
16011
16012
16013
16014
16015
16016
16017
16018
16019
16020
16021
16022
16023
16024
16025
16026
16027
16028
16029
16030
16031
16032
16033
16034
16035
16036
16037
16038







-
+
-
-
-
-
-
-
-
-
-

-
+
-
-
+
+
-
-
-
+
-
-

-
+
-
-
-
-
-
+
-
-
-
-
-
+
+
-

-
+
-
-
-
+
+

-
-
-
-
+
+
+
+







+


-
-
-
-
+
+
+
+
+





-
-
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+





+


-
+
-
-
-
+
+
+
-
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+









-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+







        <<- /conj/ not morph(<1, ":[VR]|>de") -2>> =suggVerb(\2, ":3p") # Conjugaison erronée. Accord avec “\1”. Le verbe devrait être à la 3ᵉ personne du pluriel.

TEST: lesquels {{devienne}} des ennuyeux incomparables.
TEST: Mais parmi les millions de causes à défendre, lesquelles choisir ?
TEST: les failles par lesquelles entrait l’eau étaient impossibles à boucher.



# L’accord par syllepse est obligatoire après /la plupart/, ainsi qu’après /nombre/ et /quantité/ employés sans déterminant. L’accord se fait avec le « pseudo-complément ».
@@@@
@@@@
@@@@
@@@@
@@@@END_GRAPH                                                                                      _
@@@@
@@@@
@@@@
@@@@


__conj_beaucoup_d_aucuns_la_plupart__
# on / ont
__[i]/conf(conf_ont1)__
    beaucoup    @:V¬:(?:3p|P|Q|G)
        <<- /conj/ not morph(<1, ":[VR]|>de/")
    (?:ils|c?eux +qui|c?elles +qui) +(on)  @@$
    <<- -1>> ont                                            # Incohérence : « on » est un pronom personnel, « ont » est une conjugaison du verbe avoir.

        -2>> =suggVerb(\2, ":3p")                                       # Conjugaison erronée. Accord avec “\1”. Le verbe devrait être à la 3ᵉ personne du pluriel.
TEST: ces gens-là ils {{on}} {{raison}} plus souvent que la plupart des gens.
TEST: Ils soutiennent ceux qui {{on}} {{tant}} de raison d’être en colère.


    d’ aucuns   @:V¬:(?:3p|P|Q|G)
__[i]/conf(conf_ont2)!6__
    (?<![dD]’)(?:elles|ceux-(?:ci|là)|celles-(?:ci|là)) +(on)  @@$
    <<- not before(r"(?i)\b(?:à|avec|sur|chez|par|dans|parmi|contre|ni|de|pour|sous) +$")
    -1>> ont                                                # Incohérence : « on » est un pronom personnel, « ont » est une conjugaison du verbe avoir.

    la plupart  @:V¬:(?:3p|P|Q|G)
TEST: celles-là {{on}} {{vraiment}} un problème avec la religion.
TEST: j’ai, tu as, ils ont, elles {{on}}
TEST: Or parmi celles-ci on trouve typiquement d’un côté les structures


        <<- /conj/ not morph(<1, ":[VR]|>de/")
        -3>> =suggVerb(\3, ":3p")                                       # Conjugaison erronée. Accord avec “\1 \2”. Le verbe devrait être à la 3ᵉ personne du pluriel.
# L’accord par syllepse est obligatoire après /la plupart/, ainsi qu’après /nombre/ et /quantité/ employés sans déterminant. L’accord se fait avec le « pseudo-complément ».

__[i]/conj(conj_beaucoup_d_aucuns_la_plupart)__
    beaucoup    qui  @:V¬:(?:3p|P|G)
    (beaucoup|d’aucuns|la plupart) +({w_2})  @@0,$
    <<- morphex(\2, ":V", ":(?:3p|P|Q|G)") and not morph(word(-1), ":[VR]|>de/", False, False)
    -2>> =suggVerb(@, ":3p")                                # Conjugaison erronée. Accord avec « \1 ». Le verbe devrait être à la 3ᵉ personne du pluriel.
        <<- /conj/ not morph(<1, ":[VR]|>de/")
        -3>> =suggVerb(\3, ":3p")                                       # Conjugaison erronée. Accord avec \1. Le verbe devrait être à la 3ᵉ personne du pluriel.

__[i]/conj(conj_beaucoup_d_aucuns_la_plupart_qui)__
    (beaucoup|d’aucuns|la plupart) +qui +({w_2})  @@0,$
    <<- morphex(\2, ":V", ":(?:3p|P|Q|G)") and not morph(word(-1), ":[VR]", False, False)
    -2>> =suggVerb(@, ":3p")                                # Conjugaison erronée. Accord avec « \1 ». Le verbe devrait être à la 3ᵉ personne du pluriel.
    daucuns   qui  @:V¬:(?:3p|P|G)
    la plupart  qui  @:V¬:(?:3p|P|G)
        <<- /conj/ not morph(<1, ":[VR]|>de/")
        -3>> =suggVerb(\3, ":3p")                                       # Conjugaison erronée. Accord avec \1 \2 \3”. Le verbe devrait être à la 3ᵉ personne du pluriel.

TEST: la plupart des hommes {{vienne}}
TEST: La plupart {{admet}}
TEST: beaucoup {{vienne}}
TEST: d’aucuns {{pense}} que c’est faux
TEST: beaucoup qui ne {{pense}} jamais à rien, mais qui ont quand même des avis sur tout.
TEST: beaucoup entre la peste et le choléra.
TEST: Beaucoup avait été accompli


__[i]/conj(conj_certains_tous_plusieurs)__
    (?<!de )(certaine?s|tou(?:te|)s|plusieurs) +(?:qui +|)({w_2})  @@0,$
    <<- morphex(\2, ":V", ":(?:G|N|A|3p|P|Q)") and not morph(word(-1), ":[VR]", False, False)
    -2>> =suggVerb(@, ":3p")                                # Conjugaison erronée. Accord avec « \1 ». Le verbe devrait être à la 3ᵉ personne du pluriel.
__conj_certains_tous_plusieurs__
    [certains|certaines|tous|toutes|plusieurs]  @:V¬:(?:G|N|A|3p|P|Q)
    [certains|certaines|tous|toutes|plusieurs]  qui  @:V¬:(?:G|3p|P)
        <<- /conj/ not morph(<1, ":[VR]|>de/")
        --1>> =suggVerb(\-1, ":3p")                                     # Conjugaison erronée. Accord avec \1. Le verbe devrait être à la 3ᵉ personne du pluriel.

TEST: certains {{prenne}} leur temps
TEST: Plusieurs qui {{pense}} que c’est une arnaque se sont quand même trompés.


__[i]/conj(conj_certains_certaines)__
    (certaine?) +({w_2})  @@0,$
__conj_certains_certaines__
    [<start>|,]  [certain|certaine]  @:V.*:[123]p¬:[GWMNA]
    <<- isStart() >>>
    <<- morphex(\2, ":V.*:[123]p", ":[GWM]") -1>> \1s                                               # Accord de conjugaison avec “\2”. Mettez au pluriel “\1” si vous désignez plusieurs personnes.
    <<- \1.endswith("n") and morphex(\2, ":V.*:[123]s", ":(?:V0e.*:3s|N.*:[me]:[si])")
    -2>> =suggVerb(@, ":3p")                                                                        # Conjuguez “\2” à la troisième personne du pluriel, si “\1” est un pronom censé désigner plusieurs personnes.
    <<- __also__ -1>> \1s                                                                           # Mettez au pluriel “\1” si vous désignez plusieurs personnes.
    <<- __else__ and \1.endswith("e") and morphex(\2, ":V.*:[123]s", ":(?:V0e.*:3s|N.*:[fe]:[si])")
    -2>> =suggVerb(@, ":3p")                                                                        # Conjuguez “\2” à la troisième personne du pluriel, si “\1” est un pronom censé désigner plusieurs personnes.
    <<- __also__ -1>> \1s                                                                           # Mettez au pluriel “\1” si vous désignez plusieurs personnes.
        <<- /conj/ -2>> \1s                                             # Mettez au pluriel “\2” si vous désignez plusieurs personnes.
        <<- /conj/ morph(\3, ":[12]p") ->> =suggVerb(\3, ":3p")         # Conjuguez “\3” à la troisième personne du pluriel, si “\2” est un pronom censé désigner plusieurs personnes.

    [<start>|,]  certain  @:V.*:[123]s¬>(?:être|demeurer|rester|devenir|redevenir).*:3s|:N.*:[me]:[si]
        <<- /conj/ -3>> =suggVerb(\3, ":3p")                            # Conjuguez “\3” à la troisième personne du pluriel, si “\2” est un pronom censé désigner plusieurs personnes.
        <<- /conj/ -2>> \1s                                             # Mettez au pluriel “\2” si vous désignez plusieurs personnes.

    [<start>|,]  certaine  @:V.*:[123]s¬>(?:être|demeurer|rester|devenir|redevenir).*:3s|:N.*:[fe]:[si]
        <<- /conj/ -3>> =suggVerb(\3, ":3p")                            # Conjuguez “\3” à la troisième personne du pluriel, si “\2” est un pronom censé désigner plusieurs personnes.
        <<- /conj/ -2>> \1s                                             # Mettez au pluriel “\2” si vous désignez plusieurs personnes.

TEST: {{certain}} deviennent idiots à cette seule pensée.
TEST: mais c’est exact, {{certaine}} perdent leur calme souvent dans les méandres de l’administration.
TEST: {{certain}} {{donne}} beaucoup.
TEST: certaine est la défaite.
TEST: si tu persévères, certaine deviendra la réussite.


__[i]/conj(conj_det_plur_nom)__
__conj_det_plur_nom__
    ([cmts]es|[nv]os|leurs|quelques) +({w_2}) +({w_2})  @@0,w,$
    <<- morph(\2, ":[NAQ].*:[pi]", False) and morphex(\3, ":V", ":(?:[13]p|P|Y|G|A.*:e:[pi])") and morphex(word(-1), ":C", ":[YP]", True)
        and not( morph(\3, ":3s", False) and before(r"(?i)\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") ) >>>
    [ces|mes|tes|ses|nos|vos|leurs|quelques]  @:[NA].*:[pi]  @:V¬:(?:[13]p|P|Y|G|A.*:e:[pi])
        <<- /conj/ morph(<1, ":C|<start>|>,")
            and not( morph(\3, ":3s") and before(r"(?i)\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") ) >>>
    <<- not checkAgreement(\2, \3)
    -3>> =suggVerb(@, ":3p")                                # Conjugaison erronée. Accord avec « \1 \2… ». Le verbe devrait être à la 3ᵉ personne du pluriel.
    <<- __else__ and isAmbiguousAndWrong(\2, \3, ":p", ":3p")
    -3>> =suggVerb(@, ":3p", suggPlur)                      # Accord avec « \1 \2… » incorrect. Conjugaison erronée ou accord nom/adjectif incorrect.
__[i]/conj(conj_det_plur_nom_qui)__
        <<- /conj/ not checkAgreement(\2, \3) -3>> =suggVerb(\3, ":3p") # Conjugaison erronée. Accord avec \1 \2…. Le verbe devrait être à la 3ᵉ personne du pluriel.
        <<- /conj/ __else__ and isAmbiguousAndWrong(\2, \3, ":p", ":3p")
        -3>> =suggVerb(\3, ":3p", suggPlur)                             # Accord avec « \1 \2… » incorrect. Conjugaison erronée ou accord nom/adjectif incorrect.

    ([cmts]es|[nv]os|leurs|quelques) +({w_2}) +qui +({w_2})  @@0,w,$
    <<- morph(\2, ":[NAQ].*:[pi]", False) and morphex(\3, ":V", ":(?:[13]p|P|Y|G|A.*:e:[pi])") and morphex(word(-1), ":C", ":[YP]", True)
        and not( morph(\3, ":3s", False) and before(r"(?i)\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") )
    -3>> =suggVerb(@, ":3p")                                # Conjugaison erronée. Accord avec « \1 \2… ». Le verbe devrait être à la 3ᵉ personne du pluriel.
    [ces|mes|tes|ses|nos|vos|leurs|quelques]  @:[NA].*:[pi]  qui  @:V¬:(?:[13]p|P|Y|G|A.*:e:[pi])
        <<- /conj/ morph(<1, ":C|<start>|>,")
            and not( morph(\4, ":3s") and before(r"(?i)\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") )
        -4>> =suggVerb(\4, ":3p")                                       # Conjugaison erronée. Accord avec \1 \2 \3. Le verbe devrait être à la 3ᵉ personne du pluriel.

TEST: Ses « chiens » {{coure}} sur ma pelouse.
TEST: mes filles {{passe}} ce matin
TEST: vos filles {{passes}} ce matin
TEST: ces travaux qui {{demande}} tant d’efforts.
TEST: vos questions ne {{réclame}} aucune réflexion.
TEST: le lien entre les agences de renseignement et ces mêmes entreprises pouvait reposer sur des activités de surveillance à proprement parler.


__[i]/conj(conj_det_plur_nom_confusion)__
__conj_det_plur_nom_confusion__
    (les|certaine?s|plusieurs) +({w_2}) +({w_2})  @@0,w,$
    <<- morph(\2, ":[NAQ].*:[pi]", False) and morphex(\3, ":V", ":(?:[13]p|P|Y|G|A.*:e:[pi])") and morphex(word(-1), ":C", ":[YP]", True)
        and not( morph(\3, ":3s", False) and before(r"(?i)\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") ) >>>
    <<- not checkAgreement(\2, \3)
    -3>> =suggVerb(@, ":3p")                                # Conjugaison erronée. Accord avec « \1 \2… ». Le verbe devrait être à la 3ᵉ personne du pluriel.
    <<- __else__ and (\1 == "les" or \1 == "Les") and isVeryAmbiguousAndWrong(\2, \3, ":p", ":3p", isStart())
    -3>> =suggVerb(@, ":3p", suggPlur)                      # Accord avec « les \2… » incorrect. Conjugaison erronée ou accord nom/adjectif incorrect.
    <<- __else__ and (\1 == "certains" or \1 == "Certains") and isVeryAmbiguousAndWrong(\2, \3, ":m:p", ":3p", isStart())
    -3>> =suggVerb(@, ":3p", suggMasPlur)                   # Accord avec « certains \2… » incorrect. Conjugaison erronée ou accord nom/adjectif incorrect.
    <<- __else__ and (\1 == "certaines" or \1 == "Certaines") and isVeryAmbiguousAndWrong(\2, \3, ":f:p", ":3p", isStart())
    -3>> =suggVerb(@, ":3p", suggFemPlur)                   # Accord avec « certaines \2… » incorrect. Conjugaison erronée ou accord nom/adjectif incorrect.
__[i]/conj(conj_det_plur_nom_qui_confusion)__
    (les|certaine?s|plusieurs) +({w_2}) +qui +({w_2})  @@0,w,$
    <<- morph(\2, ":[NAQ].*:[pi]", False) and morphex(\3, ":V", ":(?:[13]p|P|Q|Y|G|A.*:e:[pi])") and morphex(word(-1), ":C", ":[YP]", True)
        and not( morph(\3, ":3s", False) and before(r"(?i)\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") )
    -3>> =suggVerb(@, ":3p")                                # Conjugaison erronée. Accord avec « \1 \2… ». Le verbe devrait être à la 3ᵉ personne du pluriel.
    les  @:[NA].*:[pi]  @:V¬:(?:3p|P|Y|G|A.*:e:[pi])
        <<- /conj/ morph(<1, ":C|<start>|>,")
            and not( morph(\3, ":3s") and before(r"(?i)\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") ) >>>
        <<- /conj/ not checkAgreement(\2, \3)
        -3>> =suggVerb(\3, ":3p")                                       # Conjugaison erronée. Accord avec \1 \2…. Le verbe devrait être à la 3ᵉ personne du pluriel.
        <<- /conj/ __else__ and isVeryAmbiguousAndWrong(\2, \3, ":p", ":3p", value(<1, "|<start>|,|"))
        -3>> =suggVerb(\3, ":3p", suggPlur)                             # Accord avec “\1 \2… incorrect. Conjugaison erronée ou accord nom/adjectif incorrect.

    [certains|certaines]  @:[NA].*:[pi]  @:V¬:(?:3p|P|Y|G|A.*:e:[pi])
        <<- /conj/ morph(<1, ":C|<start>|>,")
            and not( morph(\3, ":3s") and before(r"(?i)\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") ) >>>
        <<- /conj/ not checkAgreement(\2, \3)
        -3>> =suggVerb(\3, ":3p")                                       # Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du pluriel.
        <<- /conj/ __else__ and isVeryAmbiguousAndWrong(\2, \3, ":m:p", ":3p", value(<1, "|<start>|,|"))
        -3>> =suggVerb(\3, ":3p", suggMasPlur)                          # Accord avec “\1 \2… incorrect. Conjugaison erronée ou accord nom/adjectif incorrect.
        <<- /conj/ __else__ and isVeryAmbiguousAndWrong(\2, \3, ":f:p", ":3p", value(<1, "|<start>|,|"))
        -3>> =suggVerb(\3, ":3p", suggFemPlur)                          # Accord avec “\1 \2… incorrect. Conjugaison erronée ou accord nom/adjectif incorrect.

    plusieurs  @:[NA].*:[pi]  @:V¬:(?:3p|P|Y|G|A.*:e:[pi])
        <<- /conj/ morph(<1, ":C|<start>|>,")
            and not( morph(\3, ":3s") and before(r"(?i)\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") )
            and not checkAgreement(\2, \3)
        -3>> =suggVerb(\3, ":3p")                                       # Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du pluriel.

    [les|certains|certaines|plusieurs]  @:[NA].*:[pi]  qui  @:V¬:(?:[13]p|P|Y|G)
        <<- /conj/ morph(<1, ":C|<start>|>,")
            and not( morph(\4, ":3s") and before(r"(?i)\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") )
        -4>> =suggVerb(\4, ":3p")                                       # Conjugaison erronée. Accord avec \1 \2 \3. Le verbe devrait être à la 3ᵉ personne du pluriel.

TEST: Les abstentions {{est}} présumée manifester un défaut d’opinion marquée
TEST: Les cours de culture générale nous {{apporte}} de l’ouverture d’esprit.
TEST: Les hommes ne le lui {{pardonnes}} pas.
TEST: Les infirmières à mi-temps ne {{travaille}} pas dans cette aile.
TEST: les données, en quantité plus que suffisante, {{indique}} que…
TEST: Les hommes comme celui-là {{mange}} comme deux.
16057
16058
16059
16060
16061
16062
16063
16064
16065
16066
16067
16068
16069






16070
16071
16072


16073
16074
16075
16076
16077
16078
16079
16080
16081
16082
16083
16084
16085
16086





16087
16088

16089
16090
16091
16092
16093
16094
16095
16096
16097
16098
16099
16100
16101
16102
16103



16104
16105
16106

16107
16108
16109
16110
















16111
16112
16113
16114
16115
16116
16117
16118
16119
16120
16121
16122




16123
16124
16125
16126
16127
16128
16129
16130
16131
16132
16133
16134
16135
16136



16137
16138
16139

16140
16141
16142
16143
16144
16145
16146



16147
16148
16149
16150
16151
16152
16153
16154
16155


16156
16157

16158
16159
16160
16161
16162
16163
16164
16165



16166
16167
16168
16169
16170




16171





16172
16173
16174
16175




16176

16177
16178
16179


16180
16181
16182
16183
16184
16185
16186

16187
16188
16189
16190
16191
16192
16193
16194
16195
16196
16197
16198
16199
16200
16201
16202


16203


16204
16205
16206
16207
16208
16209
16210
16060
16061
16062
16063
16064
16065
16066






16067
16068
16069
16070
16071
16072



16073
16074
16075
16076
16077
16078
16079
16080
16081
16082
16083





16084
16085
16086
16087
16088


16089
16090
16091
16092
16093
16094
16095
16096
16097
16098
16099
16100
16101



16102
16103
16104



16105
16106
16107
16108
16109
16110
16111
16112
16113
16114
16115
16116
16117
16118
16119
16120
16121
16122
16123
16124
16125
16126
16127
16128
16129
16130
16131
16132
16133




16134
16135
16136
16137
16138
16139
16140
16141
16142
16143
16144
16145
16146
16147
16148
16149


16150
16151
16152



16153
16154
16155
16156
16157



16158
16159
16160
16161
16162
16163
16164
16165
16166
16167


16168
16169


16170
16171
16172
16173
16174
16175



16176
16177
16178
16179




16180
16181
16182
16183
16184
16185
16186
16187
16188
16189
16190



16191
16192
16193
16194
16195
16196
16197


16198
16199







16200


16201
16202
16203











16204
16205
16206
16207
16208
16209
16210
16211
16212
16213
16214
16215







-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
+
+









-
-
-
-
-
+
+
+
+
+
-
-
+












-
-
-
+
+
+
-
-
-
+




+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+








-
-
-
-
+
+
+
+












-
-
+
+
+
-
-
-
+




-
-
-
+
+
+







-
-
+
+
-
-
+





-
-
-
+
+
+

-
-
-
-
+
+
+
+

+
+
+
+
+

-
-
-
+
+
+
+

+

-
-
+
+
-
-
-
-
-
-
-
+
-
-



-
-
-
-
-
-
-
-
-
-
-
+
+

+
+







TEST: les chattes {{danse}}
TEST: certains hommes {{marchandes}} sans cesse
TEST: certaines femmes {{danse}} beaucoup
TEST: Sauf que l’un comme l’autre avaient dû y renoncer.
TEST: L’un comme l’autre devaient y renoncer.


__[i]/conj(conj_des_nom1)__
    ^ *des +({w_2}) +({w_2})  @@w,$
    <<- morph(\1, ":[NAQ].*:[pi]", False) and morphex(\2, ":V", ":(?:[13]p|P|G|Q|A.*:[pi])") and morph(word(1), ":(?:R|D.*:p)|>au/", False, True) >>>
    <<- not morph(\2, ":[NA]", False) -2>> =suggVerb(@, ":3p")                          # Conjugaison erronée. Accord avec « des \1 ». Le verbe devrait être à la 3ᵉ personne du pluriel.
    <<- __else__ and not checkAgreement(\1, \2) -2>> =suggVerb(@, ":3p", suggPlur)      # Conjugaison erronée. Accord avec « des \1 ». Le verbe devrait être à la 3ᵉ personne du pluriel.
__[i]/conj(conj_des_nom_qui)__
__conj_des_nom__
    [<start>|,]  des  @:[NA].*:[pi]  @:V¬:(?:3p|P|G|Q|A.*:[pi])
        <<- /conj/ morph(>1, ":(?:R|D.*:p)|>au/|<end>|>,") >>>
        <<- /conj/ not morph(\4, ":[NA]") -4>> =suggVerb(\4, ":3p")                                 # Conjugaison erronée. Accord avec “\2 \3. Le verbe devrait être à la 3ᵉ personne du pluriel.
        <<- /conj/ __else__ and not checkAgreement(\3, \4) -4>> =suggVerb(\4, ":3p", suggPlur)      # Conjugaison erronée. Accord avec “\2 \3. Le verbe devrait être à la 3ᵉ personne du pluriel.

    ^ *des +({w_2}) +qui +({w_2})  @@w,$
    <<- morph(\1, ":[NAQ].*:[pi]", False) and morphex(\2, ":V", ":(?:[13]p|P|G)")
    -2>> =suggVerb(@, ":3p")                                # Conjugaison erronée. Accord avec « des \1 ». Le verbe devrait être à la 3ᵉ personne du pluriel.
    [<start>|,]  des  @:[NA].*:[pi]  qui  @:V¬:(?:3p|P|G)
        <<- /conj/ -5>> =suggVerb(\5, ":3p")                                                        # Conjugaison erronée. Accord avec “\2 \3 \4. Le verbe devrait être à la 3ᵉ personne du pluriel.

TEST: Des hommes {{arrive}}.
TEST: Des femmes ne {{demande}} rien.
TEST: des femmes qui {{conduise}} la marche du monde.


#### NOMS PROPRES

# 3sg
__[s]/conj(conj_nom_propre)__
    ([A-ZÉÈ][\w-]+) +({w_1})  @@0,$
    <<- not before(r"\b(?:et |ou |[dD][eu] |ni |[dD]e l’) *$") and morph(\1, ":M", False) and morphex(\2, ":[123][sp]", ":(?:G|3s|3p!|P|M|[AQ].*:[si]|N.*:m:s)")
        and not morph(word(-1), ":[VRD]", False, False) and not before(r"([A-ZÉÈ][\w-]+), +([A-ZÉÈ][\w-]+), +$")
        and not (morph(\2, ":3p", False) and word(-1))
__conj_nom_propre__
    ~^[A-ZÉÈ]  @:[123][sp]¬:(?:G|3s|3p!|P|M|A.*:[si]|N.*:m:s)
        <<- /conj/ not before(r"\b[dD]e l’ *$") and morph(\1, ":M")
            and not morph(<1, ":[VRD]|>(?:ni|et|ou)/") and not before(r"([A-ZÉÈ][\w-]+), +([A-ZÉÈ][\w-]+), +$")
            and not ( morph(\2, ":3p") and before(r"\w") )
    -2>> =suggVerb(@, ":3s")
    # Conjugaison erronée. Accord avec « \1 ». Le verbe devrait être à la 3ᵉ personne du singulier.
        -2>> =suggVerb(\2, ":3s")                                                                   # Conjugaison erronée. Accord avec \1. Le verbe devrait être à la 3ᵉ personne du singulier.

TEST: Marc {{arrives}} demain.
TEST: Paul ne {{viens}} pas demain.
TEST: Marc Aurèle {{étaient}} l’empereur des Romains. (Pas de trait d’union sur Marc Aurèle.)
TEST: Arthur D. parvient à…
TEST: Les fondateurs pionniers de l’Internet n’avaient pas prévu
TEST: les compteurs Geiger ne détectent pas le polonium
TEST: Des femmes de l’administration Obama y racontent qu’elles ont constaté qu’il leur arrivait régulièrement de ne pas être invitées
TEST: Macron président, c’est…


# 3pl
__[s]/conj(conj_nom_propre_et_nom_propre)__
    (?<!et |ou |[dD][eu] |ni )([A-ZÉÈ][\w-]+) et ([A-ZÉÈ][\w-]+) +({w_1})  @@0,w,$
    <<- morph(\1, ":M", False) and morph(\2, ":M", False)
__conj_nom_propre_et_nom_propre__
    ~^[A-ZÉÈ]  et  ~^[A-ZÉÈ]  @:[123][sp]¬:(?:G|3p|P|Q.*:[pi])
        <<- /conj/ morph(\1, ":M") and morph(\3, ":M") and not morph(<1, ":R|>(?:des?|du|et|ou|ni)/")
        and morphex(\3, ":[123][sp]", ":(?:G|3p|P|Q.*:[pi])") and not morph(word(-1), ":R", False, False)
    -3>> =suggVerb(@, ":3p")
    # Conjugaison erronée. Accord avec « \1 et \2 ». Le verbe devrait être à la 3ᵉ personne du pluriel.
        -4>> =suggVerb(\4, ":3p")                                                                   # Conjugaison erronée. Accord avec \1 et \2. Le verbe devrait être à la 3ᵉ personne du pluriel.

TEST: Samantha et Eva {{viennes}} demain.
TEST: Samantha et Eva leur {{décrive}} une leçon.


# on / ont
__conf_ont!6__
    ils  on
    [eux|ceux|elles|celles]  qui  on
        <<- /conf/ --1>> ont                                    # Confusion probable : “on” est un pronom personnel. Pour la conjugaison du verbe “avoir”, écrivez “on”.

    [elles|ceux-ci|ceux-là|celles-ci|celles-là]  on
        <<- not morph(<1, ":[RV]|>de/") -2>> ont                # Confusion probable : “on” est un pronom personnel. Pour la conjugaison du verbe “avoir”, écrivez “on”.

TEST: celles-là {{on}} {{vraiment}} un problème avec la religion.
TEST: j’ai, tu as, ils ont, elles {{on}}
TEST: ces gens-là ils {{on}} {{raison}} plus souvent que la plupart des gens.
TEST: Ils soutiennent ceux qui {{on}} {{tant}} de raison d’être en colère.
TEST: Or parmi celles-ci on trouve typiquement d’un côté les structures



!!
!!
!!!! Inversion verbe sujet                                                                        !!
!!
!!

__[i]/conj(conj_que_où_comment_verbe_sujet_sing)__
    (?:que?|où|comment|combien|dont|quand|pourquoi) +({w1}) (l(?:e(?:ur | )|a |)|[mts](?:on|a) |ce(?:t|tte|) |[nv]otre |du ) *(?!plupart|majorité)({w1})  @@w,w,$
    <<- morphex(\1, ":(?:[12]s|3p)", ":(?:3s|G|W|3p!)") and not after("^ +(?:et|ou) (?:l(?:es? |a |’|eurs? )|[mts](?:a|on|es) |ce(?:tte|ts|) |[nv]o(?:s|tre) |d(?:u|es) )")
    -1>> =suggVerb(@, ":3s")                                                        # Conjugaison erronée. Accord avec « \2 \3 ». Le verbe devrait être à la 3ᵉ personne du singulier.
__conj_que_où_comment_verbe_sujet_sing__
    [que|qu’|qu|où|comment|combien|dont|quand|pourquoi]  @:[123][sp]¬:(?:3s|G|W|3p!)  [le|la|l|un|une|ce|cet|cette|mon|ton|son|ma|ta|sa|notre|votre|leur]  *WORD
        <<- /conj/ not value(\4, "|plupart|majorité|groupe|") and not (value(>1, "|et|ou|") and morph(>2, ":D"))
        -2>> =suggVerb(\2, ":3s")                                                   # Conjugaison erronée. Accord avec “\3 \4. Le verbe devrait être à la 3ᵉ personne du singulier.

TEST: les possibilités qu’{{offrent}} le chien
TEST: les possibilités que {{donnent}} le chien.
TEST: Où {{vas}} l’homme ?
TEST: l’histoire dont {{bénéficient}} notre langue.
TEST: de la même façon que survivent le swing ou le latin.
TEST: en proportion des efforts que requièrent son entretien et son exploitation
TEST: une crainte aussi que renforcent son éloignement et le protocole compliqué
TEST: à l’époque de Mansur que grandissent la place et le rôle de…
TEST: où vivent la majorité des immigrés et des enfants d’immigrés


__[i]/conj(conj_lxquel_verbe_sujet_sing)__
    (?:l[ea]s?quel(?:le|)s?) +({w1}) (l(?:e(?:ur | )|a |’)|[mts](?:on|a) |ce(?:t|tte|) |[nv]otre |du ) *(?!plupart|majorité)({w1})  @@w,w,$
__conj_lxquel_verbe_sujet_sing__
    [lequel|laquelle|lesquels|lesquelles]  @:[123][sp]¬:(?:3s|G|W|3p!)  [le|la|l’|un|une|ce|cet|cette|mon|ton|son|ma|ta|sa|notre|votre|leur]  *WORD
        <<- /conj/ morph(<1, ":R") and not value(\4, "|plupart|majorité|groupe|") and not (value(>1, "|et|ou|") and morph(>2, ":D"))
    <<- morphex(\1, ":(?:[12]s|3p)", ":(?:3s|G|W|3p!)") and not after("^ +(?:et|ou) (?:l(?:es? |a |’|eurs? )|[mts](?:a|on|es) |ce(?:tte|ts|) |[nv]o(?:s|tre) |d(?:u|es) )")
        and morph(word(-1), ":R", False, False)
    -1>> =suggVerb(@, ":3s")                                                        # Conjugaison erronée. Accord avec « \2 \3 ». Le verbe devrait être à la 3ᵉ personne du singulier.
        -2>> =suggVerb(\2, ":3s")                                                   # Conjugaison erronée. Accord avec “\3 \4. Le verbe devrait être à la 3ᵉ personne du singulier.

TEST: une muraille contre laquelle {{venaient}} la masse armée et vociférante.


__[i]/conj(conj_que_où_comment_verbe_sujet_pluriel)__
    (?:que?|où|comment|combien|dont|quand|pourquoi) +({w_3}) ([ldcmts]es|quelques|certaine?s|plusieurs|[nv]os|leurs) ({w1})  @@w,w,$
    <<- morphex(\1, ":[123]s", ":(?:3p|G|W)") -1>> =suggVerb(@, ":3p")              # Conjugaison erronée. Accord avec « \2 \3 ». Le verbe devrait être à la 3ᵉ personne du pluriel.
__conj_que_où_comment_verbe_sujet_pluriel__
    [que|qu’|qu|où|comment|combien|dont|quand|pourquoi]  @:[123][sp]¬:(?:3p|G|W)  [les|des|ces|mes|tes|ses|nos|vos|leurs|quelques|certains|certaines|plusieurs|maints|maintes]  *WORD
        <<- /conj/ -2>> =suggVerb(\2, ":3p")                                        # Conjugaison erronée. Accord avec “\3 \4. Le verbe devrait être à la 3ᵉ personne du pluriel.

TEST: D’où {{vienne}} les hommes ?
TEST: Comment {{danse}} les femmes ?
TEST: les idioties qu’{{aime}} les hommes, j’en ai marre.
TEST: l’amour dont {{parle}} les femmes


__[i]/conj(conj_lxquel_verbe_sujet_pluriel)__
    (?:l[ea]s?quel(?:le|)s?) +({w_3}) ([ldcmts]es|quelques|certaine?s|plusieurs|[nv]os|leurs) ({w1})  @@w,w,$
__conj_lxquel_verbe_sujet_pluriel__
    [lequel|laquelle|lesquels|lesquelles]  @:[123][sp]¬:(?:3p|G|W)  [les|des|ces|mes|tes|ses|nos|vos|leurs|quelques|certains|certaines|plusieurs|maints|maintes]  *WORD
    <<- morphex(\1, ":[123]s", ":(?:3p|G|W)") and morph(word(-1), ":R", False, False)
    -1>> =suggVerb(@, ":3p")              # Conjugaison erronée. Accord avec « \2 \3 ». Le verbe devrait être à la 3ᵉ personne du pluriel.
        <<- /conj/ morph(<1, ":R") -2>> =suggVerb(\2, ":3p")                        # Conjugaison erronée. Accord avec “\3 \4. Le verbe devrait être à la 3ᵉ personne du pluriel.

TEST: les amusements pour lesquels {{vienne}} les invités.
TEST: financé par le Qatar, lequel dépense des millions de dollars pour soutenir le mouvement


__[i]/conj(conj_que_où_comment_verbe_sujet)__
    (?:que?|où|comment|combien|dont|quand|pourquoi|l[ea]s?quel(?:le|)s?) +({w_1}[es])(?! je| tu| vous) @@$
    <<- morphex(\1, ":[12][sp]", ":(?:G|W|3[sp]|Y|P|Q|N|A|M|VC)") -1>> =suggVerb(@, ":3s")     # Conjugaison erronée. Ce verbe devrait être à la 3ᵉ personne.
__conj_puisse__
    [<start>|,]  puisse  @:D.*:p
        <<- /conj/ -2>> puissent                                                    # Conjugaison erronée. Ce verbe devrait s’accorder au substantif qui le suit.

TEST: Qu’est-ce que tu crois que {{deviens}} réellement, immanquablement et subitement cet homme après une telle dérouillée ?
TEST: ces sciences, ces religions, ces philosophies ne sont que contes destinés à nous donner l’illusion de la connaissance.
TEST: Le ministre de l’Intérieur a estimé que Calais avait vécu “un degré de violence jamais connu”.
TEST: à des règles aussi absurdes que précises
TEST: {{puisse}} les hommes enfin comprendre leurs erreurs.                         ->> puissent
TEST: {{puisses}} notre ennemi trembler de peur devant notre courage.               ->> puisse



!!
!!
!!!! Verbes sans sujets                                                                           !!
!!
!!

#__[i]/conj(conj_que_où_verbe_sujet_3sg)__
#    (?:que?|où|comment|combien|dont|quand|pourquoi|l[ea]s?quel(?:le|)s?) +({w_1})(?! [jJ]e| [tT]u| [nNvV]ous| [eE]t )  @@$
#    <<- morphex(\1, ":[12][sp]", ":(?:G|W|N|3[sp])") -1>> =suggVerb(@, ":3s")         # Conjugaison erronée. Ce verbe devrait être à la 3ᵉ personne.
__conj_que_où_comment_verbe_sans_sujet!3__
    [que|qu’|qu|où|comment|combien|dont|quand|pourquoi|lequel|laquelle|lesquels|lesquelles]  @:[12][sp]¬:(?:G|W|3[sp]|Y|P|Q|N|A|M|VC)
        <<- /conj/ morph(\2, ":[12]s") and not value(>1, "|je|tu|") -2>> =suggVerb(\2, ":3s")                           # Conjugaison erronée. Ce verbe devrait être à la 3ᵉ personne.
        <<- /conj/ __else__ and morph(\2, ":[12]p") and not value(>1, "|nous|vous|") -2>> =suggVerb(\2, ":3p")          # Conjugaison erronée. Ce verbe devrait être à la 3ᵉ personne.

TEST: Qu’est-ce que tu crois que {{deviens}} réellement, immanquablement et subitement cet homme après une telle dérouillée ?
TEST: peu importe ce que tu crois du lieu où l’{{abandonnerais}} ce salopard…


TEST: ces sciences, ces religions, ces philosophies ne sont que contes destinés à nous donner l’illusion de la connaissance.
TEST: Le ministre de l’Intérieur a estimé que Calais avait vécu “un degré de violence jamais connu”.
__[i]/conj(conj_puisse)__
    (puisses?) ({w_2})  @@0,$
    <<- isStart() >>>
    <<- morph(\2, ":D.*:p", False) -1>> puissent                                    # Conjugaison erronée. Ce verbe devrait s’accorder au substantif qui le suit.
    <<- __else__ and \1.endswith("s") and \2 != "tu" and not before(r"(?i)\btu ")
    -1>> puisse                                                                     # Conjugaison erronée. Sujet “tu” introuvable.

TEST: à des règles aussi absurdes que précises
TEST: {{puisse}} les hommes enfin comprendre leurs erreurs.                         ->> puissent
TEST: {{puisses}} notre ennemi trembler de peur devant notre courage.               ->> puisse



@@@@
@@@@
@@@@
@@@@
@@@@GRAPH: last_graph                                                                              _
@@@@
@@@@
@@@@
@@@@


!!
!!
!!!! Verbe auxiliaire                                                                             !!
!!
!!

__conf_auxiliaire_avoir_être__
    [/-je|/-tu|/-il|/-on]  @:V.......e_.*:Q
        <<- /conf/ analyse(\1, ">avoir/", "", 0, -3) -1>> _                     # Incohérence. La forme verbale “\2” ne peut pas être utilisé avec l’auxiliaire “avoir”, seulement avec l’auxiliaire “être”.

    /-ils  @:V.......e_.*:Q
        <<- /conf/ analyse(\1, ">avoir/", "", 0, -4) -1>> _                     # Incohérence. La forme verbale “\2” ne peut pas être utilisé avec l’auxiliaire “avoir”, seulement avec l’auxiliaire “être”.