Grammalecte  Check-in [7e911db906]

Overview
Comment:[fr] utilisation des nouvelles commandes isStart(), isEnd(), etc.
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk | fr
Files: files | file ages | folders
SHA3-256: 7e911db906e631da4cd1afbfdfebd46e78bfb34c7dfcd216adbe14a79973d8aa
User & Date: olr on 2017-06-02 04:51:29
Other Links: manifest | tags
Context
2017-06-02
05:13
[fr] utilisation de isRealEnd check-in: 83235f841a user: olr tags: trunk, fr
04:51
[fr] utilisation des nouvelles commandes isStart(), isEnd(), etc. check-in: 7e911db906 user: olr tags: trunk, fr
04:30
[build] new commands: isStart, isEnd, isRealStart, isRealEnd... check-in: 5bbe6273f4 user: olr tags: trunk, build, new_feature
Changes

Modified gc_lang/fr/rules.grx from [f8227a5444] to [a000778ab7].

1262
1263
1264
1265
1266
1267
1268
1269

1270
1271
1272
1273
1274
1275
1276
1262
1263
1264
1265
1266
1267
1268

1269
1270
1271
1272
1273
1274
1275
1276







-
+







TEST: Nous préparons une {{contre–attaque}}.


### ce / cet / cette / ces + nom + là
__[i]/tu(tu_ce_cette_ces_nom_là1)__
    c(?:e[st]?|ette) (({w_2}) là)(?! où)  @@$,w <<- morph(\2, ":[NB]", False) -1>> \2-là            # Il manque probablement un trait d’union.
__[i]/tu(tu_ce_cette_ces_nom_là2)__
    c(?:e[st]?|ette) (({w_2}) la)  @@$,w <<- morph(\2, ":[NB]", False) and not word(1) -1>> \2-là   # Il manque probablement un trait d’union.
    c(?:e[st]?|ette) (({w_2}) la)  @@$,w <<- morph(\2, ":[NB]", False) and isEnd() -1>> \2-là       # Il manque probablement un trait d’union.

TEST: Ces {{trois là}} sont incollables.
TEST: Je connais bien cette {{sensation là}}.
TEST: Laisse ce chiot là où il est !


### Préfixes
1365
1366
1367
1368
1369
1370
1371
1372

1373
1374
1375
1376
1377
1378
1379
1365
1366
1367
1368
1369
1370
1371

1372
1373
1374
1375
1376
1377
1378
1379







-
+







__[i]/tu(tu_grand_chose)__              grand chose <<- ->> grand-chose                             # Il manque un trait d’union.
__[i]/tu(tu_grand_père_mère)__          grands? (?:père|mère)s? <<- ->> =\0.replace(" ", "-")       # Il manque un trait d’union.
__[i]/tu(tu_ici_bas)__                  ici bas <<- ->> ici-bas                                     # Il manque un trait d’union.
__[i]/tu(tu_jusque_là)__                jusque là <<- ->> jusque-là                                 # Il manque un trait d’union.
__[i]/tu(tu_là_adverbe)__       là (bas|haut|desso?us|dedans|devant|derrière) @@3 <<- ->> là-\1     # Il manque un trait d’union.
__[i]/tu(tu_n_est_ce_pas)__             n’est(?: ce[ -]pas|-ce-pas) <<- ->> n’est-ce pas            # Un trait d’union.
__[i]/tu(tu_nord_sud_ouest)__           (nord|sud) ouest @@0 <<- ->> \1-ouest                       # Il manque un trait d’union.
__[i]/tu(tu_nord_sud_est)__             (nord|sud) est @@0 <<- not word(1) ->> \1-est               # Il manque un trait d’union.
__[i]/tu(tu_nord_sud_est)__             (nord|sud) est @@0 <<- isEnd() ->> \1-est                   # Il manque un trait d’union.
__[i]/tu(tu_outre_mer)__                outre mer <<- ->> outre-mer                                 # Il manque un trait d’union.
__[i]/tu(tu_ouï_dire)__                 ou[iï] dire <<- morph(word(-1), ":G") ->> ouï-dire          # Il manque un trait d’union.
__[i]/tu(tu_par_préposition)__
    par (desso?us|devant|delà|derrière|dehors|dedans|devers)  @@$ 
    <<- ->> par-\1                                                                                  # Il manque un trait d’union.
__[i]/tu(tu_par_ci_par_là)__            par ci,? par là <<- ->> par-ci par-là|par-ci, par-là        # Trait(s) d’union manquant(s).
__[i]/tu(tu_prêt_à_porter)__
1590
1591
1592
1593
1594
1595
1596
1597

1598
1599
1600
1601
1602
1603
1604
1590
1591
1592
1593
1594
1595
1596

1597
1598
1599
1600
1601
1602
1603
1604







-
+







TEST: Elle y arriva {{lors qu}}’elle trouva l’astuce permettant l’ouverture de la porte.
TEST: Dès lors qu’on sait comment s’y prendre, aucune raison de faillir.


# Dialogues
__[u]/virg(virgule_dialogue_après_nom_propre)__
    ([A-ZÉÈ][\w-]+) (\w+-(?:moi|toi|l(?:ui|a|e(?:ur|s|))|nous|vous|je|tu|ils|elles))  @@0,$
    <<- morphex(\1, ":M", ":G") and not morph(\2, ":N", False) and not word(-1)
    <<- morphex(\1, ":M", ":G") and not morph(\2, ":N", False) and isStart()
    -1>> \1,                                                                        # Dialogue ? Ajoutez une virgule pour mettre en incise la personne à qui s’adresse la réplique.

TEST: {{Maria}} donnez-vous du temps ?
TEST: {{Marion}} passe-moi le sel.
TEST: {{Paul}} prends-lui la main.
TEST: Alexandre tient-il ses généraux ?
TEST: Alexandra vient-elle ?
1953
1954
1955
1956
1957
1958
1959
1960

1961
1962
1963
1964
1965
1966
1967
1953
1954
1955
1956
1957
1958
1959

1960
1961
1962
1963
1964
1965
1966
1967







-
+







