Grammalecte  Check-in [72537ca8e8]

Overview
Comment:[core][fr] merge bookmark feature
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk | fr | core | new_feature
Files: files | file ages | folders
SHA3-256: 72537ca8e8c111a19f05e5602905d34b92af2f5d1c2f90db24024d009b748f97
User & Date: olr on 2017-06-07 07:37:40
Other Links: manifest | tags
Context
2017-06-07
07:42
[misc] SublimeText theme update check-in: f3f19b9fb0 user: olr tags: trunk, misc
07:37
[core][fr] merge bookmark feature check-in: 72537ca8e8 user: olr tags: trunk, fr, core, new_feature
07:31
[doc] update on syntax check-in: 7b42dadf18 user: olr tags: trunk, doc
07:12
[fr] mise en place des marque-pages Closed-Leaf check-in: 2f22dbe34c user: olr tags: fr, bookmark
Changes

Modified compile_rules.py from [c24bea3108] to [20229cb495].

547
548
549
550
551
552
553




554
555
556
557
558
559
560
561
562
563
564
565


566
567

568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585





586
587
588
589
590
591
592
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604







+
+
+
+












+
+


+


















+
+
+
+
+







            print("# Error. Wrong option line in:\n  ")
            print(sLine)
    print("  options defined for: " + ", ".join([ t[0] for t in lOpt ]))
    dOptions = { "lStructOpt": lStructOpt, "dOptLabel": dOptLabel }
    dOptions.update({ "dOpt"+k: v  for k, v in lOpt })
    return dOptions, dOptPriority


def printBookmark (nLevel, sComment, nLine):
    print("  {:>6}:  {}".format(nLine, "  " * nLevel + sComment))


def make (lRules, sLang, bJavaScript):
    "compile rules, returns a dictionary of values"
    # for clarity purpose, don’t create any file here

    # removing comments, zeroing empty lines, creating definitions, storing tests, merging rule lines
    print("  parsing rules...")
    global dDEF
    lLine = []
    lRuleLine = []
    lTest = []
    lOpt = []
    zBookmark = re.compile("^!!+")

    for i, sLine in enumerate(lRules, 1):
        if sLine.startswith('#END'):
            printBookmark(0, "BREAK BY #END", i)
            break
        elif sLine.startswith("#"):
            pass
        elif sLine.startswith("DEF:"):
            m = re.match("DEF: +([a-zA-Z_][a-zA-Z_0-9]*) +(.+)$", sLine.strip())
            if m:
                dDEF["{"+m.group(1)+"}"] = m.group(2)
            else:
                print("Error in definition: ", end="")
                print(sLine.strip())
        elif sLine.startswith("TEST:"):
            lTest.append("{:<8}".format(i) + "  " + sLine[5:].strip())
        elif sLine.startswith("TODO:"):
            pass
        elif sLine.startswith(("OPTGROUP/", "OPTSOFTWARE:", "OPT/", "OPTLANG/", "OPTLABEL/", "OPTPRIORITY/")):
            lOpt.append(sLine)
        elif re.match("[  \t]*$", sLine):
            pass
        elif sLine.startswith("!!"):
            m = zBookmark.search(sLine)
            nExMk = len(m.group(0))
            if sLine[nExMk:].strip():
                printBookmark(nExMk-2, sLine[nExMk:].strip(), i)
        elif sLine.startswith(("    ", "\t")):
            lRuleLine[len(lRuleLine)-1][1] += " " + sLine.strip()
        else:
            lRuleLine.append([i, sLine.strip()])

    # generating options files
    print("  parsing options...")

Modified gc_lang/fr/rules.grx from [272a308fd7] to [9b19b895ab].

41
42
43
44
45
46
47





48

49
50
51
52
53
54
55
56
57
41
42
43
44
45
46
47
48
49
50
51
52

53


54
55
56
57
58
59
60







+
+
+
+
+
-
+
-
-








# Fin d’interprétation du fichier avec une ligne commençant par #END

# ERREURS COURANTES
# http://fr.wikipedia.org/wiki/Wikip%C3%A9dia:Fautes_d%27orthographe/Courantes


!!
!!
!! Options                                                                                          
!!
!!
#

# OPTIONS ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#
OPTGROUP/basic: typo apos, esp tab, nbsp unit, tu maj, num virg, nf chim, ocr mapos, liga
OPTGROUP/gramm: conf sgpl gn
OPTGROUP/verbs: infi conj ppas, imp inte vmode
OPTGROUP/style: bs pleo, redon1 redon2, neg
OPTGROUP/misc: date mc
OPTGROUP/debug: idrule

189
190
191
192
193
194
195





196

197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237





















238
239
240
241
242
243























244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261



262
263
264
265


266
267
268
269
270
271
272
192
193
194
195
196
197
198
199
200
201
202
203

204


205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222





















223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243






244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266


















267
268
269




270
271
272
273
274
275
276
277
278







+
+
+
+
+
-
+
-
-


















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







OPTLABEL/date:      Date validity.

OPTLABEL/debug:     Debug
OPTLABEL/idrule:    Display control rule identifier [!]|Display control rule identifier in the context menu message.



!!
!!
!! Définitions pour les regex                                                                       
!!
!!
#

# DÉFINITIONS ************************************************************************************
#
DEF: avoir          [aeo]\w*
DEF: etre           [êeésf]\w+
DEF: avoir_etre     [aeêésfo]\w*
DEF: aller          (?:all|v|ir)\w+
DEF: ppas           \w[\w-]+[éiust]e?s?
DEF: infi           \w[\w-]+(?:er|ir|re)
DEF: w_1            \w[\w-]*
DEF: w_2            \w[\w-]+
DEF: w_3            \w[\w-]+\w
DEF: w_4            \w[\w-][\w-]+\w
DEF: w1             \w+
DEF: w2             \w\w+
DEF: w3             \w\w\w+
DEF: w4             \w\w\w\w+




#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
# //////////////////////////////////////// PASSE 0 ////////////////////////////////////////
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!! PASSE 0: PARAGRAPHE PAR PARAGRAPHE                                                               
# paragraphe par paragraphe
#
#
#
#
#
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!



#
#
#
#
#
#
#
#
#
#
#
#
#
#
#



!!
!!
!!! Espaces & tabulations                                                                           
#
# //////////////////////////////////////// CONTRÔLE DES ESPACES ////////////////////////////////////////
#

!!
!!

# Espaces surnuméraires
# Note : les tabulations ne sont pas soulignées dans LibreOffice. Mais l’erreur est bien présente.
__<s>/tab(tab_début_ligne)__           ^[      ]+ <<- ->> ""                   # Espace(s) en début de ligne à supprimer : utilisez les retraits de paragraphe.
__<s>/tab(tab_fin_ligne)__             [       ]+$ <<- ->> ""                  # Espace(s) en fin de ligne à supprimer.

TEST: __tab__ {{    }}Espaces surnuméraires.                                    ->> ""
373
374
375
376
377
378
379
380
381
382
383





384
385
386
387
388
389
390
379
380
381
382
383
384
385




386
387
388
389
390
391
392
393
394
395
396
397







-
-
-
-
+
+
+
+
+









# Tout contrôle des espaces doit se faire avant ce point.
# À partir d’ici, toute règle est susceptible de supprimer des caractères et les remplacer par des espaces ou des chaînes de longueur égale.



#
# //////////////////////////////////////// PRÉPROCESSEUR ////////////////////////////////////////
#

!!!
!!!
!!! Processeur: efface les ponctuations gênantes (URL, sigles, abréviations, IP, heures, etc.)      
!!!
!!!

# e-mail
__<i>(p_email)__
    \w[\w.-]*@\w[\w.-]*\w[.]\w+ <<- ~>> *

# URL
__<i>(p_URL)__
500
501
502
503
504
505
506






507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525

526
527
528
529
530


531
532


533
534
535
536
537
538
539
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537

538





539
540


541
542
543
544
545
546
547
548
549







+
+
+
+
+
+


















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







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: des <b>{{homme}}</b>
#TEST: des [b]{{femme}}[/b]


!!!
!!!
!!! Processeur: balises HTML et LaTeX                                                               
!!!
!!!

# HTML
__<i>/html(p_html_amp_xxx)__            &amp;[a-zA-Z]+; <<- ~>> _
__<i>/html(p_html_lt)__                 &lt; <<- ~>> "   <"
__<i>/html(p_html_gt)__                 &gt; <<- ~>> >
__<i>/html(p_html_amp)__                &amp; <<- ~>> &
__<i>/html(p_html_nbsp)__               &nbsp; <<- ~>> *
__<i>/html(p_html_balise_ouvrante)__    <\w+.*?> <<- ~>> *
__<i>/html(p_html_balise_fermante)__    </\w+ *> <<- ~>> *
__<i>/html(p_html_pseudo_balise)__      \[/?\w+\] <<- ~>> *


# LATEX
__<i]/latex(p_latex1)__     \\[a-z]+ <<- ~>> *
__<i>/latex(p_latex2)__     \\[,;/\\] <<- ~>> *
__<s>/latex(p_latex3)__     \{(?:abstract|align|cases|center|description|enumerate|equation|figure|flush(?:left|right)|gather|minipage|multline|quot(?:ation|e)|SaveVerbatim|table|tabular|thebibliography|[vV]erbatim|verse|wrapfigure)\} <<- ~>> *



!!
#
# //////////////////////////////////////// RÈGLES DE CONTRÔLE ////////////////////////////////////////
#


!!
!!!! Typographie, virgules, espaces insécables, unités de mesure…                                   
############################## TYPOGRAPHIE ##############################

!!
!!

### Écritures épicènes invariables
# Attention, lors de la deuxième passe, on se sert du désambiguïsateur

__[u](typo_écriture_épicène_pluriel)__
    ({w_1}[éuitsrn])[-·–—.(/]([nt]|)e[-·–—.)/]s  @@0,**
    <<- option("typo") and not \0.endswith("·e·s") ->> \1s et \1\2es|\1\2es et \1s|\1·\2e·s         # Écriture épicène brouillon. Préférez écrire lisiblement. Sinon, utilisez les points médians.
903
904
905
906
907
908
909
910
911
912

913
914
915
916
917
918
919
913
914
915
916
917
918
919



920
921
922
923
924
925
926
927







-
-
-
+







__[s]/chim(chim_molécules)__
    (?:Ca(?:CO3|SO4)|CO2|(?:H2|Na2)(?:CO3|O|SO4)|[HNO]2|HNO3|Fe2O3|KMnO4|NO2|SiO2|SO[23])
    <<- ->> =\0.replace("2", "₂").replace("3", "₃").replace("4", "₄")                               # Typographie des composés chimiques. [!]

TEST: __chim__ les molécules {{CaCO3}} et {{H2O}}…


#
# GRANDS NOMBRES ---------------------------------------------------------------------------------
#
!!!! Grands nombres                                                                                 

__[s]/num(num_grand_nombre_soudé)__
    \d\d\d\d\d+
    <<- not before("NF[  -]?(C|E|P|Q|X|Z|EN(?:[  -]ISO|)) *") ->> =formatNumber(\0)                 # Formatage des grands nombres.

TEST: {{12345}}                               ->> 12 345
TEST: {{123456}}                              ->> 123 456
939
940
941
942
943
944
945

946

947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963

964
965
966
967
968
969
970
971
972
973
974
975
976


977
978
979

980


981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996

997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017




















1018
1019





















1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045


1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058

1059
1060
1061
1062
1063
1064
1065
947
948
949
950
951
952
953
954

955


956
957
958
959
960
961
962
963
964
965
966
967



968
969
970
971
972
973
974
975
976
977
978
979


980
981



982

983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999

1000





















1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020


1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041



















1042
1043
1044
1045



1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057



1058
1059
1060
1061
1062
1063
1064
1065







+
-
+
-
-












-
-
-
+











-
-
+
+
-
-
-
+
-
+
+















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




-
-
-
+
+










-
-
-
+







    <<- option("num") ->> =\0.replace(" ", " ")                                                     # Grands nombres : utilisez des espaces insécables.
    <<- ~>> =\0.replace(" ", "")

TEST: Il a perdu {{20 000}} euros à la Bourse en un seul mois.



!!!! Dates                                                                                          
#

# DATES ------------------------------------------------------------------------------------------
#
__[i]/date(date_nombres)__
    (?<!\d[ /.-])(\d\d?)[ /.-](\d\d?)[ /.-](\d\d\d+)(?![ /.-]\d)  @@0,w,$
    <<- not checkDate(\1, \2, \3) and not before(r"(?i)\bversions? +$") ->> _                       # Cette date est invalide.
    <<- ~>> =\0.replace(".", "-").replace(" ", "-").replace("\/", "-")