__[i]/ocr(ocr_fut)__        rut <<- ->> fut                                                         # Erreur de numérisation ?

TEST: __ocr__ ce petit {{rut}} traité comme un chien

# il / n
__[s]/ocr(ocr_il)__
    (n )([bcdfghjklmnpqrstvwxz][\w-]+)  @@0,$
    <<- not word(-1) and morph(\2, ":(?:O[on]|3s)", False) -1>> "il "                               # Erreur de numérisation ?
    <<- isStart() and morph(\2, ":(?:O[on]|3s)", False) -1>> "il "                                  # Erreur de numérisation ?

TEST: __ocr__ {{n }}contient trop de soufre.


# il / ils / U / Us
__[s]/ocr(ocr_il_ils2)__
    Us?
2743
2744
2745
2746
2747
2748
2749
2750

2751
2752
2753
2754
2755
2756
2757
2743
2744
2745
2746
2747
2748
2749

2750
2751
2752
2753
2754
2755
2756
2757







-
+








TEST: mon {{rackette}} n’a pas porté les fruits espérés.
TEST: Belle qui tient mon vit captif entre tes doigts.


__[i]/conf(conf_ton_son_verbe)__
    [st]on ({w_2})  @@4
    <<- morph(\1, ":V.*:(?:Y|[123][sp])") and \1[0].islower() and not word(-1)
    <<- morph(\1, ":V.*:(?:Y|[123][sp])") and \1[0].islower() and isStart()
    -1>> =suggSimil(\1, ":[NA]:[me]:[si]")                                                          # Incohérence : « \1 » est un verbe.

TEST: ton {{recèle}} a été dévoilé


__[i]/conf(conf_det_plur_verbe)__
    ([dcmts]es|quelques|aux|[nv]os) +({w_2})  @@0,$
2944
2945
2946
2947
2948
2949
2950
2951

2952
2953
2954
2955
2956
2957
2958
2944
2945
2946
2947
2948
2949
2950

2951
2952
2953
2954
2955
2956
2957
2958







-
+







TEST: il faut de plus en plus aider ces gens.


# a / à
__[i]/conf(conf_a_à_tout_à_fait)__  tout (a) fait @@5                                               <<- -1>> à          # Confusion.
__[i]/conf(conf_a_à_jusqu_à)__      jusqu (a) @@6                                                   <<- -1>> à          # Confusion.
__[i]/conf(conf_a_à_grâce_à)__      grâce (a) @@6             <<- morph(word(-1), ":[VN]", False, True) -1>> à          # Confusion probable.
__[i]/conf(conf_a_à_moins_que)__    (a) moins que? @@0                                 <<- not word(-1) -1>> à          # Confusion probable : « à moins que » pour dire « sauf si ».
__[i]/conf(conf_a_à_moins_que)__    (a) moins que? @@0                                    <<- isStart() -1>> à          # Confusion probable : « à moins que » pour dire « sauf si ».
__[i]/conf(conf_a_à_tout_à_coup)__  tout h?ah? co[uû][pt]?                                          <<- ->> tout à coup # Confusion.
__[i]/conf(conf_a_à_coup_sûr)__     a coup s[uû]r                                                   <<- ->> à coup sûr  # Confusion.
__[i]/conf(conf_a_à_face_à)__       face (a) @@5    <<- not before(r"(?i)\b(?:[lmts]a|leur|une|en) +$") -1>> à          # Confusion.
__[i]/conf(conf_a_à_pas_à_pas)__    pas (a) pas @@4                                                 <<- -1>> à          # Confusion.
__[i]/conf(conf_a_à_par_rapport)__  par rapport (a) ({w_2}) @@12,$  <<- morph(\2, ":(?:D|Oo|M)", False) -1>> à          # Confusion.
__[i]/conf(conf_a_à_être_à)__
    ({etre}) (a)(?! priori| posteriori| fortiori)  @@0,$
3122
3123
3124
3125
3126
3127
3128
3129

3130
3131
3132
3133
3134
3135
3136
3122
3123
3124
3125
3126
3127
3128

3129
3130
3131
3132
3133
3134
3135
3136







-
+








TEST: Ce sont des clichés {{au}} {{dépend}} d’un grand chef. Tout ça pour faire du buzz et exister médiatiquement.


# au temps / autant
__[i]/conf(conf_au_temps_pour_moi)__
    (au ?tant?) pour moi @@0
    <<- not word(-1) -1>> au temps                                          # Pour reconnaître son erreur, « au temps pour moi » est l’expression recommandée par l’Académie française.
    <<- isStart() -1>> au temps                                             # Pour reconnaître son erreur, « au temps pour moi » est l’expression recommandée par l’Académie française.
__[i]/conf(conf_autant_que_faire_se_peut)__
    au t(?:emps|ant?) que f(?:aire|erre|ers?) [sc]e peu[xt]?
    <<- ->> autant que faire se peut                                        # Locution adverbiale : « autant que faire se peut ».|https://fr.wiktionary.org/wiki/autant_que_faire_se_peut

TEST: Je me suis trompé. {{Autant}} pour moi.
TEST: on va y arriver, {{au temps que faire se peut}}…

3261
3262
3263
3264
3265
3266
3267
3268

3269
3270
3271
3272
3273
3274
3275
3261
3262
3263
3264
3265
3266
3267

3268
3269
3270
3271
3272
3273
3274
3275







-
+







TEST: Elles étaient à cette date cultivées à l’air libre.
TEST: De fraîche date…


# d’en / dans
__[i]/conf(conf_dans1)__
    (d’en|dan) (?:l(?:es?|a)|une?|d(?:es?|u)|[mts](?:on|a|es)|[nv]o(?:tre|s)|ce(?:tte|t|s|))  @@0
    <<- \1.endswith("en") or before("^ *$") -1>> dans                               # Confusion. Utilisez “dans” pour dire “à l’intérieur de quelque chose”.
    <<- \1.endswith("en") or isRealStart() -1>> dans                                # Confusion. Utilisez “dans” pour dire “à l’intérieur de quelque chose”.
__[i]/conf(conf_dans2)__
    ^ *(dents?) (?:l(?:es?|a)|une?|[mts](?:on|a|es)|[nv]o(?:tre|s)|ce(?:tte|t|s|))  @@*
    <<- -1>> dans                                                                   # Confusion. Utilisez “dans” pour dire “à l’intérieur de quelque chose”.

TEST: {{dan}} la voiture
TEST: ils sont partis {{d’en}} une direction différente
TEST: {{dents}} les montagnes au loin.
3336
3337
3338
3339
3340
3341
3342
3343

3344
3345
3346
3347
3348
3349
3350
3336
3337
3338
3339
3340
3341
3342

3343
3344
3345
3346
3347
3348
3349
3350







-
+







TEST: dans ses différents ouvrages
TEST: dans ses différents postes gouvernementaux


# eh bien, hé bien / et bien
__[i]/conf(conf_eh_bien)__
    et bien(?! que?| sûr| d’autres| entendu| avant| souvent| longtemps| des| moins| plus| au-delà)
    <<- not word(-1) and not morph(word(1), ":[WAY]", False, False)
    <<- isStart() and not morph(word(1), ":[WAY]", False, False)
    ->> eh bien|hé bien                                     # Confusion probable.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?T1=h%C3%A9&T3.x=0&T3.y=0
__[i]/conf(conf_eh_ben)__
    et (ben)  @@3
    <<- not \1.startswith("B")
    ->> eh ben|hé ben                                       # Confusion probable.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?T1=h%C3%A9&T3.x=0&T3.y=0

TEST: {{et bien}} il y aura des pertes
3618
3619
3620
3621
3622
3623
3624
3625

3626
3627
3628

3629
3630
3631
3632
3633
3634
3635
3618
3619
3620
3621
3622
3623
3624

3625
3626
3627

3628
3629
3630
3631
3632
3633
3634
3635







-
+


-
+







    -2>> savoir     # Confusion : vous écrivez l’inverse de ce que vous voulez dire.|http://fr.wiktionary.org/wiki/vous_n%E2%80%99%C3%AAtes_pas_sans_savoir

TEST: Vous n’êtes pas sans {{ignorer}} que…


## s’en / sens / sans / cent / cens
__[i]/conf(conf_il_on_s_en)__  (?:ils?|on) (san[sg]|cen[st]|c’en) ({w_2})  @@w,$
    <<- not word(-1) and morph(\2, ":V", False)
    <<- isStart() and morph(\2, ":V", False)
    -1>> s’en                                                                                       # Confusion probable.
__[i]/conf(conf_elle_s_en)__  elles? (san[sg]|cen[st]|c’en) ({w_2})  @@w,$
    <<- not word(-1) and morph(\2, ":V", False) and not ( \1 == "sans" and morph(\2, ":[NY]", False) )
    <<- isStart() and morph(\2, ":V", False) and not ( \1 == "sans" and morph(\2, ":[NY]", False) )
    -1>> s’en                                                                                       # Confusion probable.

TEST: il {{c’en}} est vite lassé.
TEST: {{S’en}} était vraiment trop !
TEST: Car {{s’en}} était vraiment fini !
TEST: elle {{sang}} était voulu

3836
3837
3838
3839
3840
3841
3842
3843

3844
3845
3846
3847
3848
3849
3850
3836
3837
3838
3839
3840
3841
3842

3843
3844
3845
3846
3847
3848
3849
3850







-
+







__[i]/conj(conj_xxxai_sans_sujet)!3__
    \w*ai(?! je)
    <<- ( morph(\0, ":1s") or ( before("> +$") and morph(\0, ":1s", False) ) ) and not (\0[0:1].isupper() and before0(r"\w"))
    and not before(r"(?i)\b(?:j(?:e |[’'])|moi(?:,? qui| seul) )")
    ->> =suggVerb(@, ":3s")                                     # Incohérence. Ceci est un verbe à la 1ʳᵉ personne du singulier. Sujet (“je” ou “moi qui”) introuvable.
__[i]/conj(conj_xxxes_sans_sujet)!3__
    \w*es(?! tu)
    <<- morphex(\0, ":2s", ":(?:E|G|W|M|J|[13][sp]|2p)") and not \0[0:1].isupper() and not before("^ *$")
    <<- morphex(\0, ":2s", ":(?:E|G|W|M|J|[13][sp]|2p)") and not \0[0:1].isupper() and not isRealStart()
    and ( not morph(\0, ":[NAQ]", False) or before("> +$") )
    and not before(r"(?i)\bt(?:u |[’']|oi,? qui |oi seul )")
    ->> =suggVerb(@, ":3s")                                     # Incohérence. Ceci est un verbe à la 2ᵉ personne du singulier. Sujet (“tu” ou “toi qui”) introuvable.
__[i]/conj(conj_xxxas_sans_sujet)!3__
    \w+as(?! tu)
    <<- morphex(\0, ":2s", ":(?:G|W|M|J|[13][sp]|2p)") and not (\0[0:1].isupper() and before0(r"\w"))
    and ( not morph(\0, ":[NAQ]", False) or before("> +$") )
3929
3930
3931
3932
3933
3934
3935
3936

3937
3938
3939
3940
3941
3942
3943
3929
3930
3931
3932
3933
3934
3935

3936
3937
3938
3939
3940
3941
3942
3943







-
+







    (tout) (?:débuts|petits) @@0 <<- before(r"\b(aux|[ldmtsc]es|[nv]os|leurs) +$") ~1>> *
__[i](p_les_tout_xxx)__
    (?:[ldmtsc]es|[nv]os|leurs|aux) (tout) ({w_2})  @@w,$
    <<- morph(\2, ":[AQ].*:[pi]", False) ~1>> *


__[i]/gn(gn_tous_deux)__
    (tout) deux  @@0 <<- not word(-1) -1>> tous                                                     # Locution pronominale : « tous deux ».|https://fr.wiktionary.org/wiki/tous_deux
    (tout) deux  @@0 <<- isStart() -1>> tous                                                        # Locution pronominale : « tous deux ».|https://fr.wiktionary.org/wiki/tous_deux