TEST: le {{29 02 2011}}
TEST: le {{40-02-2011}}
TEST: le {{32.03.2018}}
TEST: le {{81/01/2012}}
TEST: 12-12-2012


#
# REDONDANCES (dans le paragraphe) ---------------------------------------------------------------
#
!!!! Redondances                                                                                    

__[i]/redon1(redondances_paragraphe)__
    ({w_4})[  ,.;!?:].*[  ](\1)  @@0,$
    <<- not morph(\1, ":(?:G|V0)|>(?:t(?:antôt|emps|rès)|loin|souvent|parfois|quelquefois|côte|petit|même) ", False) and not \1[0].isupper()
    -2>> _                                                      # Dans ce paragraphe, répétition de « \1 » (à gauche).
    <<- __also__ -1>> _                                         # Dans ce paragraphe, répétition de « \1 » (à droite).

TEST: __redon1__ Tu es son {{avenir}}. Et lui aussi est ton {{avenir}}.
TEST: __redon1__ Car parfois il y en a. Mais parfois il n’y en a pas.




!!!
!!!
#
# //////////////////////////////////////// PRÉPROCESSEUR ////////////////////////////////////////
# Dernier nettoyage avant coupure du paragraphe en phrases
!!! Processeur: Dernier nettoyage avant coupure du paragraphe en phrases                            
#
!!!
!!!

# Trait d’union conditionnel (u00AD)
__<i>(p_trait_union_conditionnel1)__    \w+‑\w+‑\w+ <<- ~>> =\0.replace("‑", "")
__<i>(p_trait_union_conditionnel2)__    \w+‑\w+ <<- ~>> =\0.replace("‑", "")