TEST: {{Tout}} deux sont partis les premiers.


__[i]/gn(gn_tous_déterminant_pluriel)__
    tout(?= [cmts]es\b)
    <<- not before(r"(?i)\b(?:d[eu]|avant|après|sur|malgré) +$") ->> tous                           # Erreur d’accord probable.
4239
4240
4241
4242
4243
4244
4245
4246

4247
4248
4249
4250
4251
4252
4253
4239
4240
4241
4242
4243
4244
4245

4246
4247
4248
4249
4250
4251
4252
4253







-
+







__[i](p_épaule_contre_épaule)__ épaule contre épaule <<- ~>> *
__[i](p_été_comme_hiver)__      été comme hiver <<- ~>> *
__[i](p_oh_ah_euh_eh_bien)__    (?:oh|ah|euh|eh bien) <<- ~>> *
__[i](p_ex_loc_latine)__        ex (?:nihilo|cathedra|absurdo|abrupto) <<- ~>> *
__[i](p_face_à_face)__          face à face <<- ~>> *
__[i](p_nombre_fois_de_suite)__ (?:deux|trois|quatre|cinq|six|sept|huit|neuf|dix|onze|douze|treize|quatorze|quinze|seize|vingt|trente|quarante|cinquante|soixante|cent) fois de suite <<- ~>> *
__[i](p_grosso_modo)__          grosso modo <<- ~>> *
__[i](p_grand_bien_lui_fasse)__ grand bien lui fasse <<- not word(-1) ~>> *
__[i](p_grand_bien_lui_fasse)__ grand bien lui fasse <<- isStart() ~>> *
__[i](p_hier)__                 (?:avant-|)hier(?: matin| soir| après-midi|) <<- ~>> *
__[i](p_hors_de_qqch)__         hors (?:de (?:contrôle|portée)|d’(?:atteinte|état de nuire)|du commun) <<- ~>> *
__[i](p_ici_qqch)__             ici(?: comme ailleurs| ou ailleurs| et (?:là|maintenant)| même|-bas) <<- ~>> *
__[i](p_id_est)__               id est <<- ~>> *
__[i](p_il_y_a_qqch)__          il y a (?:longtemps|peu de temps|très (?:longtemps|peu de temps)|(?:quelques|moins de \d+|\d+) (?:secondes|minutes|heures|jours|semaines|mois|an(?:née|)s|siècles|millénaires)|quelque temps) <<- ~>> *
__[i](p_il_n_y_a_pas_qqch)__    il n’y a pas (?:si |)longtemps <<- ~>> *
__[i](p_illico_presto)__        illico presto <<- ~>> *
4751
4752
4753
4754
4755
4756
4757
4758

4759
4760
4761
4762
4763
4764
4765
4751
4752
4753
4754
4755
4756
4757

4758
4759
4760
4761
4762
4763
4764
4765







-
+









## Seconde passe (il faut réorganiser tout le cycle de simplification)

__[i](p_à_nos_yeux)__
    (à (?:[mts]es|[nv]os|leurs) yeux) +({w_1}) @@0,$ <<- not morph(\2, ":A.*:[me]:[pi]", False) ~1>> *
__[i](p_ben_voyons)__
    ben voyons <<- not word(-1) ~>> *
    ben voyons <<- isStart() ~>> *
__[i](p_chaque_année_semaine_journée_décennie)__
    (chaque (?:année|semaine|journée|décennie)) +({w_1}) @@0,$ <<- not morph(\2, ":(?:A.*:[fe]:[si]|Oo|[123][sp])", False) ~1>> *
__[i](p_chaque_an_jour_mois)__
    (chaque (?:an|jour|mois)) +({w_1}) @@0,$ <<- not morph(\2, ":(?:A.*:[me]:[si]|Oo|[123][sp])", False) ~1>> *
__[i](p_dans_l_ensemble)__
    (dans l’ensemble) +({w_1}) @@0,$ <<- not morph(\2, ":A.*:[me]:[si]", False) ~1>> *
__[i](p_de_ce_seul_fait)__
4867
4868
4869
4870
4871
4872
4873
4874

4875
4876
4877
4878
4879
4880
4881
4867
4868
4869
4870
4871
4872
4873

4874
4875
4876
4877
4878
4879
4880
4881







-
+







    ~2>> ~
__[i](p_astuce_désambiguïsation2)__
    (?:d(?:es? |’)|[mts](?:es|on|a) |ce(?:s|t(?:te|)|rtaine?s|) |[nv](?:otre|os) |leurs |quelques ) *({w_2})( ) *({w_2}) @@w,**,$
    <<- isAmbiguousNAV(\3) and morphex(\1, ":[NAQ]", ">telle ") and not re.search("^[dD](?:’une?|e l(?:a|eur)) ", \0)
    ~2>> ~
__[i](p_astuce_désambiguïsation3)__
    l(?:es? |a |’|eur ) *({w_2})( ) *({w_2})  @@w,**,$
    <<- isAmbiguousNAV(\3) and ( morphex(\1, ":[NAQ]", ":V0a") or (morphex(\1, ":[NAQ]", ":(?:3[sp]|V0a)") and not word(-1)) )
    <<- isAmbiguousNAV(\3) and ( morphex(\1, ":[NAQ]", ":V0a") or (morphex(\1, ":[NAQ]", ":(?:3[sp]|V0a)") and isStart()) )
    ~2>> ~

TEST: comme le signe évident d’une politique volontaire
TEST: c’était le signe évident d’une politique volontaire
TEST: ce que c’est : le signe évident d’une politique volontaire


5950
5951
5952
5953
5954
5955
5956
5957

5958
5959

5960
5961

5962
5963
5964
5965
5966
5967
5968
5950
5951
5952
5953
5954
5955
5956

5957
5958

5959
5960

5961
5962
5963
5964
5965
5966
5967
5968







-
+

-
+

-
+







__<i]/sgpl(sgpl_prep_compris_det)__
    ^ *((Compris|Non[- ]compris)es?) +(?:l(?:es?|a)|ce(?:te|t|s|)|leurs?|[mts](?:on|a|es)|[nv]os)  @@*,*
    <<- -1>> \2                                                                                     # Considéré comme préposition, invariable.
__<i]/sgpl(sgpl_prep_entendu_det)__
    ^ *((Entendu|Excepté|Ôté|Supposé|Passé)(?:es?|s)) +(?:l(?:es?|a)|ce(?:te|t|s|)|leurs?|[mts](?:on|a|es)|[nv]os)  @@*,*
    <<- -1>> \2                                                                                     # Considéré comme préposition, invariable.
__[i]/sgpl(sgpl_prep_attendu_que)__
    (attendu(?:es?|s)) que? @@0                         <<- not word(-1) -1>> attendu               # Considéré comme préposition, invariable.
    (attendu(?:es?|s)) que? @@0                         <<- isStart() -1>> attendu                  # Considéré comme préposition, invariable.
__[i]/sgpl(sgpl_prep_étant_donné)__
    étant donné(?:es?|s)                                <<- not word(-1) ->> étant donné            # Considéré comme préposition, invariable.
    étant donné(?:es?|s)                                <<- isStart() ->> étant donné               # Considéré comme préposition, invariable.
__[i]/sgpl(sgpl_prep_vu_det)__
    (vu(?:es?|s)) (?:[lc]es?|la|cette|leurs?|que?) @@0  <<- not word(-1) -1>> vu                    # Considéré comme préposition, invariable.
    (vu(?:es?|s)) (?:[lc]es?|la|cette|leurs?|que?) @@0  <<- isStart() -1>> vu                       # Considéré comme préposition, invariable.

TEST: {{comprises}} mes prestations sur place
TEST: {{Exceptés}} les petits, tous sont tombes malades.
TEST: {{Attendues}} qu’on n’en sait rien, impossible de tirer des conclusions définitives.
TEST: Il viendra, {{étant donnée}} son addiction…
TEST: {{Vues}} les idioties qu’on entend, normal qu’on perde la tête.
TEST: {{Passées}} les premières heures du jour…
6315
6316
6317
6318
6319
6320
6321
6322

6323
6324
6325
6326
6327
6328
6329
6315
6316
6317
6318
6319
6320
6321

6322
6323
6324
6325
6326
6327
6328
6329







-
+









############################## CONFUSIONS, HOMONYMES ET FAUX-AMIS ###############################

# abuser / abusé / abusif
__[i]/conf(conf_abusif)__
    c’est +(abus(?:é|er))  @@$
    <<- not word(1) -1>> abusif                                 # Confusion. Concernant les actes, on parle de pratiques abusives. On abuse des choses ou des personnes.
    <<- isEnd() -1>> abusif                                         # Confusion. Concernant les actes, on parle de pratiques abusives. On abuse des choses ou des personnes.

TEST: C’est {{abusé}} !


# acre / âcre
__[i]/conf(conf_acre)__
    \d+ (âcres?)  @@$
7069
7070
7071
7072
7073
7074
7075
7076

7077
7078
7079
7080
7081
7082
7083
7069
7070
7071
7072
7073
7074
7075

7076
7077
7078
7079
7080
7081
7082
7083







-
+







TEST: une économie {{digitale}} ou rien
TEST: Dans l’ère du {{digital}}, tout va plus vite.