# empêcher la scission en fin de dialogue
__<s>(p_fin_dialogue1)__    ([?!…][?!…  ]*)[ "'”» ]*,  @@0 <<- ~1>> *
__<s>(p_fin_dialogue2)__    ([?!…][?!…  ]*)[ "'”» ]*[a-zéèêîô]  @@0 <<- ~1>> ,

TEST: « Je suis donc perdu ? », dit Paul.
TEST: “C’est bon !”, croit savoir Marie.
TEST: “Parce que… ?” finit par demander Paul.
TEST: « Dans quel pays sommes-nous ? » demanda un manifestant. 



!!
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
# //////////////////////////////////////// PASSE 1 ////////////////////////////////////////
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!! PASSE 1: PHRASE PAR PHRASE                                                                       
# phrase par phrase
#
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!

#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
[++]



#
# DOUBLONS (casse identique) ---------------------------------------------------------------------
#
!!!! Doublons (casse identique)                                                                     

__[s](doublon)__
    ({w1}) {1,3}\1  @@0
    <<- not re.search("(?i)^([nv]ous|faire|en|la|lui|donnant|œuvre|h[éoa]|hou|olé|joli|Bora|couvent|dément|sapiens|très|vroum|[0-9]+)$", \1)
    and not (re.search("^(?:est|une?)$", \1) and before("[’']$"))
    and not (\1 == "mieux" and before("(?i)qui +$"))
    ->> \1   # Doublon.

TEST: Il y a un {{doublon doublon}}.


#
# NOMBRES : TYPOGRAPHIE --------------------------------------------------------------------------
#
!!!! Nombres: typographie                                                                           

#(\d\d\d\d)-(\d\d\d\d)   <<- ->> \1–\2                              # Ne pas séparer deux dates par un trait d’union, mais par un tiret demi-cadratin.

__[s]/num(num_lettre_O_zéro1)__  [\dO]+[O][\dO]+ <<- not option("ocr") ->> =\0.replace("O", "0")    # S’il s’agit d’un nombre, utilisez le chiffre « 0 » plutôt que la lettre « O ».
__[s]/num(num_lettre_O_zéro2)__  [1-9]O <<- not option("ocr") ->> =\0.replace("O", "0")             # S’il s’agit d’un nombre, utilisez le chiffre « 0 » plutôt que la lettre « O ».

TEST: année {{2O11}}                                                      ->> 2011
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082



1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094

1095
1096
1097
1098
1099
1100
1101
1073
1074
1075
1076
1077
1078
1079



1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091



1092
1093
1094
1095
1096
1097
1098
1099







-
-
-
+
+
+









-
-
-
+







TEST: le {{VIième}} siècle                      ->> VIᵉ|VIe
TEST: C’est la {{3ème}} fois…                   ->> 3ᵉ|3e
TEST: Non, la {{2è}} fois.                      ->> 2ᵉ|2e
TEST: Le {{XXIème}} siècle.                     ->> XXIᵉ|XXIe
TEST: le {{XXè}} siècle.                        ->> XXᵉ|XXe


#
# Écritures épicènes invariables
#

!!!! Écritures épicènes invariables                                                                 

__[i](d_typo_écriture_épicène_pluriel)__
    ({w_1}[éuitsrn])-(?:[nt]|)e-s  @@0
    <<- morphex(\1, ":[NAQ]", ":G") =>> define(\1, [":N:A:Q:e:p"])

__[i](d_typo_écriture_épicène_singulier)__
    ({w_2}[éuitsrn])-e  @@0
    <<- morph(\1, ":[NAQ]", False) =>> define(\1, [":N:A:Q:e:s"])


#
# DATES ------------------------------------------------------------------------------------------
#
!!!! Dates                                                                                          

__[i]/date(date_jour_mois_année)__
    (\d\d?) (janvier|février|ma(?:rs|i)|a(?:vril|o[ûu]t)|jui(?:n|llet)|septembre|octobre|novembre|décembre) (\d\d\d+)  @@0,w,$ 
    <<- not checkDateWithString(\1, \2, \3) ->> _                                                   # Cette date est invalide.

TEST: {{29 février 2011}}

1127
1128
1129
1130
1131
1132
1133
1134
1135
1136



1137


1138
1139
1140
1141
1142
1143
1144
1125
1126
1127
1128
1129
1130
1131



1132
1133
1134

1135
1136
1137
1138
1139
1140
1141
1142
1143







-
-
-
+
+
+
-
+
+







__[i]/date(date_février)__ 3[01] février
    <<- ->> 28 février|29 février                                                                   # Cette date est invalide. Il n’y a que 28 ou 29 jours en février. 

TEST: le {{30 février}}



#
# //////////////////////////////////////// PRÉPROCESSEUR ////////////////////////////////////////
# épuration des signes inutiles et quelques simplifications
!!!
!!!
!!! Processeur: épuration des signes inutiles et quelques simplifications                           
#
!!!
!!!

# fin de phrase
__<s>(p_fin_de_phrase)__        [.?!:;…][ .?!… »”")]*$  <<- ~>> *

# début de phrase
__<s>(p_début_de_phrase)__      ^ *[-–—] <<- ~>> *

1196
1197
1198
1199
1200
1201
1202
1203

1204
1205


1206
1207
1208


1209
1210
1211
1212
1213
1214
1215
1216
1195
1196
1197
1198
1199
1200
1201

1202


1203
1204



1205
1206

1207
1208
1209
1210
1211
1212
1213







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







    [A-Z][a-z]+ [A-Z][a-z]+
    <<- spell(\0.replace(" ", "_")) ~>> =\0.replace(" ", "_")


TEST: New York {{étaient}} {{devenue}} la plaque tournante de tous les trafics.



!!
#
# //////////////////////////////////////// RÈGLES DE CONTRÔLE ////////////////////////////////////////
!!
!!!! Traits d’union                                                                                 
#


!!
!!
############################## LIAISONS - TRAITS D’UNION ##############################

__<i]/tu(tu_t_euphonique1)__
    (-t[’' ])(il|elle|on)  @@0,$  <<- -1>> -t-      # Pour le “t” euphonique, il faut deux traits d’union.
__<i]/tu(tu_t_euphonique2)__
    ( t[-’' –—])(il|elle|on)  @@0,$  <<- -1>> -t-   # Pour le “t” euphonique, il faut deux traits d’union.
__<i]/tu(tu_t_euphonique3)__
    ([- ]t[-’'])tu  @@0
1598
1599
1600
1601
1602
1603
1604


1605
1606
1607
1608
1609
1610
1611
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610







+
+







    lors que?
    <<- not before(r"(?i)\bd[eè]s +$") ->> =\0.replace(" ", "")                                     # Attachez les deux mots.|https://fr.wiktionary.org/wiki/lorsque

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.


!!!! Virgules                                                                                       

# 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 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 ?
1632
1633
1634
1635
1636
1637
1638

1639


1640
1641
1642
1643
1644
1645
1646
1647
1648



1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668





1669
1670
1671
1672
1673
1674
1675
1631
1632
1633
1634
1635
1636
1637
1638

1639
1640
1641
1642
1643
1644
1645
1646
1647


1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667



1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679







+
-
+
+







-
-
+
+
+

















-
-
-
+
+
+
+
+







    -1>> \1,                                                                                        # Une virgule est probablement souhaitable.

TEST: Tu vas les {{donner}} Rachel.
TEST: Il va la {{tuer}} Paul.
TEST: Cependant les promesses n’engagent que ceux qui les croient, comme aimait à le dire Jacques Chirac.



# Apostrophe manquante (voir règle à la passe précédente)
!!!! Apostrophe manquante (2)                                                                       

__<s>/typo(typo_apostrophe_manquante_audace2)__
    ^ *([LDSNCJMTÇ] )[aeéiouhAEÉIOUHyîèêôûYÎÈÊÔÛ]  @@*
    <<- option("mapos") -1>> =\1[:-1]+"’"                                                           # Il manque peut-être une apostrophe.

TEST: __mapos__ {{L }}opinion des gens, elle s’en moquait.


## A / À
# accentuation la préposition en début de phrase

!!!! A / À: accentuation la préposition en début de phrase

__<s]/typo(typo_À_début_phrase1)__
    ^ *(A) (?!t[’-](?:ils?|elles?|on))({w_2})  @@*,$
    <<- morphex(\2, ":[GNAY]", ":(?:Q|3s)|>(?:priori|post[eé]riori|contrario|capella|fortiori) ")
    -1>> À                                                                                          # S’il s’agit de la préposition « à », il faut accentuer la majuscule.
__<s>/typo(typo_À_début_phrase2)__
    ^ *(A) [ldnms]’  @@*  <<- -1>> À                                                                # S’il s’agit de la préposition « à », il faut accentuer la majuscule.
__<s>/typo(typo_À_début_phrase3)__
    ^ *(A) t’(?!il |elle |ont? )  @@*  <<- -1>> À                                                   # S’il s’agit de la préposition « à », il faut accentuer la majuscule.

TEST: {{A}} vaincre sans péril, on triomphe sans gloire.
TEST: « {{A}} partir de maintenant, ce ne sera plus comme avant.
TEST: — {{A}} n’en plus pouvoir
TEST: — {{A}} t’emmener loin de tout ceci.
TEST: A priori, nul ne peut y parvenir sans une aide extérieure.



#
# //////////////////////////////////////// DÉSAMBIGUÏSATEUR ////////////////////////////////////////
#
!!!
!!!
!!! Désambiguïsation                                                                                
!!!
!!!

# mots grammaticaux
__[i](d_dans)__
    dans
    <<- not morph(word(-1), ":D.*:p|>[a-z]+ièmes ", False, False) =>> select(\0, ":R")

# verbe
1733
1734
1735
1736
1737
1738
1739
1740

1741
1742
1743
1744



1745



1746
1747
1748
1749
1750
1751
1752
1737
1738
1739
1740
1741
1742
1743

1744




1745
1746
1747

1748
1749
1750
1751
1752
1753
1754
1755
1756
1757







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









TEST: il s’agit d’{{un}} {{anagramme}}
TEST: nul ne sait qui arriva à ce pauvre Paul surpris par la pluie.
TEST: elle finit par être très fière de son fils.


#

# //////////////////////////////////////// RÈGLES DE CONTRÔLE ////////////////////////////////////////
#



!!
!!
############################## OCR (expérimental) ##############################
!!!! OCR                                                                                            
!!
!!

# ?
__<s]/ocr(ocr_point_interrogation)__
    [  ]7
    <<- after0("^(?: +[A-ZÉÈÂ(]|…|[.][.]+| *$)") ->> " ?"                                           # Erreur de numérisation ?

TEST: __ocr__ des chiffrements{{ 7}} Paul n’en sait rien.
2369
2370
2371
2372
2373
2374
2375
2376
2377





2378
2379
2380
2381
2382
2383
2384
2374
2375
2376
2377
2378
2379
2380


2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392







-
-
+
+
+
+
+







    <<- \0 != "<" and \0 != ">" ->> _                                                               # Erreur de numérisation ? Cette chaîne contient un caractère de fréquence rare.

TEST: __ocr__ trouve {{l£}} temps
TEST: __ocr__ elle s’{{avance*}} sur le seuil
TEST: __ocr__ par beaucoup d’argent ? {{{Il}} débouche le Jack Daniels


############################## RÈGLES DE BASE ##############################

!!
!!
!!!! Incohérences de base                                                                           
!!
!!

### double négation
__[i](double_négation)__
    pas (personne|aucune?|jamais)  @@4
    <<- not morph(word(-1), ":D:[me]" ,False, False) ->> \1|pas, \1
    # Double négation : les mots « pas \1 » ne devraient pas se succéder. Si ces mots appartiennent à des propositions distinctes, une virgule est peut-être préférable.

2400
2401
2402
2403
2404
2405
2406
2407
2408
2409





2410
2411
2412
2413
2414
2415
2416
2408
2409
2410
2411
2412
2413
2414



2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426







-
-
-
+
+
+
+
+







TEST: Au MES, rien de nouveau
TEST: {{Ces}} {{cette}} canaille qui nous a donné tant de fil à retordre.
TEST: Mon {{il}} est une merveille.
TEST: je ne sais {{des}} {{ses}} choses.



################################################## STYLE ##################################################

########## Basique
!!
!!
!!!! Style                                                                                          
!!
!!

#__bs__  Mr <<- ->> M.                          # M. est l’usage courant pour “Monsieur”. « Mr » est l’abréviation ancienne, française.

# à / en
__[i]/bs(bs_en_à_ville)__
    (en) A(?:gen|miens|ngers|jjacio|rles|vignon)  @@0
    <<- -1>> à       # On utilise la préposition “à” avant les villes (à Avignon, à Arles…), la préposition “en” avant les régions (en Amérique, en Afrique…).
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516


2517



2518
2519
2520
2521
2522
2523
2524
2509
2510
2511
2512
2513
2514
2515


2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526

2527
2528
2529
2530
2531
2532
2533
2534
2535
2536







-
-









+
+
-
+
+
+







    malgré (que?)  @@7
    <<- not after_chk1(r" \w[\w-]+ en ([aeo][a-zû]*)", ":V0a")
    ->> bien \1                                                                                     # Tournure populaire. Utilisez « bien que ».

TEST: {{Malgré que}} je sois fou.




######### Expressions impropres

#([mts]e|[nv]ous) (rappel\w+) (de) <<- word(1) != "ne" and not morph(word(1), ":V")
#   -3>> _                                                     # Expression impropre. « Se rappeler quelque chose » ou « Se souvenir de quelque chose ».
#Se rappelle de l’amour

#enjoindre à qqn de faire qqch


!!
!!
########## Pléonasmes
!!!! Pléonasmes                                                                                     
!!
!!

__[i]/pleo(pleo_abolir)__               (abol\w+) (?:absolument|entièrement|compl[èé]tement|totalement) @@0 <<- morph(\1, ">abolir ", False) ->> \1         # Pléonasme.
__[i]/pleo(pleo_acculer)__              (accul\w+) aux? pieds? du mur @@0 <<- morph(\1, ">acculer ", False) ->> \1                                          # Pléonasme.
__[i]/pleo(pleo_achever)__              (ach[eè]v\w+) (?:absolument|entièrement|compl[èé]tement|totalement) @@0 <<- morph(\1, ">achever ", False) ->> \1    # Pléonasme.
__[i]/pleo(pleo_en_cours)__             actuellement en cours <<- not after(r" +de?\b") ->> en cours                                            # Pléonasme.
__[i]/pleo(pleo_en_train_de)__          (actuellement en train) d(?:e(?! nuit)|’{w_2}) @@0 <<- -1>> en train                                    # Pléonasme.
__[i]/pleo(pleo_ajouter)__              (ajout\w+) en plus @@0 <<- ->> \1                                                                       # Pléonasme.
2660
2661
2662
2663
2664
2665
2666

2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685





2686
2687
2688
2689
2690
2691
2692
2693
2694
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704

2705
2706
2707
2708
2709
2710
2711







+



















+
+
+
+
+

-







    <<- morph(\1, ">(?:ajourner|différer|reporter) ", False)
    ->> \1                                                                                                              # Pléonasme.

TEST: {{Ajourner à une date ultérieure}}      ->> Ajourner
TEST: {{différer à une date ultérieure}}      ->> différer
TEST: {{reporter à plus tard}}                ->> reporter



# ayants droit
__[i]/sgpl(sgpl_ayants_droit)__
    [ldcs]es (ayant[- ]droits?) @@4 <<- -1>> ayants droit                 # Au singulier : « un ayant droit ». Au pluriel : « des ayants droit ».

TEST: Comment lutter contre la cupidité des {{ayant droits}}
# Note: À supprimer? Graphie qui tend vers la soudure et le pluriel régulier (ayant-droit(s))


# Mon, ton, son : euphonie
__[i]/gn(gn_mon_ton_son_euphonie)__
    ([mts]a) +({w_2})  @@0,$
    <<- morphex(\2, ">[aâeéèêiîoôuûyœæ].+:[NAQ].*:f", ":[eGW]") -1>> =\1.replace("a", "on")         # Même si « \2 » est féminin, on utilise « mon/ton/son » pour faire la liaison.|http://fr.wikipedia.org/wiki/Euphonie

TEST: {{ta}} aimée                                            ->> ton
TEST: {{ma}} obligée                                          ->> mon
TEST: Ce couple va donner à la France sa très importante collection qui rejoindra le musée d’Orsay


!!
!!
!!!! Confusions                                                                                     
!!
!!

#### CONFUSIONS
__[s>/conf(conf_ne_n)__     [nN]e n’                        <<- ->> ne m’|n’                        # Incohérence. Double négation.
__[s>/conf(conf_pronoms1)__ [mtMT]e ([nmst](?:’|e )) @@$    <<- ->> \1                              # Incohérence.
__[s>/conf(conf_pronoms2)__ [sS]e ([mst](?:’|e )) @@$       <<- ->> \1                              # Incohérence.
__[s>/conf(conf_de_d)__     [dD][eu] d’(?![A-ZÉÂÔÈ])        <<- ->> d’                              # Incohérence. 

TEST: Il {{ne n’}}arrive jamais à l’heure.
TEST: Ça {{me te }}prend la tête, toutes ces complications vaines.
3846
3847
3848
3849
3850
3851
3852





3853
3854
3855
3856
3857
3858
3859
3863
3864
3865
3866
3867
3868
3869
3870
3871
3872
3873
3874
3875
3876
3877
3878
3879
3880
3881







+
+
+
+
+







TEST: M’enfin, c’est absurde
TEST: il est normal de ne presque pas payer des gens qui effectuent un travail
TEST: j’ai l’impression de ne même pas savoir ce qu’est un « juif français ».
TEST: C’que j’comprends, c’est qu’il y a des limites à ce qu’on peut supporter.
TEST: la tentation pour certains médias de ne tout simplement pas rémunérer notre travail si celui-ci n’est finalement pas publié.
TEST: Ne parfois pas être celui qui sabote l’ambiance.

!!
!!
!!!! Formes verbales sans sujet                                                                     
!!
!!

## Incohérences avec formes verbales 1sg et 2sg sans sujet
__[i](p_notre_père_qui_es_au_cieux)__   notre père (qui est? aux cieux) @@11 <<- ~1>> *

__[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"))
3938
3939
3940
3941
3942
3943
3944
3945





3946
3947
3948
3949
3950
3951
3952
3960
3961
3962
3963
3964
3965
3966

3967
3968
3969
3970
3971
3972
3973
3974
3975
3976
3977
3978







-
+
+
+
+
+







TEST: plus rapide que {{prévues}}                             ->> prévu
TEST: autant d’hommes que {{prévus}}                          ->> prévu
TEST: il y en a moins que {{prévues}}                         ->> prévu
TEST: comme {{convenus}}                                      ->> convenu



#### TOUT / TOUS / TOUTE / TOUTES
!!
!!
!!!! Tout, tous, toute, toutes                                                                      
!!
!!

__[i](p_fais_les_tous)__
    fai(?:tes|sons|s)-(?:les|[nv]ous) (tou(?:te|)s) @@$ <<- ~1>> *
__[i](p_tout_débuts_petits)__
    (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,$
4036
4037
4038
4039
4040
4041
4042
4043






4044
4045
4046
4047
4048
4049
4050
4062
4063
4064
4065
4066
4067
4068

4069
4070
4071
4072
4073
4074
4075
4076
4077
4078
4079
4080
4081







-
+
+
+
+
+
+







TEST: Tout les sépare.
TEST: les tout débuts du mouvement ouvrier
TEST: vos tout débuts furent difficiles
TEST: aux tout débuts, il y eut bien des erreurs
TEST: comment les inégalités sociales impactent la santé des tout petits


#### ADVERBES DE NÉGATION

!!
!!
!!!! Adverbes de négation                                                                           
!!
!!

__[i]/neg(ne_manquant1)__
    (?:je|tu|ils?|on|elles?) ([bcdfgjklmnpqrstvwxz][\w-]*) (pas|rien|jamais|guère)  @@w,$
    <<- morph(\1, ":[123][sp]", False) and not (re.search("(?i)^(?:jamais|rien)$", \2) and before(r"\b(?:que?|plus|moins) "))
    -1>> ne \1                                                                                      # Ne … \2 : il manque l’adverbe de négation.

__[i]/neg(ne_manquant2)__
4098
4099
4100
4101
4102
4103
4104
4105

4106
4107
4108


4109


4110
4111
4112
4113
4114
4115
4116
4129
4130
4131
4132
4133
4134
4135

4136



4137
4138

4139
4140
4141
4142
4143
4144
4145
4146
4147







-
+
-
-
-
+
+
-
+
+







TEST: déterminés à ne pas se laisser récupérer
TEST: de ne pas en élire du tout
TEST: Mais gare à ne pas non plus trop surestimer la menace
TEST: ne jamais beaucoup bosser, c’est sa devise.




!!!
#
# //////////////////////////////////////// PRÉPROCESSEUR ////////////////////////////////////////
# épuration des adverbes, locutions adverbiales, interjections et expressions usuelles
!!!
!!! Processeur: épuration des adverbes, locutions adverbiales, interjections et expressions usuelles
#
!!!
!!!

# Dates
__[s](p_date)__
    (?:[dD]epuis le|[lL]e|[dD]u|[aA]u|[jJ]usqu au|[àÀ] compter du) (?:1(?:er|ᵉʳ)|\d\d?) (?:janvier|février|mars|avril|mai|juin|juillet|ao[ûu]t|septembre|octobre|novembre|décembre|vendémiaire|brumaire|frimaire|nivôse|pluviôse|ventôse|germinal|floréal|prairial|messidor|thermidor|fructidor)(?: \d+| dernier| prochain|) <<- ~>> *
__[i](p_en_l_an_de_grâce_année)__
    en l’an (?:de grâce |)\d+ <<- ~>> *
__[s](p_en_de_mois_année)__
4852
4853
4854
4855
4856
4857
4858
4859
4860





4861
4862
4863
4864
4865
4866
4867
4883
4884
4885
4886
4887
4888
4889

4890
4891
4892
4893
4894
4895
4896
4897
4898
4899
4900
4901
4902







-

+
+
+
+
+







TEST: Ben voyons, c’est sûr, aucun problème !
TEST: ça peut être dans huit jours.
TEST: La secrétaire d’Etat à l’égalité entre les femmes et les hommes hérite de la lutte contre les discriminations
TEST: les populistes d’Europe centrale et de l’Est ont d’ores et déjà tellement réussi à compromettre les institutions de leur pays
TEST: Deirdre, elle aussi légèrement ostracisée, m’interrogea.


#### DÉSAMBIGUÏSATION

!!!
!!!
!!! Désambiguïsation (deprecated)
!!!
!!!
#__[i]__  ({avoir}) +({w_1}[eiuts])  @@0,$
#    <<- morph(\1, ":V0a", False) and morphex(\1, ":Q", ":G")
#    =>> exclude(\2, ":A")


### Désambiguïsation par séparation de le/la/les avec la suite s’il s’agit de COD dans les syntagmes verbaux
__[i>(p_astuce_je_le_la_les)__
4903
4904
4905
4906
4907
4908
4909
4910

4911
4912
4913
4914
4915
4916
4917
4918
4919
4920
4921
4922
4923
4924
4925





4926
4927
4928
4929
4930
4931
4932
4938
4939
4940
4941
4942
4943
4944

4945
4946
4947
4948
4949
4950
4951
4952
4953
4954
4955
4956
4957
4958
4959

4960
4961
4962
4963
4964
4965
4966
4967
4968
4969
4970
4971







-
+














-
+
+
+
+
+









#
# //////////////////////////////////////// RÈGLES DE CONTRÔLE ////////////////////////////////////////
#


#### Redondances
!!!! Redondances dans la phrase                                                                     
 
__[i]/redon2(redondances_phrase)__
    ({w_4})[ ,].* (\1)  @@0,$
    <<- not morph(\1, ":(?:G|V0)|>même ", False) -2>> _             # Dans cette phrase, répétition de « \1 » (à gauche).
    <<- __also__ -1>> _                                             # Dans cette phrase, répétition de « \1 » (à droite).

TEST: __redon2__ Quelle {{imposture}}, c’est d’un ennui, c’est une {{imposture}}.
TEST: __redon2__ ils sont là côte à côte.
TEST: __redon2__ Tu avances petit à petit, et tu réussis.
TEST: __redon2__ De loin en loin, elle passe.
TEST: __redon2__ Les mêmes causes produisent/produisant les mêmes effets. (répétition)



############################## GROUPE NOMINAL ##############################
!!
!!
!!!! Groupe nominal (1)                                                                             
!!
!!

#### 1 mot

## Usage impropre

__[s](au_le_nom)__
    ([aA]u le) ({w_2})  @@0,6   <<- morph(\2, ":[NAQ]", False) -1>> au          # Usage impropre. Après “au”, l’article “le” est inapproprié. (Ex : Je vais à la gare, je vais au stade.)
5470
5471
5472
5473
5474
5475
5476
5477






5478
5479
5480
5481
5482
5483
5484
5509
5510
5511
5512
5513
5514
5515

5516
5517
5518
5519
5520
5521
5522
5523
5524
5525
5526
5527
5528







-
+
+
+
+
+
+







    (trouv\w+) +(ça|ce(?:ci|la)) +({w_2})  @@0,w,$
    <<- morph(\1, ">trouver ", False) and morphex(\3, ":A.*:(?:f|m:p)", ":(?:G|3[sp]|M[12P])")
    -3>> =suggMasSing(@)                                                                            # Trouver \2 + [adjectif] : l’adjectif s’accorde avec “\2” (au masculin singulier).

TEST: ils trouvent ça de plus en plus {{idiots}}              ->> idiot


#### 2 mots

!!
!!
!!!! Groupe nominal (2)                                                                             
!!
!!

## Sans article

__[i]/gn(gn_2m_accord)__
    ^ *({w_2}) +({w_2})  @@*,$
    <<- ((morph(\1, ":[NAQ].*:m") and morph(\2, ":[NAQ].*:f")) or (morph(\1, ":[NAQ].*:f") and morph(\2, ":[NAQ].*:m"))) and not apposition(\1, \2)
    -2>> =switchGender(@)                                                                           # Accord de genre erroné avec « \1 ».
5857
5858
5859
5860
5861
5862
5863
5864






5865
5866
5867
5868
5869
5870
5871
5901
5902
5903
5904
5905
5906
5907

5908
5909
5910
5911
5912
5913
5914
5915
5916
5917
5918
5919
5920







-
+
+
+
+
+
+







TEST: Des règles pas du tout {{claire}}.                      ->> claires
TEST: Des peines à peine {{croyable}}.                        ->> croyables
TEST: Des {{chambres}} plus ou moins fortement {{éclairé}}.
TEST: Les couleurs rouge, jaune et verte ne doivent pas être utilisées
TEST: des passeports américain, canadien, néerlandais, allemand et britannique.


#### 3 mots

!!
!!
!!!! Groupe nominal (3)                                                                             
!!
!!

## nombre

__[i]/gn(gn_3m)__
    ^ *({w_2}) +({w_2}) +({w_3})  @@*,w,$
    <<- (morph(\1, ":[NAQ].*:p") and morph(\2, ":[NAQ].*:[pi]") and morph(\3, ":[NAQ].*:s"))
    or (morph(\1, ":[NAQ].*:s") and morph(\2, ":[NAQ].*:[si]") and morph(\3, ":[NAQ].*:p"))
5897
5898
5899
5900
5901
5902
5903


5904



5905
5906
5907
5908
5909
5910
5911
5946
5947
5948
5949
5950
5951
5952
5953
5954

5955
5956
5957
5958
5959
5960
5961
5962
5963
5964







+
+
-
+
+
+







    and not before(r"(?i)\bune? de ")
    -4>> =suggPlur(@)                                                       # Accord de nombre erroné avec « \1 \2 \3 » : « \4 » devrait être au pluriel.

TEST: ces petites sottes {{déjantée}}



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

__[i]/gn(gn_devinette1)__
    (?:[lmts]a|une|cette) +{w_2} +d(?:e (?:[lmts]a|cette)|’une) +(?!des )({w_2}) +({w_2})  @@w,$
    <<- morphex(\2, ":[NAQ].*:(?:m|f:p)", ":(?:G|P|[fe]:[is]|V0|3[sp])") and not apposition(\1, \2)
    -2>> =suggFemSing(@, True)                                                              # Accord erroné : « \2 » devrait être au féminin singulier.

__[i]/gn(gn_devinette2)__
5954
5955
5956
5957
5958
5959
5960
5961





5962
5963
5964
5965
5966
5967
5968
6007
6008
6009
6010
6011
6012
6013

6014
6015
6016
6017
6018
6019
6020
6021
6022
6023
6024
6025







-
+
+
+
+
+







    de tel(?:s? sorte(?:s|nt|)|les sorte(?:s|nt|)|le sorte(?:s|nt))
    <<- ->> de telle sorte                                                                          # Accord erroné.

TEST: {{de telles sorte}}



############################## SINGULIERS & PLURIELS ##############################
!!
!!
!!!! Singuliers & Pluriels                                                                          
!!
!!

#### Prépositions

# Similaires à prépositions : http://www.synapse-fr.com/manuels/PP_ATTENDU.htm
# attendu, compris, non-compris, y compris, entendu, excepté, ôté, ouï, passé, supposé, vu
# ! problème avec l’ouïe, ouï retiré de la liste
__<i]/sgpl(sgpl_prep_compris_det)__
6328
6329
6330
6331
6332
6333
6334
6335





6336
6337
6338
6339
6340
6341
6342
6385
6386
6387
6388
6389
6390
6391

6392
6393
6394
6395
6396
6397
6398
6399
6400
6401
6402
6403







-
+
+
+
+
+








TEST: c’est son point de {{vu}} qui prime.
TEST: Son point de {{vus}} prévaudra toujours, faites-vous à cette idée ou dégagez.
TEST: de mon point de {{vues}}



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

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

TEST: C’est {{abusé}} !
7631
7632
7633
7634
7635
7636
7637
7638

7639
7640
7641
7642
7643
7644
7645
7646
7647
7648
7649
7650
7651
7652






7653
7654
7655
7656
7657
7658
7659
7692
7693
7694
7695
7696
7697
7698

7699
7700
7701
7702
7703
7704
7705
7706
7707
7708
7709
7710
7711
7712

7713
7714
7715
7716
7717
7718
7719
7720
7721
7722
7723
7724
7725







-
+













-
+
+
+
+
+
+









# nouveau / nouvel
# TODO



############################## MOTS COMPOSÉS ###############################
!!!! Mots composés                                                                                  

__[i]/mc(mc_mot_composé)__
    ({w2})-({w2})  @@0,$
    <<- not \1.isdigit() and not \2.isdigit() and not morph(\0, ":", False) and not morph(\2, ":G", False) and spell(\1+\2) ->> \1\2
    # Vous pouvez ôter le trait d’union.
    <<- \2 != "là" and not re.search("(?i)^(?:ex|mi|quasi|semi|non|demi|pro|anti|multi|pseudo|proto|extra)$", \1)
    and not \1.isdigit() and not \2.isdigit() and not morph(\2, ":G", False)
    and not morph(\0, ":", False) and not spell(\1+\2) ->> _
    # Mot inconnu du dictionnaire.|http://www.dicollecte.org/dictionary.php?prj=fr&unknownword=on

TEST: __mc__ des {{portes-avions}}.


############################## MAJUSCULES & MINUSCULES ###############################

!!
!!
!!!! Casse: majuscules et minuscules                                                                
!!
!!

# Les jours
__[s]/maj(maj_jours_semaine)__
    (?:Lundi|Mardi|Mercredi|Jeudi|Vendredi|Samedi|Dimanche)
    <<- before(r"[\w,] +$") ->> =\0.lower()
    # Pas de majuscule sur les jours de la semaine.|http://www.academie-francaise.fr/la-langue-francaise/questions-de-langue#42_strong-em-jours-de-la-semaine-pluriel-et-majuscules-em-strong

7802
7803
7804
7805
7806
7807
7808





















7809

7810





7811
7812
7813
7814
7815
7816
7817
7818
7819
7868
7869
7870
7871
7872
7873
7874
7875
7876
7877
7878
7879
7880
7881
7882
7883
7884
7885
7886
7887
7888
7889
7890
7891
7892
7893
7894
7895

7896
7897
7898
7899
7900
7901
7902
7903

7904
7905
7906
7907
7908
7909
7910







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

+
+
+
+
+

-








TEST: J’en veux 3 {{Mètres}}.
TEST: Elle en prendra vingt {{Grammes}}.




!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!! Conjugaisons                                                                                    
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
################################################################# CONJUGAISONS ##############################################################################


!!
!!
!!!! Infinitif                                                                                      
!!
!!

#### INFINITIF
__[i]/infi(infi_à_en)__
    à en ({w_2}) @@5
    <<- morphex(\1, ":V", ":Y") -1>> =suggVerbInfi(@)                                               # Le verbe devrait être à l’infinitif.

TEST: à en {{parlé}} sans cesse


7914
7915
7916
7917
7918
7919
7920
7921
7922
7923
7924
7925
7926
7927
7928
8005
8006
8007
8008
8009
8010
8011

8012
8013
8014
8015
8016
8017
8018







-







    ((?:cess|dé[cf]|sugg[éè]r|command|essa|tent|chois|perm[eiî]t|interd)\w*) +(?:pas |plus |point |guère |jamais |peu |rien |) *(?:de +|d’)({w_2}(?:ée?s?|ez))  @@0,$
    <<- morph(\1, ">(?:cesser|décider|défendre|suggérer|commander|essayer|tenter|choisir|permettre|interdire) ", False) and analysex(\2, ":(?:Q|2p)", ":M")
    -2>> =suggVerbInfi(@)                                                                           # Le verbe devrait être à l’infinitif.

TEST: cessez d’{{anesthésié}} ces gens !



## INFINITIFS ERRONÉS

__[i]/infi(infi_adjectifs_masculins_singuliers)__
    ^ *(?:le|un|cet?|[mts]on|quel) (?!verbe)({w_2}) +({w_2}er)  @@w,$
    <<- morphex(\1, ":N.*:m:[si]", ":G") and morphex(\2, ":Y", ">aller |:(?:M|N.*:m:s)") and isNextVerb()
    -2>> =suggVerbPpas(\2, ":m:s")                                                  # Confusion probable : “\2” est à verbe à l’infinitif. Pour l’adjectif, écrivez :

7948
7949
7950
7951
7952
7953
7954
7955

7956
7957
7958
7959
7960
7961
7962
7963
7964
7965
7966





7967
7968
7969
7970
7971
7972
7973
8038
8039
8040
8041
8042
8043
8044

8045
8046
8047
8048
8049
8050
8051
8052
8053



8054
8055
8056
8057
8058
8059
8060
8061
8062
8063
8064
8065







-
+








-
-
-
+
+
+
+
+







    -2>> =suggVerbPpas(\2, ":p")                                                    # Confusion probable : “\2” est à verbe à l’infinitif. Pour l’adjectif, écrivez :

TEST: les documents {{scanner}} ne sont pas lisibles.
TEST: tes doutes {{remâcher}} deviennent difficiles à vivre.



#### PARTICIPES PRÉSENTS
!!!! Particpes présents                                                                             

__[i]/conj(conj_participe_présent)__  (?:ne|lui|me|te|se|nous|vous) ({w_2}ants)  @@$
    <<- morph(\1, ":A", False) -1>> =\1[:-1]                                                        # Un participe présent est invariable.|http://fr.wiktionary.org/wiki/participe_pr%C3%A9sent

TEST: nous {{épuisants}} à la tâche pour des clopinettes, nous défaillîmes.



#
# //////////////////////////////////////// PRÉPROCESSEUR ////////////////////////////////////////
#
!!!
!!!
!!! Processeur: simplification des substantifs                                                      
!!!
!!!

### @ : we remove @ we introduced after le/la/les in some cases
__<s>(p_arobase)__      @ <<- ~>> *

### Avant les verbes (ôter seulement les COI!)
__[i](p_ne_leur_lui)__  ne (leur|lui)(?! en) @@3 <<- ~1>> *

8081
8082
8083
8084
8085
8086
8087
8088
8089
8090
8091
8092
8093

8094
8095
8096
8097
8098
8099
8100
8173
8174
8175
8176
8177
8178
8179






8180
8181
8182
8183
8184
8185
8186
8187







-
-
-
-
-
-
+








TEST: tandis que d’autres perçoivent le bon goût de la soupe.
TEST: Je me doute bien que vous avez trouvé la réponse.
TEST: Nous nous doutons bien qu’il y a une entourloupe derrière cette affaire.



#
# //////////////////////////////////////// RÈGLES DE CONTRÔLE ////////////////////////////////////////
#


#### OCR
!!!! OCR                                                                                            

# Participes passés
__[i]/ocr(ocr_être_participes_passés)__
    ({etre}) +({w_2}es?) @@0,$
    <<- morph(\1, ":V0e", False) >>>
    <<- \2.endswith("e") and morphex(\2, ":V1.*:Ip.*:[13]s", ":(?:[GM]|A)") and not before(r"(?i)\belle +(?:ne +|n’|)$")
    -2>> =suggVerbPpas(\2, ":m:s")                                                                  # Erreur de numérisation ?
8123
8124
8125
8126
8127
8128
8129
8130
8131

8132
8133
8134
8135
8136
8137
8138
8210
8211
8212
8213
8214
8215
8216

8217
8218
8219
8220
8221
8222
8223
8224
8225







-

+







TEST: __ocr__ il était sublime.
TEST: __ocr__ elle avait envie de s’en sortir enfin.
TEST: __ocr__ la longueur de la circonférence étant égale à…
# TEST: __ocr__ vous êtes {{presses}} de monter à bord de ce train-ci.
# Fonctionne avec nous serons, mais pas nous sommes (bug de JavaScript?)


#### CONFUSIONS

!!!! Confusions                                                                                     

## guerre / guère
__[i]/conf(conf_ne_pronom_pronom_verbe_guère)__
    ne (?:[mts]e|la|les?|[nv]ous|lui|leur) (?:la |les? |lui |leur |l’|)\w{w_2} (?:plus |)(guerre)  @@$
    <<- -1>> guère                                                                                  # Confusion. La guerre est conflit. Pour l’adverbe signifiant “peu”, écrivez :

TEST: tout ceci ne me rapporte {{guerre}}
8184
8185
8186
8187
8188
8189
8190
8191




8192
8193
8194
8195
8196
8197
8198
8199
8200
8201
8202
8203
8204
8205
8206
8207

8208
8209
8210
8211
8212
8213
8214
8215
8216
8217
8218
8219


8220



8221
8222
8223
8224
8225
8226
8227
8271
8272
8273
8274
8275
8276
8277

8278
8279
8280
8281
8282
8283
8284
8285
8286
8287
8288
8289
8290
8291
8292
8293
8294
8295
8296
8297
8298
8299
8300
8301
8302
8303
8304
8305
8306
8307
8308
8309
8310
8311
8312

8313
8314
8315
8316
8317
8318
8319
8320
8321
8322







-
+
+
+
+
















+












+
+
-
+
+
+







__[i]/conf(conf_aller_de_soi)__
    ({aller}) +de (soi[tes])  @@0,$
    <<- morph(\1, ">aller", False) and not after(" soit ") -2>> soi                                 # Confusion.|https://fr.wiktionary.org/wiki/aller_de_soi

TEST: cela ne va pas de {{soit}}.


#### ADVERBES

!!!! Adverbes après verbe                                                                           

# fort
__[i]/sgpl(sgpl_verbe_fort)__
    ({w_2}) +(forts)  @@0,$
    <<- morphex(\1, ":V", ":[AN].*:[me]:[pi]|>(?:être|sembler|devenir|re(?:ster|devenir)|para[îi]tre|appara[îi]tre) .*:(?:[123]p|P|Q)|>(?:affirmer|trouver|croire|désirer|estime|préférer|penser|imaginer|voir|vouloir|aimer|adorer|souhaiter) ")
    and not morph(word(1), ":A.*:[me]:[pi]", False)
    -2>> fort                                               # Confusion probable. S’il s’agit ici de l’adverbe “fort” (équivalent de “fortement”), écrivez-le au singulier.

TEST: ces emmerdeurs crient bien trop {{forts}}
TEST: ces animaux paraissent forts, mais ils sont faibles.
TEST: ils sont forts, ces gars-là.
TEST: ils se croient forts.
TEST: je les imagine forts et intelligents.
TEST: elles les veulent forts et astucieux.
TEST: les écarts ont été plus forts en une génération
TEST: Avec le même nombre de bulletins, les xénophobes apparaîtront plus forts.


# bien
__[i]/sgpl(sgpl_bien)__
    biens
    <<- morphex(word(-1), ":V", ":D.*:p|:A.*:p", False) ->> bien                                    # Confusion probable. Ici, “bien” est un adverbe, donc invariable.

TEST: Ils vont {{biens}}.
TEST: Elles travaillaient vraiment {{biens}}.
TEST: Il ne comprenait vraiment pas très {{biens}} ces principes de base.
TEST: Il a de grands biens.
TEST: Ce sont des biens de peu de valeur.



!!
!!
#### INFINITIF
!!!! Infinitif                                                                                      
!!
!!

__[i]/infi(infi_d_en_y)__
    d’(?:en|y) +({w_2}(?:ée?s?|ai[st]?|ez))  @@$
    <<- morph(\1, ":V", False) -1>> =suggVerbInfi(@)                                                # Le verbe devrait être à l’infinitif.

TEST: arrête d’y {{consacré}} autant de temps.

8301
8302
8303
8304
8305
8306
8307
8308

8309




8310
8311
8312
8313
8314
8315
8316
8396
8397
8398
8399
8400
8401
8402

8403

8404
8405
8406
8407
8408
8409
8410
8411
8412
8413
8414







-
+
-
+
+
+
+







__[i]/infi(infi_lui)__
    lui ({w_2}ée?s?)  @@$
    <<- morph(\1, ":Q", False) -1>> =suggVerbInfi(@)                                                # Le verbe ne devrait pas être un participe passé.

TEST: lui {{mangée}} beaucoup.



!!
#### USAGE PRONOMINAL : SE + ÊTRE + VERBE
!!
!!!! Participes passés: se +être +verbe                                                             
!!
!!

__[i]/ppas(ppas_je_me_être_verbe)__
    je +(?:ne +|)m(?:e +|’(?:y +|))(?:s[uo]i[st]|étai[st]|fu(?:sses?|s|t)|serai[st]?) +({w_3}) @@$
    <<- morphex(\1, ":Q.*:p", ":(?:G|Q.*:[si])") and isRealEnd() and not before(r"\b[qQ]ue? +$")
    -1>> suggVerbPpas(\1, ":m:s")                                                                   # Si ce participe passé se rapporte bien à “je”, il devrait être au singulier.

TEST: je ne me suis jamais {{perdus}}
8387
8388
8389
8390
8391
8392
8393
8394






8395
8396
8397
8398
8399
8400
8401
8485
8486
8487
8488
8489
8490
8491

8492
8493
8494
8495
8496
8497
8498
8499
8500
8501
8502
8503
8504







-
+
+
+
+
+
+







TEST: ce qui s’est {{passe}}.
TEST: s’y était {{consacrer}} avec enthousiasme.
TEST: On s’est rencontrées lorsqu’on travaillait là-bas.
TEST: des soins que je m’étais donnés.
TEST: Si t’es pas contente, t’achètes pas.


#### PRONOM + LAISSER + ADJ

!!
!!
!!!! Participes passés: se +laisser +adjectif                                                       
!!
!!

__[i]/ppas(ppas_me_te_laisser_adj)__
    ([mt]e|l[ae]) +(laiss\w*) +({w_3})  @@0,w,$
    <<- morph(\2, ">laisser ", False) and  morphex(\3, ":[AQ].*:p", ":(?:[YG]|[AQ].*:[is])")
    -3>> =suggSing(@)                                                                               # Accord avec « \1 » : « \3 » devrait être au singulier.

TEST: Elle te laisse {{épuisés}} par la tâche.
8415
8416
8417
8418
8419
8420
8421
8422

8423




8424
8425
8426
8427
8428
8429
8430
8518
8519
8520
8521
8522
8523
8524

8525

8526
8527
8528
8529
8530
8531
8532
8533
8534
8535
8536







-
+
-
+
+
+
+







TEST: elle nous laissera {{perdu}} dans nos délires.
TEST: je les laisse indifférents.
TEST: tu nous laisses indifférentes.
TEST: ils nous laisseront étourdis.
TEST: nous laisserons étourdi cet homme.



!!
#### ÊTRE / AVOIR ÉTÉ / SEMBLER (+ÊTRE via PP) / DEVENIR / RESTER / DEVENIR / REDEVENIR / PARAÎTRE + PARTICIPE PASSÉ / ADJ
!!
!!!! Participes passés: être, avoir été, sembler (+être via pp), devenir, rester, (re)devenir, paraître + participe passé / adj
!!
!!

__[i]/ppas(ppas_je_verbe)__
    j(?:e +|’(?:y +|en +|))(?:ne +|n’|)((?:s[oue]|étai|fus|dev|re(?:dev|st)|par)\w*|a(?:ie?|vais|urais?) +été|eus(?:se|) +été) +({w_2})  @@w,$
    <<- (morph(\1, ">(?:être|sembler|devenir|re(?:ster|devenir)|para[îi]tre) ", False) or \1.endswith(" été")) and morphex(\2, ":[NAQ].*:p", ":[GWYsi]")
    -2>> =suggSing(@)                                                        # Accord avec le sujet « je » : « \2 » devrait être au singulier.

TEST: j’étais {{perdus}}                                                          ->> perdu
8576
8577
8578
8579
8580
8581
8582


8583



8584
8585
8586
8587
8588
8589
8590
8682
8683
8684
8685
8686
8687
8688
8689
8690

8691
8692
8693
8694
8695
8696
8697
8698
8699
8700







+
+
-
+
+
+







TEST: J’{{ai été}} camper dans les Alpes.
TEST: Tu {{as été}} prendre du bois.
TEST: J’{{ai été}} {{chercher}} du pain.
TEST: Ç’eût été prendre des vessies pour des lanternes.
TEST: C’eût été foncer tête baissée dans la gueule du loup.


!!
!!
## pouvoir/sembler/paraître/vouloir/devoir/croire/déclarer/penser/dire/affirmer + être/avoir été
!!!! Participes passés: pouvoir/sembler/paraître/vouloir/devoir/croire/déclarer/penser/dire/affirmer + être/avoir été
!!
!!

__[i](p_risque_d_être)__
    risqu\w+ +(d’)être @@* <<- ~1>> *

__[i]/ppas(ppas_je_verbe_être)__
    j(?:e|’(?:y|en)) +(?:ne +|n’|)((?:p[aeouûr]|s(?:embl|ouhait)|cr[ouû]|d[eouûéiî]|estim|imagin|v[eo]u|a(?:ffirm|im|dor)|risqu)\w+) +(?:être|avoir été) +({w_2}) @@w,$
    <<- morph(\1, ">(?:sembler|para[îi]tre|pouvoir|penser|préférer|croire|d(?:evoir|éclarer|ésirer|étester|ire)|vouloir|affirmer|aimer|adorer|souhaiter|estimer|imaginer|risquer) ", False)
8684
8685
8686
8687
8688
8689
8690


8691

8692
8693
8694
8695
8696
8697
8698
8699
8700
8701
8702

8703
8704
8705
8706
8707
8708
8709
8710
8711
8794
8795
8796
8797
8798
8799
8800
8801
8802

8803
8804
8805
8806
8807
8808
8809
8810
8811
8812
8813
8814
8815
8816

8817
8818
8819
8820
8821
8822
8823







+
+
-
+











+

-







TEST: elles doivent être {{fâché}}
TEST: elles doivent avoir été {{attaqué}}
TEST: elles peuvent avoir été {{trompé}}
TEST: elles souhaitent être plus {{considérée}}



!!!! Participes passés: accord en nombre avec la conjugaison de « être »                            

## Contrôle de l’accord en nombre avec la conjugaison de « être »
## Contrôle de l’
__[i]/ppas(ppas_être_accord_singulier)__
    ({w_2}) +(?:qui +|)(?:ne +|n’|)(?:est|était|f[uû]t|sera(?:it|)|a(?:vait|ura|urait|it|) +été|e[uû]t +été) +({w_2})  @@0,$
    <<- morphex(\2, ":[NAQ].*:p", ":[GMWYsi]") and not morph(\1, ":G", False)
    -2>> =suggSing(@)                                                        # Accord avec « être » : « \2 » devrait être au singulier.

__[i]/ppas(ppas_être_accord_pluriel)__
    ({w_2}) +(?:qui +|)(?:ne +|n’|)(?:sont|étaient|fu(?:r|ss)ent|ser(?:ont|aient)|soient|ont +été|a(?:vaient|uront|uraient|ient) +été|eu(?:r|ss)ent +été) +({w_2})  @@0,$
    <<- not re.search("(?i)^légion$", \2) and morphex(\2, ":[NAQ].*:s", ":[GWYpi]") and not morph(\1, ":G", False)
    -2>> =suggPlur(@)                                                        # Accord avec « être » : « \2 » devrait être au pluriel.


!!!! Participes passés: accord en genre avec le substantif précédent                                

## Contrôle de l’accord en genre avec le substantif précédent
__[i]/ppas(ppas_sujet_être_accord_genre)__
    (?<![dD]’)(une? |les? |la |l’|ce(?:s|t|tte|) |[mts](?:on|a|es) |[nv]os |leurs? ) *({w_2}) +(?:qui +|)(?:ne +|n’|)(?:est|étai(?:en|)t|f[uû]t|sera(?:i(?:en|)t|)|soi(?:en|)t|s(?:er|)ont|fu(?:r|ss)ent) +({w_2})  @@0,w,$
    <<- not re.search("(?i)^légion$", \3)
    and ((morphex(\3, ":[AQ].*:f", ":[GWme]") and morphex(\2, ":m", ":[Gfe]")) or (morphex(\3, ":[AQ].*:m", ":[GWfe]") and morphex(\2, ":f", ":[Gme]")))
    and not ( morph(\3, ":p", False) and morph(\2, ":s", False) )
    and not morph(word(-1), ":(?:R|P|Q|Y|[123][sp])", False, False) and not before(r"\b(?:et|ou|de) +$")
    -3>> =switchGender(@)                                                   # Accord erroné : « \2 » et « \3 » ne sont pas accordés en genre.
8735
8736
8737
8738
8739
8740
8741

8742

8743
8744
8745
8746
8747
8748
8749
8847
8848
8849
8850
8851
8852
8853
8854

8855
8856
8857
8858
8859
8860
8861
8862







+
-
+







TEST: Éric n’est pas très {{fatiguée}}.
TEST: Martine est {{marié}}.
TEST: Martine n’est pas {{marié}}.
TEST: Martine est très {{intelligent}}.
TEST: Martine n’est pas très {{intelligent}}.



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

__[i]/ppas(ppas_adj_accord_je_tu)__
    ^ *({w_2}s),? (je?|tu)  @@*,$
    <<- morphex(\1, ":A.*:p", ":(?:G|E|M1|W|s|i)")
    -1>> =suggSing(@)                                                       # Si cet adjectif se réfère au pronom « \2 », l’adjectif devrait être au singulier (et accordé en genre).

TEST: {{Découragés}}, je suis parti.
8792
8793
8794
8795
8796
8797
8798



8799



8800
8801
8802
8803
8804
8805
8806
8905
8906
8907
8908
8909
8910
8911
8912
8913
8914

8915
8916
8917
8918
8919
8920
8921
8922
8923
8924







+
+
+
-
+
+
+







    <<- morph(\1, "V0e", False) and \3 != "rendu" -3>> rendu                # Accord erroné : dans l’expression « se rendre compte », « rendu » est invariable.
    <<- ~2>> _

TEST: Elles se sont {{rendues}} compte
TEST: La puissance publique s’en est-elle rendu compte ?



!!
!!
## Inversion verbe/sujet
!!!! Inversion verbe/sujet                                                                          
!!
!!
__[i]/ppas(ppas_inversion_être_je)__
    (?:s[ou]is|étais|fus(?:sé|)|serais?)-je +({w_2})  @@$
    <<- morphex(\1, ":(?:[123][sp]|Y|[NAQ].*:p)", ":[GWsi]")
    -1>> =suggSing(@)                                                        # Accord avec le sujet « je » : « \1 » devrait être au singulier.
__[i]/ppas(ppas_inversion_être_tu)__
    (?:es|étais|fus(?:ses|)|serai?s)-tu +({w_2})  @@$
    <<- morphex(\1, ":(?:[123][sp]|Y|[NAQ].*:p)", ":[GWsi]")
8845
8846
8847
8848
8849
8850
8851
8852
8853
8854
8855
8856
8857
8858
8859
8860
8861
8862
8863
8864
8865






8866
8867
8868
8869
8870
8871
8872
8963
8964
8965
8966
8967
8968
8969


8970
8971
8972
8973
8974
8975
8976
8977
8978
8979
8980

8981
8982
8983
8984
8985
8986
8987
8988
8989
8990
8991
8992
8993







-
-











-
+
+
+
+
+
+







TEST: Sont-ils vraiment {{aveugle}}
TEST: Ne sommes-nous pas {{aveugle}}
TEST: Est-il question de ceci ou de cela ?
TEST: Est-ce former de futurs travailleurs ou bien des citoyens





## Accord et incohérences 
__[i]/ppas(ppas_sont)__
    sont ({w_2})  @@5
    <<- morphex(\1, ":[NAQ]", ":[QWGBMpi]") and not re.search("(?i)^(?:légion|nombre|cause)$", \1) and not before(r"(?i)\bce que?\b")
    -1>> =suggPlur(@)               # Incohérence : « \1 » est au singulier. Ou vous confondez « sont » et « son », ou l’accord en nombre est incorrect.
    <<- __else__ and morphex(\1, ":V", ":(?:N|A|Q|W|G|3p)") and not before(r"(?i)\bce que?\b")
    -1>> =suggVerbPpas(\1, ":m:p")  # Incohérence : « \1 » n’est pas un participe passé.

TEST: après avoir mis à jour sont {{profile}}.


#### SE CROIRE/CONSIDÉRER/MONTRER/PENSER/RÉVÉLER/SAVOIR/SENTIR/VOIR/VOULOIR + PARTICIPE PASSÉ/ADJ

!!
!!
!!!! Se croire/considérer/montrer/penser/révéler/savoir/sentir/voir/vouloir + participe passé/adj   
!!
!!

__[i]/ppas(ppas_je_me_verbe)__
    je +(?:ne +|)me +((?:s[eauû]|montr|pens|rév|v[oiîe])\w+) +({w_2})  @@w,$
    <<- morph(\1, ">(?:montrer|penser|révéler|savoir|sentir|voir|vouloir) ", False) and morphex(\2, ":[NAQ].*:p", ":[GWYsi]")
    -2>> =suggSing(@)                                                        # Accord avec le sujet « je » : « \2 » devrait être au singulier.

TEST: je me savais {{implacables}} avec eux
8989
8990
8991
8992
8993
8994
8995
8996





8997
8998
8999
9000
9001
9002
9003
9110
9111
9112
9113
9114
9115
9116

9117
9118
9119
9120
9121
9122
9123
9124
9125
9126
9127
9128







-
+
+
+
+
+







TEST: un peu de maquillage et la voilà {{jolis}} comme un cœur.
TEST: les voilà pauvrement {{équipé}} pour un tel périple.
TEST: une chance pour elle alors qu’il n’a pas choisi
TEST: elle se révèle d’ailleurs être une alliée de taille



#### AVOIR + PARTICIPES PASSÉS
!!
!!
!!!! Avoir + participes passés                                                                      
!!
!!

#__[i]/conj__  fait(s|e|es) ({w1}) <<- morph(\2, ":V") and not morph(\2, ":Y")
#   ->> fait \1                      # Le participe passé de faire reste au masculin singulier s’il est suivi par un verbe à l’infinitif.

__[i](p_les_avoir_fait_vinfi)__
    les ({avoir}) +(fait) +(?:[mts](?:e +|’)|)({infi}) @@w,w,$ <<- morph(\1, ">avoir ", False) and morph(\3, ":Y", False) ~2>> _

9120
9121
9122
9123
9124
9125
9126
9127






9128
9129
9130
9131
9132
9133
9134
9245
9246
9247
9248
9249
9250
9251

9252
9253
9254
9255
9256
9257
9258
9259
9260
9261
9262
9263
9264







-
+
+
+
+
+
+







TEST: m’avoir {{terminer}}.
TEST: il m’a {{souffler}} la bonne réponse.
TEST: elle t’en a {{parle}}.
TEST: c’est vous qui m’avez {{convertit}}.
TEST: parce que t’as envie que je le fasse


## COD avant que

!!
!!
!!!! COD précédent que                                                                                  
!!
!!

__[i]/ppas(ppas_det_plur_COD_que_avoir)__
    ([ldmtsc]es) +({w_2}) +que? +(?:j’|tu |ils? |[nv]ous |elles? |on ) *(?:ne +|n’|)({avoir}) +({w_2}[éiust]e?)(?! [mts]’)  @@0,w,w,$
    <<- morph(\3, ":V0a", False)
    and not ((re.search("^(?:décidé|essayé|tenté)$", \4) and after(" +d(?:e |’)")) or (re.search("^réussi$", \4) and after(" +à")))
    and morph(\2, ":[NAQ]", False) and morphex(\4, ":V[0-3]..t.*:Q.*:s", ":[GWpi]")
    and not morph(word(1), ":(?:Y|Oo|D)", False)
9189
9190
9191
9192
9193
9194
9195

9196


9197
9198
9199
9200
9201
9202
9203
9319
9320
9321
9322
9323
9324
9325
9326

9327
9328
9329
9330
9331
9332
9333
9334
9335







+
-
+
+







    -2>> =suggVerbPpas(@, ":m:s")                                                                   # Incohérence avec « \1 » : « \2 » n’est pas un participe passé.
    <<- __also__ and \1 == "a" and \2.endswith("r") and not before(r"(?i)\b(?:[mtn]’|il +|on +|elle +)$")
    -1>> à                                                                                          # Confusion probable : “a” est une conjugaison du verbe avoir. Pour la préposition, écrivez :

TEST: Avoir {{marcher}} toute la journée m’a épuisée.



## du / dû
!!!! du / dû                                                                                        

__[i]/ppas(ppas_avoir_dû_vinfi)__
    ({avoir}) +(due?s?) +(?:[mts]’|)({w_2})  @@0,w,$
    <<- morph(\1, ":V0a", False) and (morph(\3, ":Y") or re.search("^(?:[mtsn]e|[nv]ous|leur|lui)$", \3))
    -2>> dû                                                                                         # Participe passé de devoir : « dû ».

__[i]/ppas(ppas_avoir_pronom_du_vinfi)__
    ({avoir})-(?:t-|)(?:je|tu|ils?|elles?|nous|vous) +(due?s?) +(?:[mts]’|)({w_2})  @@0,w,$
9230
9231
9232
9233
9234
9235
9236


9237




9238
9239
9240
9241
9242
9243
9244
9362
9363
9364
9365
9366
9367
9368
9369
9370

9371
9372
9373
9374
9375
9376
9377
9378
9379
9380
9381







+
+
-
+
+
+
+







TEST: Aurait-il {{du}} {{prendre}} son repas plus tôt ?
TEST: Avez-vous {{signez}} le contrat ?
TEST: Ont-ils {{signer}} le contrat ?
TEST: Ai-je déjà {{signez}} le contrat ?
TEST: A-t-il déjà {{signer}} le contrat ?


!!
!!
# formes interrogatives
!!!! Participes passés avec formes interrogatives                                                   
!!
!!

__[i]/ppas(ppas_avoir_pronom1)__
    (?<![ltm]’)({avoir})[- ](?:je|tu|ils?|elles?|t-(?:ils?|elles?|on)|on) +({w2})  @@0,$
    <<- morph(\1, ":V0a", False) and morphex(\2, ":(?:Y|2p|Q.*:[fp])", ":m:[si]") and \2 != "prise"
    and not morph(word(-1), ">(?:les|[nv]ous|en)|:[NAQ].*:[fp]", False) and not before(r"(?i)\b(?:quel(?:le|)s?|combien) ")
    -2>> =suggMasSing(@)
    # Avec « avoir », il faut un participe passé au masculin singulier.

9311
9312
9313
9314
9315
9316
9317

9318




9319
9320
9321











9322
9323
9324
9325
9326
9327
9328
9329
9330
9331
9332

9333
9334
9335
9336


9337
9338

9339
9340
9341
9342
9343
9344

9345
9346

9347
9348
9349
9350
9351
9352
9353
9354
9355
9356
9357
9358
9448
9449
9450
9451
9452
9453
9454
9455
9456
9457
9458
9459
9460



9461
9462
9463
9464
9465
9466
9467
9468
9469
9470
9471
9472
9473
9474
9475
9476
9477
9478
9479
9480
9481

9482




9483
9484


9485






9486


9487
9488


9489

9490
9491
9492
9493
9494
9495
9496







+

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










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

-
-

-







TEST: se {{considérez}} comme un génie…
TEST: se {{rencontrerons}} demain grands et petits.
TEST: se {{crois}} élu par Dieu…
TEST: avec ceux se trouvant sur leur chemin



!!!! Confusions ou/où                                                                               

__[i]/conf(conf_det_nom_où_pronom)__
    ^ *(?:l(?:es? +|a +|’)|[nv]o(?:s|tre) +|ce(?:t|tte|s|) +|[mts](?:es|on|a) +|des +)({w_2}) +(ou) +(?:je|tu|ils?|elles? +> +\w+|[nv]ous +> +\w+)  @@w,w
    <<- morphex(\1, ":[NAQ]", ":G")
    -2>> où                                                                         # Confusion probable. Pour évoquer un lieu ou un moment, écrivez :|http://fr.wiktionary.org/wiki/o%C3%B9
#
# //////////////////////////////////////// PRÉPROCESSEUR ////////////////////////////////////////
#

TEST: L’hôtel {{ou}} ils sont allés l’été dernier.




!!!
!!!
!!! Processeur avant impératif                                                                      
!!!
!!!

__<i>(p_n_importe_qui_quoi)__       n(’)importe quo?i @@1 <<- ~1>> `
__<i](p_premier_ne_pro_per_obj1)__  ^ *ne l(?:es?|a) l(?:ui|eur) <<- ~>> >
__<i](p_premier_ne_pro_per_obj2)__  ^ *ne (?:[mt]’|l(?:ui|eur) )en <<- ~>> >
__<i](p_premier_ne_pro_per_obj3)__  ^ *ne (?:[mt]e|[nv]ous) (?:les?|la|en) <<- ~>> >
__<i](p_premier_ne_pro_per_obj4)__  ^ *ne +(?:en|l(?:es?|a|’(?:en|y))|[mt](?:e|’(?:en|y))|[nv]ous) <<- ~>> >
__<i>(p_premier_ne_pro_per_obj5)__  ^ *n’(?:en |y |) <<- ~>> >
__<i>(p_premier_ne_pro_per_obj6)__  ^ *ne (?:l’|) <<- ~>> >


#

# //////////////////////////////////////// RÈGLES DE CONTRÔLE ////////////////////////////////////////
#


!!
!!
#### CONFUSIONS

!!!! Impératif !                                                                                    
## ou / où
__[i]/conf(conf_det_nom_où_pronom)__
    ^ *(?:l(?:es? +|a +|’)|[nv]o(?:s|tre) +|ce(?:t|tte|s|) +|[mts](?:es|on|a) +|des +)({w_2}) +(ou) +(?:je|tu|ils?|elles? +> +\w+|[nv]ous +> +\w+)  @@w,w
    <<- morphex(\1, ":[NAQ]", ":G")
    -2>> où                                                                         # Confusion probable. Pour évoquer un lieu ou un moment, écrivez :|http://fr.wiktionary.org/wiki/o%C3%B9

!!
TEST: L’hôtel {{ou}} ils sont allés l’été dernier.

!!

#### IMPÉRATIF !

# Confusions

__[i]/imp(imp_confusion_2e_pers_pluriel)__
    ({w_2}(?:er|ai[st]|ée?s?)) moi  @@0
    <<- 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.
9479
9480
9481
9482
9483
9484
9485


9486




9487
9488
9489
9490
9491
9492
9493
9617
9618
9619
9620
9621
9622
9623
9624
9625

9626
9627
9628
9629
9630
9631
9632
9633
9634
9635
9636







+
+
-
+
+
+
+







TEST: {{Vient}}.
TEST: {{Sert}} le plat.
TEST: {{Attend}} la correction.
TEST: {{Vas}} au diable !
TEST: {{Écartes}} de moi cette coupe.


!!
!!
## Traits d’union manquants
!!!! Impératif: traits d’union manquants                                                            
!!
!!

__[i]/imp(imp_union_moi_toi)__
    (?<![’~])({w_2}) ([mt]oi)(?! même)  @@0,$
    <<- morphex(\1, ":E", ":[GM]")
    ->> \1-\2
    # S’il s’agit d’un impératif, mettez un trait d’union.|http://66.46.185.79/bdl/gabarit_bdl.asp?id=4206

TEST: {{Apportez moi}} ce dictionnaire
9583
9584
9585
9586
9587
9588
9589
9590
9591
9592



9593


9594
9595
9596
9597
9598
9599
9600
9726
9727
9728
9729
9730
9731
9732



9733
9734
9735

9736
9737
9738
9739
9740
9741
9742
9743
9744







-
-
-
+
+
+
-
+
+








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é



#
# //////////////////////////////////////// PRÉPROCESSEUR ////////////////////////////////////////
# Destruction des pronoms qui précèdent un verbe et de l’adverbe de négation “ne”.
!!!
!!!
!!! Processeur: destruction des pronoms qui précèdent un verbe et de l’adverbe de négation “ne”.
#
!!!
!!!

# Brainfuck (ici, prudence !)
__[i](p_pro_per_obj01)__    ne +(?:l(?:ui|eur|a|es?)|[mts]e|[nv]ous) +(?:l(?:a|es?|ui|eur)|en|y) <<- ~>> >
__[i](p_pro_per_obj02)__    ne +(?:[mts](?:e|’(?:en|y))|[nv]ous|l(?:es?|a|ui|eur|’(?:en|y))) <<- ~>> >
__[i](p_pro_per_obj03)__    [mts]e +l(?:a|es?) <<- ~>> >
__[i](p_pro_per_obj04)__    [nmsl]’(?:en|y) <<- ~>> >
__[i](p_pro_per_obj05)__    l(?:a|es?) +(?:lui|en) <<- ~>> >
9630
9631
9632
9633
9634
9635
9636
9637

9638
9639





9640
9641
9642
9643
9644
9645
9646
9774
9775
9776
9777
9778
9779
9780

9781


9782
9783
9784
9785
9786
9787
9788
9789
9790
9791
9792
9793







-
+
-
-
+
+
+
+
+







__[i>(p_pro_per_obj32)__    [mts]e +l’ <<- ~>> >
__[i>(p_pro_per_obj33)__    [nm]’ <<- ~>> >
__[i](p_pro_per_obj34)__    [nmts]e <<- ~>> >
__<s>(p_pro_per_obj35)__    > +> <<- ~>> >
# Fin du Brainfuck


#

# //////////////////////////////////////// RÈGLES DE CONTRÔLE ////////////////////////////////////////
#
!!
!!
!!!! Confusions                                                                                     
!!
!!

#### CONFUSION a / à
__[i]/conf(conf_pronom_verbe_à)__
    ^ *(?:je|tu|ils?|on|elles?) +>? *({w_2}) +(a)  @@w,$
    <<- morph(\1, ":V", False) and \2 != "A"
    -2>> à                                                           # Confusion probable : “a” est une conjugaison du verbe “avoir”. Utilisez la préposition :
__[i]/conf(conf_j_verbe_à)__
9675
9676
9677
9678
9679
9680
9681


9682



9683
9684
9685
9686
9687
9688
9689
9822
9823
9824
9825
9826
9827
9828
9829
9830

9831
9832
9833
9834
9835
9836
9837
9838
9839
9840







+
+
-
+
+
+







TEST: La révolution est crainte.
TEST: Je n’en ai cure.
TEST: Notre communauté vous est redevable.
TEST: l’humour est affaire de culture



!!
!!
#### INFINITIF
!!!! Infinitif                                                                                      
!!
!!

__[i]/infi(infi_comment_où)__
    (?:comment|où) +({w_2}(?:ée?s?|ez))  @@$
    <<- morphex(\1, ":V", ":M") and not (\1.endswith("ez") and after(" +vous"))
    -1>> =suggVerbInfi(@)                                                                           # Le verbe devrait être à l’infinitif.

TEST: Comment {{pensé}} à ces choses sans perdre l’esprit.
9779
9780
9781
9782
9783
9784
9785


9786



9787
9788
9789
9790
9791
9792
9793
9930
9931
9932
9933
9934
9935
9936
9937
9938

9939
9940
9941
9942
9943
9944
9945
9946
9947
9948







+
+
-
+
+
+







    and not morph(word(-1), ":Y|>ce", False, False) and not before("(?i)ce (?:>|qu|que >) $")
    and not before_chk1(r"({w_2}) +> $", ":Y") and not before_chk1(r"^ *>? *(\w[\w-]+)", ":Y")
    -2>> =suggVerbPpas(@)                                                   # Incohérence. Après « être », le verbe ne doit pas être à l’infinitif.

TEST: ils sont {{tromper}} par tous ces hypocrites.


!!
!!
#### CONJUGAISON
!!!! Conjugaison                                                                                    
!!
!!

## 1sg
__[i]/conj(conj_j)__
    j’({w_1})  @@2
    <<- morphex(\1, ":V", ":1s|>(?:en|y)")
    -1>> =suggVerb(@, ":1s")                                 # Conjugaison erronée. Accord avec « je ». Le verbe devrait être à la 1ʳᵉ personne du singulier.
__[i]/conj(conj_je)__
10404
10405
10406
10407
10408
10409
10410
10411





10412
10413
10414
10415
10416
10417
10418
10559
10560
10561
10562
10563
10564
10565

10566
10567
10568
10569
10570
10571
10572
10573
10574
10575
10576
10577







-
+
+
+
+
+







    # 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.



#### INVERSION VERBE SUJET
!!
!!
!!!! Inversion verbe sujet                                                                          
!!
!!

__[i]/conj(conj_que_où_comment_verbe_sujet_sing)__
    (?:que?|où|comment) +({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.

TEST: les possibilités qu’{{offrent}} le chien
10456
10457
10458
10459
10460
10461
10462
10463






10464
10465
10466
10467
10468
10469
10470
10615
10616
10617
10618
10619
10620
10621

10622
10623
10624
10625
10626
10627
10628
10629
10630
10631
10632
10633
10634







-
+
+
+
+
+
+







    <<- __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


#### INTERROGATIVES ?

!!
!!
!!!! Formes interrogatives ?                                                                        
!!
!!

__[i]/inte(inte_union_xxxe_je)__
    (?<![jJ]’)({w_2}[éèe]) je(?! +[nmts]’)  @@0
    <<- morphex(\1, ":V.*:1[sŝś]", ":[GNW]") and not before(r"(?i)\bje +>? *$") and not morph(word(1), ":(?:Oo|X|1s)", False, False)
    ->> =\1[:-1]+"é-je"                                                                             # Forme interrogative ? Mettez un trait d’union.
__[i]/inte(inte_union_xxx_je)__
    (?<![jJ]’)({w_2}[is]) je(?! +[nmts]’)  @@0
10585
10586
10587
10588
10589
10590
10591
10592






10593
10594
10595
10596
10597
10598
10599
10749
10750
10751
10752
10753
10754
10755

10756
10757
10758
10759
10760
10761
10762
10763
10764
10765
10766
10767
10768







-
+
+
+
+
+
+








TEST: {{Ait}}-il arrivé à ses fins ?
TEST: je n’{{avais}} pas parti avec eux.
TEST: Avais-je partie liée avec lui ?
TEST: il {{avait}} parti.


#### CONTRÔLE DES MODES

!!
!!
!!!! Modes verbaux                                                                                  
!!
!!

# conditionnel / futur

__[i]/vmode(vmode_j_aimerais_vinfi)__
    j(?:e +|’)(aimerai|préf[éè]rerai|apprécierai|voudrai|souhaiterai) +({w_1})  @@w,$
    <<- morphex(\2, ":[YX]|>y ", "R") -1>> \1s                                  # Si vous exprimez un souhait, utilisez le conditionnel et non le futur.
__[i>/vmode(vmode_j_aimerais_pronom)__
10699
10700
10701
10702
10703
10704
10705













































10706

10707
10708
10709
10710
10711
10712
10713
10868
10869
10870
10871
10872
10873
10874
10875
10876
10877
10878
10879
10880
10881
10882
10883
10884
10885
10886
10887
10888
10889
10890
10891
10892
10893
10894
10895
10896
10897
10898
10899
10900
10901
10902
10903
10904
10905
10906
10907
10908
10909
10910
10911
10912
10913
10914
10915
10916
10917
10918
10919

10920
10921
10922
10923
10924
10925
10926
10927







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







    # Après « après que », le verbe s’emploie pas au subjonctif mais à l’indicatif, si l’action s’est déroulée de façon certaine.

TEST: Après qu’il {{ait}} allé
TEST: Après que Paul {{ait}} mangé son repas.
TEST: Après qu’il {{soit}} parti, il plut.




!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!! TESTS: Faux positifs potentiels                                                                  
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!

# À TRIER
!!! À trier                                                                                         
TEST: L’homme sur le bateau de Patrick {{viens}} de temps en temps {{mangé}} chez moi.
TEST: Ces marchands {{passe}} leur temps à se quereller.
TEST: Ils jugeront en toute impartialité de ce cas {{délirante}}.
TEST: Ils sont de manière si étonnante et si admirable {{arrivé}} à ce résultat…
TEST: Les tests grand public de Jean-Paul {{montre}} des résultats surprenants.
TEST: Ils ont à plusieurs reprises {{perdus}} leur sang-froid.
TEST: Ces attaques à main armée {{donne}} la chair de poule.
10738
10739
10740
10741
10742
10743
10744
10745
10746
10747
10748
10749

10750
10751
10752
10753

10754
10755
10756
10757
10758
10759
10760
10952
10953
10954
10955
10956
10957
10958





10959
10960
10961
10962

10963
10964
10965
10966
10967
10968
10969
10970







-
-
-
-
-
+



-
+







TODO: Des copains plus vieux que moi qui fumaient.
TODO: Des copains plus vieux que toi qui fumaient.
TODO: André Juin était un sculpteur français.
TODO: La bataille de Monte Cassino révèle le génie militaire du général Juin.
TODO: Les côtes sont dans leur ensemble extrêmement découpées.


#######################################################################################################################
#### FAUX POSITIFS POTENTIELS #########################################################################################
#######################################################################################################################

## Indécidable
!!! 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
!!! Autres tests                                                                                    
TEST: Ça a l’air de t’aller.
TEST: Et je m’en sors.
TEST: C’est à chacun d’entre nous de suivre le modèle d’Amos.
TEST: C’est toi qui voulais y aller.
TEST: je ne suis qu’une joueuse en robe de soirée.
TEST: Tu ne fais qu’aggraver les choses.
TEST: Que veut-il ? Vous parler du boulot.
10807
10808
10809
10810
10811
10812
10813


10814
10815
10816
10817
10818
10819
10820
11017
11018
11019
11020
11021
11022
11023
11024
11025
11026
11027
11028
11029
11030
11031
11032







+
+







TEST: l’herbe que la faux a couchée jaunit vite.
TEST: Il a juste besoin de comprendre pourquoi ce garçon en est arrivé là et pourquoi il s’en est pris à lui.
TEST: Elle prit une pose lascive.
TEST: Cela a trait avec l’histoire complexe d’une nation qui a été prise en étau
TEST: Enfin, les thèmes de la nouvelle réforme ont été longuement débattus.
TEST: Le moral des ménages au plus haut depuis 2007


!!! Tests historiques                                                                               

## Version 0.5.14
TEST: par le léger tissu de rayonne qui les protégeait en ce moment.

## Version 0.5.11
TEST: Un moteur à cylindrée fixe

11581
11582
11583
11584
11585
11586
11587
11588


11589

11590
11591
11592
11593
11594
11595
11596
11793
11794
11795
11796
11797
11798
11799

11800
11801
11802
11803
11804
11805
11806
11807
11808
11809
11810







-
+
+

+







TEST: Le patron du numéro deux allemand a démissionné.
TEST: Je soussigné Pierre Dupont déclare avoir pris connaissance des conditions de ce contrat.
TEST: J’ai mille cent timbres.
TEST: À qui mieux mieux, à qui mieux mieux
TEST: L’est est loin, la gare de l’est aussi.


## EXEMPLES REPRIS DE LANGUAGETOOL

!!! Tests repris de LanguageTool                                                                    
## NOTE : ces textes contiennent parfois des erreurs (corrigées quand repérées par le correcteur)

TEST: Au voisinage du zéro absolu de température.
TEST: La couronne périphérique alterne falaises abruptes et plages.
TEST: Henri VIII rencontre François Ier.
TEST: à ce jour.
TEST: avoir un bel avenir
TEST: faire un dessin
TEST: par exemple
13647
13648
13649
13650
13651
13652
13653
13654
13655

13656
13657
13658
13659
13660
13661
13662
13861
13862
13863
13864
13865
13866
13867


13868
13869
13870
13871
13872
13873
13874
13875







-
-
+







TEST: Le 29 février 2008.
TEST: Le 29 février 2012.
TEST: Le 29 février 2016.
TEST: Le 29 février 2020.
TEST: Le 29-février-2004


# LE HORLA
# Guy de Maupassant
!!! Le Horla, de Guy de Maupassant                                                                  
# Nouvelle intégrale (228 lignes)
# Certains points diffèrent du texte original tiré de Wikisource :
# — les paragraphes sont souvent scindés pour des raisons pratiques.
# — les virgules avant les points de suspension ont été supprimées
# — moyen âge -> Moyen Âge
TEST: Le Horla — Guy de Maupassant
TODO: 8 mai. — Quelle journée admirable ! J’ai passé toute la matinée {{étendu}} sur l’herbe, devant ma maison, sous l’énorme platane qui la couvre, l’abrite et l’ombrage tout entière.
14020
14021
14022
14023
14024
14025
14026
14027
14028

14029
14030
14031
14032
14033
14034
14035
14233
14234
14235
14236
14237
14238
14239


14240
14241
14242
14243
14244
14245
14246
14247







-
-
+







TEST: Pourquoi ce corps transparent, ce corps inconnaissable, ce corps d’Esprit, s’il devait craindre, lui aussi, les maux, les blessures, les infirmités, la destruction prématurée ?
TEST: La destruction prématurée ? toute l’épouvante humaine vient d’elle !
TEST: Après l’homme le Horla. — Après celui qui peut mourir tous les jours, à toutes les heures, à toutes les minutes, par tous les accidents, est venu celui qui ne doit mourir qu’à son jour, à son heure, à sa minute, parce qu’il a touché la limite de son existence !
TEST: Non… non… sans aucun doute, sans aucun doute… il n’est pas mort… Alors… alors… il va donc falloir que je me tue, moi !…
# FIN DU HORLA


# DOUBLE ASSASSINAT DANS LA RUE MORGUE
# d’Edgar Poe
!!! Double assassinat dans la rue morgue, d’Edgar Poe                                               
# Texte tiré de Wikisource
# Les paragraphes ont été découpés pour réduire la longueur des tests.
TEST: DOUBLE ASSASSINAT DANS LA RUE MORGUE — Edgar Poe
TEST: Quelle chanson chantaient les sirènes ? quel nom Achille avait-il pris, quand il se cachait parmi les femmes ? – Questions embarrassantes, il est vrai, mais qui ne sont pas situées au-delà de toute conjecture.
TEST: Sir Thomas Browne.
TODO: Les facultés de l’esprit qu’on définit par le terme {{analytiques}} sont en elles-mêmes fort peu susceptibles d’analyse.
TEST: Nous ne les apprécions que par leurs résultats. Ce que nous en savons, entre autres choses, c’est qu’elles sont pour celui qui les possède à un degré extraordinaire une source de jouissances des plus vives.
14565
14566
14567
14568
14569
14570
14571
14572

14573
14574
14575
14576
14577
14578
14579
14777
14778
14779
14780
14781
14782
14783

14784
14785
14786
14787
14788
14789
14790
14791







-
+







TEST: Néanmoins, qu’il n’ait pas pu débrouiller ce mystère, il n’y a nullement lieu de s’en étonner, et cela est moins singulier qu’il ne le croit ; car, en vérité, notre ami le préfet est un peu trop fin pour être profond. Sa science n’a pas de base.
TEST: Elle est tout en tête et n’a pas de corps, comme les portraits de la déesse Laverna, – ou, si vous aimez mieux, tout en tête et en épaules, comme une morue.
TEST: Mais, après tout, c’est un brave homme. Je l’adore particulièrement pour un merveilleux genre de cant auquel il doit sa réputation de génie.
TEST: Je veux parler de sa manie de nier ce qui est, et d’expliquer ce qui n’est pas[2].
# FIN DU DOUBLE ASSASSINAT DANS LA RUE MORGUE


# VERS DORÉS, de Pythagore
!!! Vers Dorés, de Pythagore                                                                        
# Origine?
TEST: Aux dieux, suivant les lois, rends de justes hommages ;
TEST: Respecte le serment, les héros et les sages ;
TEST: Honore tes parents, tes rois, tes bienfaiteurs ;
TEST: Choisi parmi tes amis les hommes les meilleurs.
TEST: Sois obligeant et doux, sois facile en affaires.
TEST: Ne hais pas ton ami pour des fautes légères ;
14665
14666
14667
14668
14669
14670
14671
14672
14673

14674
14675
14676
14677
14678
14679
14680
14877
14878
14879
14880
14881
14882
14883


14884
14885
14886
14887
14888
14889
14890
14891







-
-
+







TEST: XXX. Mais abstiens-toi des aliments que je t’ai défendus. Apprends à discerner ce qui est nécessaire dans la purification et la délivrance de l’âme. Examine tout ; donne à ta raison la première place et, content de te laisser conduire, abandonne-lui les rênes.
TEST: XXXI. Ainsi, quand tu auras quitté les dépouilles mortelles, tu monteras dans l’air libre ; tu deviendras un dieu immortel et la mort n’aura plus d’empire sur toi.
TEST: Fin des vers dorés de Pythagore
TEST: Note : Chez les Pythagoriciens, la monade ou l’unité représente Dieu-même, parce qu’elle n’est engendrée par aucun nombre, qu’elle les engendre tous, qu’elle est simple et sans aucune composition. La dyade, ou le nombre deux, est l’image de la nature créée, parce qu’elle est le premier produit de l’unité, parce qu’elle est inspirée, parce qu’ayant des parties elle peut se décomposer et se défendre. La monade et la dyade réunies forment le ternaire, et représentent l’immensité de tout ce qui existe, l’être immuable et la matière altérable et changeante. J’ignore par quelle propriété le quaternaire, le nombre quatre, est encore un emblème de la divinité.
# FIN DES VERS DORÉS DE PYTHAGORE


# ÉPÎTRE DU FEU PHILOSOPHIQUE
# De Jean Pontanus
!!! Épître du feu philosophique, de Jean Pontanus                                                   
# Les paragraphes ont été découpés et ne correspondent pas à ceux du texte.
TEST: Épître du Feu Philosophique
TEST: Lettre concernant la pierre dite philosophale
TEST: Jean Pontanus
TEST: in Theatrum Chimicum, 1614, t. III
TEST: « Nous affirmons, au contraire, — et l’on peut avoir foi en notre sincérité, — qu’il sera impossible d’obtenir le moindre succès dans l’Œuvre si l’on a pas une connaissance parfaite de ce qu’est le Vase des Philosophes ni de quelle manière il faut le fabriquer. Pontanus avoue qu’avant de connaître ce vaisseau secret il avait recommencé, sans succès, plus de deux cents fois le même travail, quoiqu’il besognât sur les matières propres et convenables, et selon la méthode régulière. L’artiste doit faire lui-même son vaisseau ; c’est une maxime de l’art. N’entreprenez rien, en conséquence, tant que vous n’aurez pas reçu toute la lumière sur cette coquille de l’œuf qualifiée secretum secretorum chez les maîtres du Moyen Âge. »
TEST: — Fulcanelli, Le Mystère des Cathédrales, p. 204-205