## on / ont
__[i>/conf(conf_on1)__
    (ont) [nmts]’(?!(?:ils?|elles?))  @@0
    <<- not word(-1) -1>> on                                                                        # Confusion probable : “ont” est une conjugaison du verbe avoir.
    <<- isStart() -1>> on                                                                           # Confusion probable : “ont” est une conjugaison du verbe avoir.

TEST: {{ont}} m’assure qu’il n’y en a pas.
TEST: {{Ont}} n’arrive pas à s’en sortir.


__[i]/conf(conf_on2)__
    (?<![nmts]’)(ont) ({w_1})  @@0,$
7092
7093
7094
7095
7096
7097
7098
7099

7100
7101
7102
7103
7104
7105
7106
7092
7093
7094
7095
7096
7097
7098

7099
7100
7101
7102
7103
7104
7105
7106







-
+







TEST: {{Ont}} ne sait pas comment faire.
TEST: qui n’ont somme toute que le désir de vivre paisiblement


__[i]/conf(conf_on3)__
    (ont) (?:l(?:ui|eur)|[nv]ous) ({w_2})  @@0,$
    <<- morphex(\2, ":V.*:(?:[1-3][sp])", ":(?:G|1p)")
    and not ( \0.find(" leur ") and morph(\2, ":[NA].*:[si]", False) ) and not word(-1)
    and not ( \0.find(" leur ") and morph(\2, ":[NA].*:[si]", False) ) and isStart()
    -1>> on                                                                                         # Confusion probable : “ont” est une conjugaison du verbe avoir.

TEST: {{Ont}} lui avait donné du temps
TEST: {{Ont}} leur prendra tout
TEST: Qu’importe, {{ont}} leur prend tout


7328
7329
7330
7331
7332
7333
7334
7335

7336
7337
7338
7339
7340
7341
7342
7328
7329
7330
7331
7332
7333
7334

7335
7336
7337
7338
7339
7340
7341
7342







-
+







    de (quoique) @@3 <<- -1>> quoi que                                                    # Confusion.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=1571

TEST: de {{quoique}} ce soit, je ne veux pas en entendre parler.


# quoiqu’il en coûte
__[i]/conf(conf_quoi_qu_il_en_coûte)__
    (quoiqu il) en (?:co[uû]te) @@0 <<- not word(1) -1>> quoi qu’il                       # Confusion probable.
    (quoiqu il) en (?:co[uû]te) @@0 <<- isEnd() -1>> quoi qu’il                           # Confusion probable.

TEST: Elle y parviendra, {{quoiqu’il}} en coûte.


# raisonner / résonner
__[i]/conf(conf_raisonner)__
    (?:la|les?|[mts]e|[nv]ous) (résonn\w+)  @@$
7447
7448
7449
7450
7451
7452
7453
7454

7455
7456
7457

7458
7459
7460
7461
7462
7463
7464
7447
7448
7449
7450
7451
7452
7453

7454
7455
7456

7457
7458
7459
7460
7461
7462
7463
7464







-
+


-
+







TEST: S’aimer {{soit-même}}, c’est le début d’une grande histoire d’amour. (Oscar Wilde)
TEST: Je regrette que l’on en soit encore à des considérations que je croyais dépassées
TEST: Quoi qu’il en soit


__[i]/conf(conf_soit1)__
    (soie?s?) ({w_2})  @@0,$
    <<- not word(-1) and morphex(\2, ":[OC]", ":R") -1>> soit                                       # Confusion probable : pour évoquer une option, écrivez “soit”.|https://fr.wiktionary.org/wiki/soit#Conjonction
    <<- isStart() and morphex(\2, ":[OC]", ":R") -1>> soit                                          # Confusion probable : pour évoquer une option, écrivez “soit”.|https://fr.wiktionary.org/wiki/soit#Conjonction
__[i]/conf(conf_soit2)__
    (soie?s?) [jtcç]’ @@0
    <<- not word(-1) -1>> soit                                                                      # Confusion probable : pour évoquer une option, écrivez “soit”.|https://fr.wiktionary.org/wiki/soit#Conjonction
    <<- isStart() -1>> soit                                                                         # Confusion probable : pour évoquer une option, écrivez “soit”.|https://fr.wiktionary.org/wiki/soit#Conjonction

TEST: {{soi}} je vais au cinéma, {{soi}} je m’abstiens.
TEST: {{soie}} j’arrive avant tout le monde.


# sur / sûr
__[i]/conf(conf_sûr_que)__
8018
8019
8020
8021
8022
8023
8024
8025

8026
8027
8028
8029
8030
8031
8032
8018
8019
8020
8021
8022
8023
8024

8025
8026
8027
8028
8029
8030
8031
8032







-
+







__[i](p_lors_de_du_nom)__
    lors d(?:’|e(?:s| la|) |u ) *({w_2})  @@$
    <<- morph(\1, ":[NAQ]", False) and isEndOfNG()
    ~>> *

## doute que
__[i](p_nul_doute_que)__
    nul doute qu  <<- not word(-1) ~>> *
    nul doute qu  <<- isStart() ~>> *
__[i](p_douter_que)__
    (dout\w+)( ) *que?  @@0,*  <<- morph(\1, ">douter ", False) and before(r"(?i)\b(?:[mts]e|[nv]ous) +$") ~2>> ,

## de +
__[i](p_de_nom)__
    d(?:e +|’)(?!autres)({w_2}) @@$
    <<- morphex(\1, ":N", ":[GY]") and isEndOfNG() ~>> *
8128
8129
8130
8131
8132
8133
8134
8135

8136
8137
8138
8139
8140
8141
8142
8128
8129
8130
8131
8132
8133
8134

8135
8136
8137
8138
8139
8140
8141
8142







-
+








## s’en / c’en
__[i]/conf(conf_c_en_être)__
    (s’en) (?:n’|)(?:est|seras?|étai[ts]) +({w_2})  @@0,$
    <<- re.search("(?i)^(?:fini|terminé)s?", \2) and morph(word(-1), ":C", False, True)
    -1>> c’en
    # Confusion probable. « C’en est… » équivaut à « ça, c’est… ».|http://fr.wiktionary.org/wiki/c%E2%80%99en_est_fait_de
    <<- re.search("(?i)^(?:assez|trop)$", \2) and (after("^ +d(?:e |’)") or not word(1))
    <<- re.search("(?i)^(?:assez|trop)$", \2) and (after("^ +d(?:e |’)") or isEnd())
    -1>> c’en
    # Confusion probable. « C’en est… » équivaut à « ça, c’est… ».|http://fr.wiktionary.org/wiki/c%E2%80%99en_est_fait_de
    <<- morphex(\2, ":A", ":[GVW]") and morph(word(-1), ":C", False, True)
    -1>> c’en
    # Confusion probable : “\2” est un adjectif. « C’en est… » équivaut à « ça, c’est… ».3|http://fr.wiktionary.org/wiki/c%E2%80%99en_est_fait_de

TEST: c’en est fini d’eux, ils sont comme morts
9256
9257
9258
9259
9260
9261
9262
9263

9264
9265
9266
9267
9268
9269
9270
9256
9257
9258
9259
9260
9261
9262

9263
9264
9265
9266
9267
9268
9269
9270







-
+







    # Conjugaison erronée. Accord avec « vous ». Le verbe devrait être à la 2ᵉ personne du pluriel.

TEST: Vous {{arrivais}} trop tard.


__[i]/conj(conj_vous_verbe2)__
    vous [nm](?:e +(?:les? |l’|la |[nv]ous |)|’)({w_3})  @@$
    <<- morphex(\1, ":V", ":2p") and not word(-1) -1>> =suggVerb(@, ":2p")      # Conjugaison erronée. Accord avec « vous ». Le verbe devrait être à la 2ᵉ personne du pluriel.
    <<- morphex(\1, ":V", ":2p") and isStart() -1>> =suggVerb(@, ":2p")         # Conjugaison erronée. Accord avec « vous ». Le verbe devrait être à la 2ᵉ personne du pluriel.

TEST: vous ne l’{{avait}} pas vu.
TEST: je crois, vous m’{{avais}} trompé… 


## se + incohérence
__[i]/conj(conj_se_incohérence)__
9312
9313
9314
9315
9316
9317
9318
9319

9320
9321
9322
9323
9324
9325
9326
9312
9313
9314
9315
9316
9317
9318

9319
9320
9321
9322
9323
9324
9325
9326







-
+








#### IMPÉRATIF !

# Confusions

__[i]/imp(imp_confusion_2e_pers_pluriel)__
    ({w_2}(?:er|ai[st]|ée?s?)) moi  @@0
    <<- morph(\1, ":V", False) and not word(-1)
    <<- morph(\1, ":V", False) and isStart()
    ->> =suggVerbTense(\1, ":E", ":2p") + "-moi"                                    # Confusion probable. Pour l’impératif, écrivez :

TEST: {{Donner moi}} une chance
TEST: je vous en prie, {{prenais moi}} avec vous.
TEST: {{avançait moi}} de l’argent
TEST: {{filé moi}} du fric, bon sang !

9538
9539
9540
9541
9542
9543
9544
9545

9546
9547
9548
9549
9550
9551
9552
9538
9539
9540
9541
9542
9543
9544

9545
9546
9547
9548
9549
9550
9551
9552







-
+









__[i]/imp(imp_union_aller_y)!5__
    (?:v(?:iens|enez|enons)|all(?:ons|ez)) y
    <<- not morph(word(1), ":Y", False, False) ->> =\0.replace(" ", "-")                            # Il manque un trait d’union.
__[i]/imp(imp_union_vas_y)!5__
    vas? y
    <<- not word(-1) and not morph(word(1), ":Y", False, False) ->> vas-y                           # Il manque un trait d’union.
    <<- isStart() and not morph(word(1), ":Y", False, False) ->> vas-y                              # Il manque un trait d’union.
__[i]/imp(imp_union_convenir_en)__
    conv(?:iens|enez|enons) en(?! partie) <<- ->> =\0.replace(" ", "-")                             # Il manque un trait d’union.

TEST: {{allons y}}, ça pue.
TEST: {{vas y}}, ce n’est pas dangereux
TEST: {{convenez en}}, c’est une belle affaire malgré son prix élevé

9583
9584
9585
9586
9587
9588
9589
9590

9591
9592
9593
9594
9595
9596
9597
9583
9584
9585
9586
9587
9588
9589

9590
9591
9592
9593
9594
9595
9596
9597







-
+







__[i](p_pro_per_obj20)__    (l’)({w_2}) @@0,2 <<- morphex(\2, ":(?:[123][sp]|Y)", ":(?:[NAQ].*:[si]|G|M)") ~1>> >
__[i](p_pro_per_obj21)__    (leur) ({w_2}) @@0,5 <<- morphex(\2, ":(?:[123][sp]|Y)", ":(?:[NAQ].*:[si]|G|M)") ~1>> >
__[s](p_pro_per_obj22)__    [lL]’a <<- ~>> > a
__[i](p_pro_per_obj23)__    (nous) ({w_2}) @@0,5 <<- morphex(\2, ":(?:[123][sp]|Y)", ":(?:A|G|M|1p)") ~1>> >
__[i](p_pro_per_obj24)__    (vous) ({w_2}) @@0,5 <<- morphex(\2, ":(?:[123][sp]|Y)", ":(?:A|G|M|2p)") ~1>> >
__[i](p_pro_per_obj25)__    (?:à|de) ([nv]ous|lui|les?|en)(?! qui) @@$ <<- ~1>> >
__[i](p_pro_per_obj26)__    (s’)({w4}) @@0,2 <<- morph(\2, ":V", False) ~1>> >
__[i](p_pro_per_obj27)__    (?:je|tu|ils?|elles?|on) (l’|l(?:es?|a|ui|eur) +|[nv]ous +){w_2} @@* <<- not word(-1) ~1>> >
__[i](p_pro_per_obj27)__    (?:je|tu|ils?|elles?|on) (l’|l(?:es?|a|ui|eur) +|[nv]ous +){w_2} @@* <<- isStart() ~1>> >
__[i](p_pro_per_obj28)__    (?:je|tu|ils?|elles?|on|[nv]ous|ce(?:ux|elles?|lui|la|) qui) (l’)({w4}) @@*,$ <<- morph(\2, ":V", False) ~1>> >
__[i](p_pro_per_obj29)__    (t’(?:en|y)) ({w_2}) @@0,$ <<- not morph(\2, ":2s", False) or before(r"(?i)\b(?:je|tu|on|ils?|elles?|nous) +$") ~1>> >
__[i](p_pro_per_obj30)__    (t’)({w_2}) @@0,$ <<- not morph(\2, ":2s|>(ils?|elles?|on) ", False) or before(r"(?i)\b(?:je|tu|on|ils?|elles?|nous) +$") ~1>> >
__[i>(p_pro_per_obj31)__    ne [mtsl]’ <<- ~>> >
__[i>(p_pro_per_obj32)__    [mts]e +l’ <<- ~>> >
__[i>(p_pro_per_obj33)__    [nm]’ <<- ~>> >
__[i](p_pro_per_obj34)__    [nmts]e <<- ~>> >
10058
10059
10060
10061
10062
10063
10064
10065

10066
10067
10068
10069
10070
10071
10072
10058
10059
10060
10061
10062
10063
10064

10065
10066
10067
10068
10069
10070
10071
10072







-
+







    (?<![dD]’)(une?|[mts](?:on|a)|ce(?:tte|t|)) +({w_2})~ *({w_2})  @@0,w,$
    <<- morphex(word(-1), ":C", ":(?:Y|P)", True) and isAmbiguousAndWrong(\2, \3, ":s", ":3s")
    and not (before(r"(?i)\b(?:et|ou) +$") and morph(\3, ":(?:[123]p|p)", False)) and not before(r"(?i)\bni .* ni\b")
    -3>> =suggVerb(@, ":3s", suggSing)                          # Accord avec « \1 \2… » incorrect. Conjugaison erronée ou accord nom/adjectif incorrect.

__[i]/conj(conj_det_nom_ambiguïté2)__
    (l(?:e(?:ur|) |a |’)) *({w_2})~ *({w_2})  @@0,w,$
    <<- morphex(word(-1), ":C", ":(?:Y|P)", True) and isVeryAmbiguousAndWrong(\2, \3, ":s", ":3s", not word(-1))
    <<- morphex(word(-1), ":C", ":(?:Y|P)", True) and isVeryAmbiguousAndWrong(\2, \3, ":s", ":3s", isStart())
    and not (before(r"(?i)\b(?:et|ou) +$") and morph(\3, ":(?:[123]p|p)", False)) and not before(r"(?i)\bni .* ni\b")
    -3>> =suggVerb(@, ":3s", suggSing)                          # Accord avec « \1 \2… » incorrect. Conjugaison erronée ou accord nom/adjectif incorrect.

TEST: mon chat {{sautes}}
TEST: cette fille {{bouffes}} comme mille
TEST: cette marchande {{marchandes}}
TEST: la marchande {{marchandes}}
10262
10263
10264
10265
10266
10267
10268
10269

10270
10271
10272
10273
10274
10275
10276
10277
10278
10279
10280
10281
10282
10283
10284
10285
10286
10287

10288
10289
10290
10291
10292
10293
10294
10295

10296
10297
10298
10299
10300
10301
10302
10262
10263
10264
10265
10266
10267
10268

10269
10270
10271
10272
10273
10274
10275
10276
10277
10278
10279
10280
10281
10282
10283
10284
10285
10286

10287
10288
10289
10290
10291
10292
10293
10294

10295
10296
10297
10298
10299
10300
10301
10302







-
+

















-
+







-
+








TEST: mes filles {{passe}} ce matin
TEST: vos filles {{passes}} ce matin


__[i]/conj(conj_les_nom_ambiguïté)__
    les +({w_2})~ *({w_2})  @@w,$
    <<- morphex(word(-1), ":C", ":[YP]", True) and isVeryAmbiguousAndWrong(\1, \2, ":p", ":3p", not word(-1))
    <<- morphex(word(-1), ":C", ":[YP]", True) and isVeryAmbiguousAndWrong(\1, \2, ":p", ":3p", isStart())
    -2>> =suggVerb(@, ":3p", suggPlur)                      # Accord avec « les \1… » incorrect. Conjugaison erronée ou accord nom/adjectif incorrect.

TEST: les grands {{danse}}
TEST: les filles {{passes}} ce matin
TEST: les marchands {{marche}}
TEST: les marchands {{plie}}
TEST: les marchands {{paye}}
TEST: les marchands {{marchande}}
TEST: les marchandes {{paie}}
TEST: les marchandes {{marchande}}
TEST: les chattes {{finis}}
TEST: les chattes {{manges}}
TEST: les chattes {{danse}}


__[i]/conj(conj_certains_nom_ambiguïté)__
    certains +({w_2})~ *({w_2})  @@w,$
    <<- morphex(word(-1), ":C", ":[YP]", True) and isVeryAmbiguousAndWrong(\1, \2, ":m:p", ":3p", not word(-1))
    <<- morphex(word(-1), ":C", ":[YP]", True) and isVeryAmbiguousAndWrong(\1, \2, ":m:p", ":3p", isStart())
    -2>> =suggVerb(@, ":3p", suggMasPlur)                   # Accord avec « certains \1… » incorrect. Conjugaison erronée ou accord nom/adjectif incorrect.

TEST: certains hommes {{marchandes}} sans cesse


__[i]/conj(conj_certaines_nom_ambiguïté)__
    certaines +({w_2})~ *({w_2})  @@w,$
    <<- morphex(word(-1), ":C", ":[YP]", True) and isVeryAmbiguousAndWrong(\1, \2, ":f:p", ":3p", not word(-1))
    <<- morphex(word(-1), ":C", ":[YP]", True) and isVeryAmbiguousAndWrong(\1, \2, ":f:p", ":3p", isStart())
    -2>> =suggVerb(@, ":3p", suggFemPlur)                   # Accord avec « certaines \1… » incorrect. Conjugaison erronée ou accord nom/adjectif incorrect.

TEST: certaines femmes {{danse}} beaucoup



## Quel(le) que soit / quel(le)s que soient
10412
10413
10414
10415
10416
10417
10418
10419

10420
10421
10422
10423
10424
10425
10426
10412
10413
10414
10415
10416
10417
10418

10419
10420
10421
10422
10423
10424
10425
10426







-
+







    <<- morphex(\1, ":[12][sp]", ":(?:G|W|3[sp])") -1>> =suggVerb(@, ":3s")         # Conjugaison erronée. Ce verbe devrait être à la 3ᵉ personne.

TEST: peu importe ce que tu crois du lieu où l’{{abandonnerais}} ce salopard…


__[i]/conj(conj_puisse)__
    (puisses?) ({w_2})  @@0,$
    <<- not word(-1) >>>
    <<- 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: {{puisse}} les hommes enfin comprendre leurs erreurs.                         ->> puissent
TEST: {{puisses}} notre ennemi trembler de peur devant notre courage.               ->> puisse

10587
10588
10589
10590
10591
10592
10593
10594

10595
10596
10597
10598

10599
10600
10601
10602
10603
10604
10605
10587
10588
10589
10590
10591
10592
10593

10594
10595
10596
10597

10598
10599
10600
10601
10602
10603
10604
10605







-
+



-
+







TEST: Quand j’aurai fini ce boulot, je ne sais pas ce que je ferai.
TEST: Quand j’aurai soif et faim, je m’arrêterai.


# Si suivi du conditionnel ou du subjonctif
__[i]/vmode(vmode_si_sujet1)__
    si +({w1}) +>? *({w_2})  @@w,$
    <<- morph(\1, ":(?:Os|M)", False) and morphex(\2, ":[SK]", ":(?:G|V0|I)") and not word(-1)
    <<- morph(\1, ":(?:Os|M)", False) and morphex(\2, ":[SK]", ":(?:G|V0|I)") and isStart()
    -2>> _                                                                          # Ce verbe ne devrait être ni au conditionnel, ni au subjonctif.
__[i]/vmode(vmode_si_sujet2)__
    (?:si [jt]’|s’ils? )>? *({w_2})  @@$
    <<- morphex(\1, ":[SK]", ":(?:G|V0|I)") and not word(-1)
    <<- morphex(\1, ":[SK]", ":(?:G|V0|I)") and isStart()
    -1>> _                                                                          # Ce verbe ne devrait être ni au conditionnel, ni au subjonctif.

TEST: Si Pierre {{avancerait}} sa voiture de quelques mètres, ça nous permettrait de passer.
TEST: s’ils ne {{mangeraient}} pas tous les jours, ils seraient moins gros.


# Dès que + indicatif