Grammalecte  Check-in [79f51ff0f6]

Overview
Comment:[fr] conversion: regex rules -> graph rules
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | fr | rg
Files: files | file ages | folders
SHA3-256: 79f51ff0f6d98a5fa21f1626ec849480d6f6f087d838927d59e7b4b0328649b8
User & Date: olr on 2018-08-08 20:20:46
Other Links: branch diff | manifest | tags
Context
2018-08-10
11:25
[core][build][fr] merge token tags and sentence tags, immunity rework check-in: b08008a010 user: olr tags: build, core, fr, rg
2018-08-08
20:20
[fr] conversion: regex rules -> graph rules check-in: 79f51ff0f6 user: olr tags: fr, rg
2018-08-07
07:27
[fr] conversion: regex rules -> graph rules check-in: 9b089fd7db user: olr tags: fr, rg
Changes

Modified gc_lang/fr/modules/gce_analyseur.py from [7ecf93be16] to [780ea92640].

105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
        return True
    if 1 < len(s) < 16 and s[0:1].islower() and (not s[1:].islower() or _zUnitNumbers.search(s)):
        return True
    return False


#### Syntagmes

_zEndOfNG1 = re.compile(" *$| +(?:, +|)(?:n(?:’|e |o(?:u?s|tre) )|l(?:’|e(?:urs?|s|) |a )|j(?:’|e )|m(?:’|es? |a |on )|t(?:’|es? |a |u )|s(?:’|es? |a )|c(?:’|e(?:t|tte|s|) )|ç(?:a |’)|ils? |vo(?:u?s|tre) )")
_zEndOfNG2 = re.compile(r" +(\w[\w-]+)")
_zEndOfNG3 = re.compile(r" *, +(\w[\w-]+)")

def isEndOfNG (dDA, s, iOffset):
    "returns True if next word doesn’t belong to a noun group"
    if _zEndOfNG1.match(s):
        return True
    m = _zEndOfNG2.match(s)
    if m and morphex(dDA, (iOffset+m.start(1), m.group(1)), ":[VR]", ":[NAQP]"):
        return True
    m = _zEndOfNG3.match(s)
    if m and not morph(dDA, (iOffset+m.start(1), m.group(1)), ":[NA]", False):
        return True
    return False


_zNextIsNotCOD1 = re.compile(" *,")
_zNextIsNotCOD2 = re.compile(" +(?:[mtsnj](e +|’)|[nv]ous |tu |ils? |elles? )")
_zNextIsNotCOD3 = re.compile(r" +([a-zéèî][\w-]+)")

def isNextNotCOD (dDA, s, iOffset):
    "returns True if next word is not a COD"
    if _zNextIsNotCOD1.match(s) or _zNextIsNotCOD2.match(s):
        return True
    m = _zNextIsNotCOD3.match(s)
    if m and morphex(dDA, (iOffset+m.start(1), m.group(1)), ":[123][sp]", ":[DM]"):
        return True
    return False


_zNextIsVerb1 = re.compile(" +[nmts](?:e |’)")
_zNextIsVerb2 = re.compile(r" +(\w[\w-]+)")

def isNextVerb (dDA, s, iOffset):
    "returns True if next word is a verb"
    if _zNextIsVerb1.match(s):







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







105
106
107
108
109
110
111































112
113
114
115
116
117
118
        return True
    if 1 < len(s) < 16 and s[0:1].islower() and (not s[1:].islower() or _zUnitNumbers.search(s)):
        return True
    return False


#### Syntagmes
































_zNextIsVerb1 = re.compile(" +[nmts](?:e |’)")
_zNextIsVerb2 = re.compile(r" +(\w[\w-]+)")

def isNextVerb (dDA, s, iOffset):
    "returns True if next word is a verb"
    if _zNextIsVerb1.match(s):

Modified gc_lang/fr/rules.grx from [c5dddc3072] to [52284b2f0c].

3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
....
4733
4734
4735
4736
4737
4738
4739



























4740
4741
4742
4743
4744
4745
4746
....
4881
4882
4883
4884
4885
4886
4887

4888
4889
4890
4891
4892
4893
4894
....
7908
7909
7910
7911
7912
7913
7914

7915
7916
7917
7918
7919
7920
7921
....
8771
8772
8773
8774
8775
8776
8777

8778
8779
8780
8781
8782
8783
8784
....
9240
9241
9242
9243
9244
9245
9246

9247
9248
9249
9250
9251
9252
9253
....
9789
9790
9791
9792
9793
9794
9795

















9796
9797
9798
9799
9800
9801
9802
.....
11414
11415
11416
11417
11418
11419
11420




















11421
11422
11423
11424
11425
11426
11427
11428
11429
11430
11431
11432
11433
11434
11435
11436
11437
11438
11439
11440
11441
11442
11443
11444
11445
11446
11447
11448
11449
11450
11451
.....
12577
12578
12579
12580
12581
12582
12583
12584
12585
12586
12587
12588
12589
12590
12591
.....
12593
12594
12595
12596
12597
12598
12599
12600
12601
12602
12603
12604
12605
12606
12607
12608
12609
12610
12611
12612
12613
12614
12615
12616
12617
12618
12619
12620
12621
12622
12623
12624
12625
12626
12627
12628
12629
12630
12631
12632
12633
12634
12635
12636
12637
12638
12639
12640
12641
12642
12643
12644
12645
.....
12669
12670
12671
12672
12673
12674
12675
12676
12677
12678
12679
12680
12681
12682
12683
12684
12685
12686
12687
12688
12689
12690
12691
12692
12693
12694
12695
12696
12697
12698
12699
12700














12701
12702
12703

12704
12705
12706





12707
12708
12709




12710
12711
12712
12713





12714





12715
12716
12717
12718
12719
12720
12721
12722
12723
12724
12725
12726
12727
12728
12729
12730

12731



12732
12733
12734


12735
12736
12737
12738
12739
12740
12741
12742


12743
12744
12745
12746
12747
12748
12749


12750































12751
12752
12753
12754
12755
12756
12757
12758
12759
12760
12761









12762
12763
12764
12765
12766
12767
12768
12769
12770
12771
12772
12773
12774
12775
12776
12777
12778
12779
12780
12781
12782
12783
12784
12785
12786
12787
12788
.....
12797
12798
12799
12800
12801
12802
12803
12804
12805
12806
12807
12808
12809
12810
12811
12812
12813
12814
12815
12816
12817
12818
12819
12820
12821
12822
12823
12824
12825
12826
12827

12828



12829
12830
12831
12832
12833
12834
12835
12836
12837
12838
12839
12840
12841
12842
12843
12844
12845
12846
12847
12848
12849
12850
12851
12852
12853
12854
12855
12856
12857
12858
12859
12860
12861
12862
12863
.....
12865
12866
12867
12868
12869
12870
12871

12872















12873
12874
12875
12876
12877
12878
12879
12880
12881
12882











12883
12884
12885
12886
12887
12888
12889

    [de|d’]  @:¬:[YD]
        <<- =>> exclude(\2, ":V")

    d’ [un|une]  *WORD
        <<- =>> exclude(\3, ":V")

    [des|chaque|quelque|quelques|cet|cette|mon|ma|ta|sa|mes|au|aux|nos|vos]  *WORD
        <<- =>> exclude(\2, ":V")

    de  [la|l’]  @:¬:Y
        <<- =>> exclude(\3, ":V")

    de [>telle|ce|cet|cette|ces|mon|ma|ta|sa|mes|tes|ses|notre|votre|plein|pleine]  *WORD
        <<- =>> exclude(\3, ":V")
................................................................................

# par acquit de conscience
__conf_acquit_acquis__
    par acquis de conscience
        <<- /conf/ -2>> acquit                          # Confusion. On écrit « par acquit de conscience ».
        <<- ~>> *





























# aux dépens
__conf_aux_dépens__
    au [dépend|dépends|dépens]
    aux [dépend|dépends]
        <<- /conf/ ->> aux dépens           # Locution prépositive : « aux dépens de ».|https://fr.wiktionary.org/wiki/aux_d%C3%A9pens_de

................................................................................
TEST: à qui ce texte doit tant, à qui ce texte est dédié


# ce à quoi
__conf_ce_à_quoi_qui__
    se [à|a] [quoi|koi]
    ce a [quoi|koi]

        <<- /conf/ ->> ce à quoi                                # Confusion.|https://fr.wiktionary.org/wiki/ce_%C3%A0_quoi

TEST: c’est {{se a quoi}} il pensait qui le minait.


# ces / ses / c’est
__conf_ces_ses_c_est__
................................................................................
    du [nord|sud] au [nord|sud]
    du tout au tout
    eh bien
    en \d\d+ [ans|années|mois|semaines|jours|heures|minutes|secondes]
    en [aparté|apparence|arrière|avance|avant|cachette|ceci|cela|clair|commun|conséquence|continu|contrepartie|définitive|détail|direct|douce|effet|émoi|filigrane|général|goguette|hâte|majorité|outre|pâmoison|parallèle|partie|particulier|permanence|personne|pratique|prime|privé|principe|priorité|public|réalité|retour|revanche|rien|rogne|route|secret|silence|somme|suspens|théorie|trompe-l’œil|vain|vérité|ville|vitesse]
    en aucun cas
    en aucune [circonstance|façon|manière]

    en bon état
    en bonne [compagnie|posture|voie]
    en bonne et due forme
    en bonne santé ?[physique|mentale|psychique]¿
    en bout de course
    en cas [de|d’] [besoin|doute|urgence]
    en [chacun|chacune] [de|d’] [nous|vous|eux|elles]
................................................................................
    >arc à poulies
    >arme à feu
    >armée de l’air
    >armée terre
    >armer jusqu aux dents
    >arme de [poing|guerre]
    >arme de destruction massive

    >attestation sur l’ honneur
    >attendre de pied ferme
    ayants droit
    >billet de *NUM [>euro|>dollar|>centime|>cent|>livre|>shilling]
    [>bisphénol|>bisphenol] A
    >blanche comme neige
    >blanche comme de la craie
................................................................................

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

__purge_ponctuations__
    ,   ,
    (   )
    [   ]

    <   >
    [-|–|—]  [-|–|—]
        <<- ~>> *

    <start>  ,
        <<- ~2>> *

................................................................................
    ladite  *WORD
        <<- /gn/ morph(\2, ":[NA].*:m", ":[efGW]") -1>> ledit                               # Accord de genre erroné : « \2 » est masculin.
        <<- /gn/ __also__ and hasFemForm(\2) -2>> =suggFemSing(\2, True)                    # Accord de genre erroné : « \1 » est un déterminant féminin.
        <<- /gn/ morph(\2, ":[NA].*:p", ":[siGW]") -2>> =suggFemSing(\2)                    # Accord de nombre erroné : « \2 » devrait être au singulier.

TEST: ladite {{passions}} l’avait conduit à sa perte.



















__gn_un_1m__
    un  *WORD
        <<- /gn/ morph(\2, ":[NA].*:f", ":(?:e|m|G|W|V0|3s|Y)") -1>> une                    # Accord de genre erroné : « \2 » est féminin.
        <<- /gn/ __also__ and hasMasForm(\2) -2>> =suggMasSing(\2, True)                    # Accord de genre erroné : « \1 » est un déterminant masculin.
        <<- /gn/ morph(\2, ":[NA].*:p", ":[siGW]") -2>> =suggMasSing(\2)                    # Accord de nombre erroné : « \2 » devrait être au singulier.

................................................................................
    en >bonnet >difforme
    en >bonne et [du|due|dus|dues] >forme
        <<- ->> en bonne et due forme                                   # Locution “en bonne et due forme” (invariable).|https://fr.wiktionary.org/wiki/en_bonne_et_due_forme

TEST: une raclée {{en bonnes et dues formes}}
TEST: remplir son formulaire en bonne et due forme, c’est le minimum pour espérer un retour positif.






















# en butte à / but / bute
__conf_en_butte_à_au__
    en [>but|>bute]  [à|au|aux]
         <<- /conf/ -2>> butte                                          # Confusion. Écrivez « en butte \3 ».

TEST: Et moi toujours en {{but}} à de nouveaux dangers


# cane / canne (from LanguageTool)
__conf_canne_à_de__
    >cane à [sucre|pêche|selfie]
    >cane [de|d’] [bambou|bois|combat|compagnon|compagnonnage|défense|golf|marche|Noël|ramonage)|>aveugle]
        <<- /conf/ -1>> =\1.replace("ane", "anne")                      # Confusion. La cane est la femelle du canard.|https://fr.wiktionary.org/wiki/cane

    [>alcool|>coup|>sucre|>sirop] de >cane
        <<- /conf/ -3>> canne                                           # Confusion. La cane est la femelle du canard.|https://fr.wiktionary.org/wiki/cane

    [>œuf|>filet] de >canne
        <<- /conf/ -3>> cane                                            # Confusion. La canne est un bâton ou un roseau. Pour la femelle du canard, écrivez “cane”.|https://fr.wiktionary.org/wiki/canne

    [>appuyer|>battre|>frapper|>lever|>marcher] [avec|sur] [les|des|ma|ta|sa|mes|tes|ses|cette|une] >cane
        <<- /conf/ -4>> =\4.replace("ane", "anne")                      # Confusion. La cane est la femelle du canard.|https://fr.wiktionary.org/wiki/cane


    >bec de >canne
    bec-de-canne
    becs-de-cannes
    bec-de-cannes
    becs-de-canne
        <<- /conf/ ->> bec-de-cane|becs-de-cane         # Confusion. Le bec-de-cane se somme ainsi à cause de la ressemblance avec le bec de l’animal.|https://fr.wiktionary.org/wiki/bec-de-cane
................................................................................
        <<- ~3:4>> *

    que l’ on
        <<- ~2>> *


### Simplification des groupes nominaux
__purge_syntagmes_nominaux__
    [aucun|aucune] [de|d’] ?entre¿ [nous|vous|eux|elles]
        <<- ~2:0>> *

    [aucun|aucune] des *WORD [ne|n’]
        <<- ~2:3>> *

    [aucun|aucune] des *WORD *WORD [ne|n’]
................................................................................

    beaucoup de [monde|temps]
        <<- ~2:3>> _

    [chacun|chacune] [de|d’] ?entre¿ [nous|vous|eux|elles]
        <<- ~2:0>> *


    [le|la|l’|les|leur|ton|son|certains|certaines] *WORD *WORD
        <<- morph(\2, ":[NA]", ":(?:[123]p|P|X|G)") and morph(\3, ":[NA]", ":(?:G|[123][sp]|P)") >>>
        <<- morph(\3, ":N", ":A") and morph(\2, ":A", ":N") ~2>> *
        <<- __else__ ~3>> *

    [des|ce|cet|cette|ces|mon|ma|ta|sa|mes|tes|ses|notre|votre|nos|vos|leurs|au|aux] *WORD *WORD
        <<- morph(\3, ":[NA]", ":(?:G|[123][sp]|P)") >>>
        <<- morph(\3, ":N", ":A") and morph(\2, ":A", ":N") ~2>> *
        <<- __else__ ~3>> *

    [de|d’]  [façon|manière]  ?non¿  @:A  et  ?non¿  @:A¬:[GM]
    [de|d’]  [façon|manière]  ?non¿  @:A
        <<- ~>> *

    [de|d’]  @:[NA].*:s¬:Y  <end>
    [de|d’]  @:[NA].*:s¬:Y  ?,¿ [ne|n’|me|m’|te|t’|se|s’|nous|vous|c’|ça|ç’|je|j’|tu|il|elle|on|ils|elles|le|la|l’|les|mon|ma|ta|sa|notre|votre|leur|mes|tes|ses|nos|vos|leurs|ce|cet|cette|ces|quel|quels|quelle|quelles]
    [de|d’]  @:[NA].*:s¬:Y  @:[VR]¬:[NAP]
    [de|d’]  @:[NA].*:s¬:Y  , @¬:[NA]
        <<- ~1:2>> *

    [de|d’]  @:[NA].*:s¬:Y  @:[NA].*:s¬:(?:G|[123][sp]|O)   <end>
    [de|d’]  @:[NA].*:s¬:Y  @:[NA].*:s¬:(?:G|[123][sp]|O)   ?,¿ [ne|n’|me|m’|te|t’|se|s’|nous|vous|c’|ça|ç’|je|j’|tu|il|elle|on|ils|elles|le|la|l’|les|mon|ma|ta|sa|notre|votre|leur|mes|tes|ses|nos|vos|leurs|ce|cet|cette|ces|quel|quels|quelle|quelles]
    [de|d’]  @:[NA].*:s¬:Y  @:[NA].*:s¬:(?:G|[123][sp]|O)   @:[VR]¬:[NAP]
    [de|d’]  @:[NA].*:s¬:Y  @:[NA].*:s¬:(?:G|[123][sp]|O)   , @¬:[NA]
        <<- ~1:3>> *

    en tant que >telle
        <<- ~>> *

    en [plein|pleine] @:[NA]  <end>
    en [plein|pleine] @:[NA]  ?,¿ [ne|n’|me|m’|te|t’|se|s’|nous|vous|c’|ça|ç’|je|j’|tu|il|elle|on|ils|elles|le|la|l’|les|mon|ma|ta|sa|notre|votre|leur|mes|tes|ses|nos|vos|leurs|ce|cet|cette|ces|quel|quels|quelle|quelles]
    en [plein|pleine] @:[NA]  @:[VR]¬:[NAP]
    en [plein|pleine] @:[NA]  , @¬:[NA]
        <<- ~1:3>> *

    fois que
        <<- ~1>> _

    la plupart des *WORD <end>
    la plupart des *WORD ?,¿ [ne|n’|me|m’|te|t’|se|s’|nous|vous|c’|ça|ç’|je|j’|tu|il|elle|on|ils|elles|le|la|l’|les|mon|ma|ta|sa|notre|votre|leur|mes|tes|ses|nos|vos|leurs|ce|cet|cette|ces|quel|quels|quelle|quelles]
    la plupart des *WORD @:[VR]¬:[NAP]
    la plupart des *WORD , @¬:[NA]
        <<- ~3:4>> *

    la plupart des *WORD @:[NA].*:[pi]¬:(?:G|[123][sp]|O) <end>
................................................................................
    [un|une] de [nous|vous]
    [un|une] d’ [eux|elles]
    [un|une] d’ entre [nous|vous|eux|elles]
    [un|une] des [nôtres|vôtres]
        <<- ~2:0>> *


__purge_après_prépositions__
    [à|au|aux|avec|en|lors]  [de|d’]  [la|l’|leur|leurs|ce|cet|cette|ces|mon|ton|son|ma|ta|sa|mes|tes|ses|notre|votre|nos|vos|quelques|certains|certaines]  *WORD  <end>
    [à|au|aux|avec|en|lors]  [de|d’]  [la|l’|leur|leurs|ce|cet|cette|ces|mon|ton|son|ma|ta|sa|mes|tes|ses|notre|votre|nos|vos|quelques|certains|certaines]  *WORD  ?,¿  [ne|n’|me|m’|te|t’|se|s’|nous|vous|c’|ça|ç’|je|j’|tu|il|elle|on|ils|elles|le|la|l’|les|mon|ma|ta|sa|notre|votre|leur|mes|tes|ses|nos|vos|leurs|ce|cet|cette|ces|quel|quels|quelle|quelles]
    [à|au|aux|avec|en|lors]  [de|d’]  [la|l’|leur|leurs|ce|cet|cette|ces|mon|ton|son|ma|ta|sa|mes|tes|ses|notre|votre|nos|vos|quelques|certains|certaines]  *WORD  @:[VR]¬:[NAP]
    [à|au|aux|avec|en|lors]  [de|d’]  [la|l’|leur|leurs|ce|cet|cette|ces|mon|ton|son|ma|ta|sa|mes|tes|ses|notre|votre|nos|vos|quelques|certains|certaines]  *WORD  ,  @¬:[NA]
        <<- ~1:4>> *

    [à|au|aux|avec|en|lors]  [des|du]  *WORD  <end>
    [à|au|aux|avec|en|lors]  [des|du]  *WORD  ?,¿  [ne|n’|me|m’|te|t’|se|s’|nous|vous|c’|ça|ç’|je|j’|tu|il|elle|on|ils|elles|le|la|l’|les|mon|ma|ta|sa|notre|votre|leur|mes|tes|ses|nos|vos|leurs|ce|cet|cette|ces|quel|quels|quelle|quelles]
    [à|au|aux|avec|en|lors]  [des|du]  *WORD  @:[VR]¬:[NAP]
    [à|au|aux|avec|en|lors]  [des|du]  *WORD  , @¬:[NA]
        <<- ~1:3>> *

    [à|avec|sur|sous|selon|contre|chez|dans|envers|par|pour|au|aux]  @:[NAM]¬:[GY]  <end>
    [à|avec|sur|sous|selon|contre|chez|dans|envers|par|pour|au|aux]  @:[NAM]¬:[GY]  ?,¿  [ne|n’|me|m’|te|t’|se|s’|nous|vous|c’|ça|ç’|je|j’|tu|il|elle|on|ils|elles|le|la|l’|les|mon|ma|ta|sa|notre|votre|leur|mes|tes|ses|nos|vos|leurs|ce|cet|cette|ces|quel|quels|quelle|quelles]
    [à|avec|sur|sous|selon|contre|chez|dans|envers|par|pour|au|aux]  @:[NAM]¬:[GY]  @:[VR]¬:[NAP]
    [à|avec|sur|sous|selon|contre|chez|dans|envers|par|pour|au|aux]  @:[NAM]¬:[GY]  , @¬:[NA]
        <<- ~1:2>> *

    [à|avec|sur|sous|selon|contre|chez|dans|envers|par|pour] [le|la|l’|leur|leurs|ce|cet|cette|ces|mon|ton|son|ma|ta|sa|mes|tes|ses|notre|votre|nos|vos|quelques|certains|certaines]  @:[NAM]¬:G  <end>
    [à|avec|sur|sous|selon|contre|chez|dans|envers|par|pour] [le|la|l’|leur|leurs|ce|cet|cette|ces|mon|ton|son|ma|ta|sa|mes|tes|ses|notre|votre|nos|vos|quelques|certains|certaines]  @:[NAM]¬:G  ?,¿  [ne|n’|me|m’|te|t’|se|s’|nous|vous|c’|ça|ç’|je|j’|tu|il|elle|on|ils|elles|le|la|l’|les|mon|ma|ta|sa|notre|votre|leur|mes|tes|ses|nos|vos|leurs|ce|cet|cette|ces|quel|quels|quelle|quelles]
    [à|avec|sur|sous|selon|contre|chez|dans|envers|par|pour] [le|la|l’|leur|leurs|ce|cet|cette|ces|mon|ton|son|ma|ta|sa|mes|tes|ses|notre|votre|nos|vos|quelques|certains|certaines]  @:[NAM]¬:G  @:[VR]¬:[NAP]
    [à|avec|sur|sous|selon|contre|chez|dans|envers|par|pour] [le|la|l’|leur|leurs|ce|cet|cette|ces|mon|ton|son|ma|ta|sa|mes|tes|ses|notre|votre|nos|vos|quelques|certains|certaines]  @:[NAM]¬:G  , @¬:[NA]
        <<- ~1:3>> *















    [de|d’]  @:N¬:[GY]  <end>
    [de|d’]  @:N¬:[GY]  ?,¿  [ne|n’|me|m’|te|t’|se|s’|nous|vous|c’|ça|ç’|je|j’|tu|il|elle|on|ils|elles|le|la|l’|les|mon|ma|ta|sa|notre|votre|leur|mes|tes|ses|nos|vos|leurs|ce|cet|cette|ces|quel|quels|quelle|quelles]
    [de|d’]  @:N¬:[GY]  @:[VR]¬:[NAP]

    [de|d’]  @:N¬:[GY]  , @¬:[NA]
        <<- not value(\2, "|autres|") ~1:2>> *







__purge_autre__
    [<start>|,] nul doute [que|qu’|qu]




        <<- ~2:0>> *

    y compris
        <<- not value(<1, "|j’|n’|tu|") ~>> *













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

# isEndOfNG:
# <end>
# @:[VR]¬:[NAP]
# , @¬:[NA]
# ?,¿ [ne|n’|me|m’|te|t’|se|s’|nous|vous|c’|ça|ç’|je|j’|tu|il|elle|on|ils|elles|le|la|l’|les|mon|ma|ta|sa|notre|votre|leur|mes|tes|ses|nos|vos|leurs|ce|cet|cette|ces|quel|quels|quelle|quelles]


# de +
__[i](p_de_vinfi)__
    d(?:e |’)({infi}) @@$

    <<- morphex(\1, ":V[123]_i", ">(?:devenir|rester|demeurer)/") and isNextNotCOD() ~>> *




__[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_pronom_nom)__
    de (?:ce(?:t|tte|s|)|[mts](?:on|a|es)|[nv](?:otre|os)|leurs) +({w_2})  @@$
    <<- morph(\1, ":[NA]", False) and isEndOfNG() ~>> *
__[i](p_de_la_leur_nom)__
    de l(?:a|eur) +({w_2})  @@$
    <<- morphex(\1, ":[NA]", ":Y") and isEndOfNG() ~>> *



__[s](p_virgule_virgule2)__     , +, <<- ~>> *
__[s](p_première_virgule2)__    ^ *, <<- ~>> *
__[s](p_dernière_virgule2)__    , *$ <<- ~>> *
__[s](p_tiret_tiret2)__         [—–-] +[—–-] <<- ~>> *
__[s](p_parenthèses_vides2)__   [(] +[)] <<- ~>> *
__[s](p_balise_vide2)__         [<] +[>] <<- ~>> *




































TEST: ils vont de manière non conventionnelle {{fêtée}} leur réussite.
TEST: ils vont de manière absurde {{arrivé}} au résultat inverse à leurs espérances
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.
TEST: Notre but n’était pas de devenir célèbres.
TEST: sans qu’on ait à le lui ordonner













!!!! 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 ?
    <<- __else__ and \2.endswith("s") and morphex(\2, ":V1.*:Ip.*:2s", ":(?:[GM]|A)") and not before(r"(?i)\belles +(?:ne +|n’|)$")
    -2>> =suggVerbPpas(\2, ":m:p")                                                                  # Erreur de numérisation ?

__[i]/ocr(ocr_avoir_participes_passés)__
    ({avoir}) +({w_2}es?) @@0,$
    <<- morph(\1, ":V0a", False) >>>
    <<- \2.endswith("e") and morphex(\2, ":V1.*:Ip.*:[13]s", ":[GM]|>envie/")
    -2>> =suggVerbPpas(\2, ":m:s")                                                                  # Erreur de numérisation ?
    <<- __else__ and \2.endswith("s") and morphex(\2, ":V1.*:Ip.*:2s", ":[GM]")
    -2>> =suggVerbPpas(\2, ":m:p")                                                                  # Erreur de numérisation ?

TEST: __ocr__ vous serez {{couche}} en terre.
TEST: __ocr__ nous serons {{presses}} de monter à bord de ce train-ci.
TEST: __ocr__ Elle était toujours persuadée que B. serait {{acquitte}}
TEST: __ocr__ je reconnais que j’ai pas {{traîne}}
TEST: __ocr__ elle est fauchée et a {{emprunte}} de l’argent
TEST: __ocr__ Alors il lui est {{remonte}} dessus
................................................................................
# TEST: __ocr__ vous êtes {{presses}} de monter à bord de ce train-ci.
# Fonctionne avec nous serons, mais pas nous sommes (bug de JavaScript?)



!!!! Confusions                                                                                   !!


## 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 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
TEST: c’en est assez, ça suffit
TEST: tout ça, {{s’en}} est fini.
TEST: {{s’en}} est assez de ces foutaises.
TEST: c’est tellement idiot, {{s’en}} est dérisoire…


## soit / soie / soi
__[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 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                                                                                    !!
!!
!!


















__[i]/infi(infi_faire)__
    (f(?:ai|[iî]|er|on)\w+) +({w_2}(?:ée?s?|ez))  @@0,$
    <<- morph(\1, ">faire/", False) and not before(r"(?i)\b(?:en|[mtsldc]es?|[nv]ous|un) +$") and morphex(\2, ":V", ":M")
        and not (re.search("(?i)^fait$", \1) and \2.endswith("é"))
        and not (re.search("(?i)^faits$", \1) and \2.endswith("és"))
    -2>> =suggVerbInfi(@)                                                                           # Le verbe devrait être à l’infinitif.

TEST: elle fit peu {{mangé}} les enfants
TEST: fait pourtant avéré et corroboré par le même sondage.
TEST: Tu fais {{décoloré}} tes cheveux ?













__[i]/infi(infi_vouloir)__
    (v[oe]u\w+) +({w_2}(?:ée?s?|ez))  @@0,$
    <<- morph(\1, ">vouloir/", False) and not before(r"(?i)\b(?:[mtsldc]es?|[nv]ous|un) +$") and morphex(\2, ":V", ":M")
        and not (re.search("(?i)^vouloir$", \1) and \2.endswith("é"))
        and not (re.search("(?i)^vouloirs$", \1) and \2.endswith("és"))







|







 







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







 







>







 







>







 







>







 







>







 







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







 







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










|












<







 







|







 







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







 







|
|
|
|
|








|
|
|
|


|
|
|
|


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


>
>
>
>
>

<
<
>
>
>
>
|

<
<
>
>
>
>
>

>
>
>
>
>

<
<
<
<
<
|






<
<
<
>
|
>
>
>

<
<
>
>

<
<
<
<
<
<
<
>
>

<
<
<
<
<
<
>
>

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











>
>
>
>
>
>
>
>
>





|
|
|
|
|
|
|

|
|
|
|
|
|
|







 







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

|
<
>
|
>
>
>








|
|
|
|
|












|

|







 







>

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

<
<
<
>
>
>
>
>
>
>
>
>
>
>







3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
....
4733
4734
4735
4736
4737
4738
4739
4740
4741
4742
4743
4744
4745
4746
4747
4748
4749
4750
4751
4752
4753
4754
4755
4756
4757
4758
4759
4760
4761
4762
4763
4764
4765
4766
4767
4768
4769
4770
4771
4772
4773
....
4908
4909
4910
4911
4912
4913
4914
4915
4916
4917
4918
4919
4920
4921
4922
....
7936
7937
7938
7939
7940
7941
7942
7943
7944
7945
7946
7947
7948
7949
7950
....
8800
8801
8802
8803
8804
8805
8806
8807
8808
8809
8810
8811
8812
8813
8814
....
9270
9271
9272
9273
9274
9275
9276
9277
9278
9279
9280
9281
9282
9283
9284
....
9820
9821
9822
9823
9824
9825
9826
9827
9828
9829
9830
9831
9832
9833
9834
9835
9836
9837
9838
9839
9840
9841
9842
9843
9844
9845
9846
9847
9848
9849
9850
.....
11462
11463
11464
11465
11466
11467
11468
11469
11470
11471
11472
11473
11474
11475
11476
11477
11478
11479
11480
11481
11482
11483
11484
11485
11486
11487
11488
11489
11490
11491
11492
11493
11494
11495
11496
11497
11498
11499
11500
11501
11502
11503
11504
11505
11506
11507
11508
11509
11510
11511

11512
11513
11514
11515
11516
11517
11518
.....
12644
12645
12646
12647
12648
12649
12650
12651
12652
12653
12654
12655
12656
12657
12658
.....
12660
12661
12662
12663
12664
12665
12666







































12667
12668
12669
12670
12671
12672
12673
.....
12697
12698
12699
12700
12701
12702
12703
12704
12705
12706
12707
12708
12709
12710
12711
12712
12713
12714
12715
12716
12717
12718
12719
12720
12721
12722
12723
12724
12725
12726
12727
12728
12729
12730
12731
12732
12733
12734
12735
12736
12737
12738
12739
12740
12741
12742
12743
12744

12745
12746
12747
12748
12749
12750
12751
12752
12753
12754


12755
12756
12757
12758
12759
12760


12761
12762
12763
12764
12765
12766
12767
12768
12769
12770
12771
12772





12773
12774
12775
12776
12777
12778
12779



12780
12781
12782
12783
12784
12785


12786
12787
12788







12789
12790
12791






12792
12793
12794
12795
12796
12797
12798
12799
12800
12801
12802
12803
12804
12805
12806
12807
12808
12809
12810
12811
12812
12813
12814
12815
12816
12817
12818
12819
12820
12821
12822
12823
12824
12825
12826
12827
12828
12829
12830
12831
12832
12833
12834
12835
12836
12837
12838
12839
12840
12841
12842
12843
12844
12845
12846
12847
12848
12849
12850
12851
12852
12853
12854
12855
12856
12857
12858
12859
12860
12861
12862
12863
12864
12865
12866
12867
12868
12869
12870
12871
12872
.....
12881
12882
12883
12884
12885
12886
12887





















12888
12889

12890
12891
12892
12893
12894
12895
12896
12897
12898
12899
12900
12901
12902
12903
12904
12905
12906
12907
12908
12909
12910
12911
12912
12913
12914
12915
12916
12917
12918
12919
12920
12921
12922
12923
12924
12925
12926
12927
12928
12929
.....
12931
12932
12933
12934
12935
12936
12937
12938
12939
12940
12941
12942
12943
12944
12945
12946
12947
12948
12949
12950
12951
12952
12953
12954
12955
12956
12957
12958
12959
12960
12961



12962
12963
12964
12965
12966
12967
12968
12969
12970
12971
12972
12973
12974
12975
12976
12977
12978
12979

    [de|d’]  @:¬:[YD]
        <<- =>> exclude(\2, ":V")

    d’ [un|une]  *WORD
        <<- =>> exclude(\3, ":V")

    [des|chaque|quelque|quelques|cet|cette|mon|ma|ta|sa|mes|au|aux|nos|vos|aucun|aucune]  *WORD
        <<- =>> exclude(\2, ":V")

    de  [la|l’]  @:¬:Y
        <<- =>> exclude(\3, ":V")

    de [>telle|ce|cet|cette|ces|mon|ma|ta|sa|mes|tes|ses|notre|votre|plein|pleine]  *WORD
        <<- =>> exclude(\3, ":V")
................................................................................

# par acquit de conscience
__conf_acquit_acquis__
    par acquis de conscience
        <<- /conf/ -2>> acquit                          # Confusion. On écrit « par acquit de conscience ».
        <<- ~>> *

TEST: par {{acquis}} de conscience
TEST: tout ce qu’on fait par acquit de conscience


# âge / age
__conf_âge_age__
    en bas age
        <<- /conf/ -3>> âge                             # L’age est un élément de la charrue. Pour la durée d’existence, écrivez “âge”.

    quel age /VCint
        <<- /conf/ morphVC(\3, ">avoir") -2>> âge       # L’age est un élément de la charrue. Pour la durée d’existence, écrivez “âge”.

    quel [es|est|étais|était|seras|sera|serais|serait] [mon|ton|son] age
        <<- /conf/ -4>> âge                             # L’age est un élément de la charrue. Pour la durée d’existence, écrivez “âge”.

    age [tendre|moyen|avancé]
        <<- /conf/ -1>> âge                             # L’age est un élément de la charrue. Pour la durée d’existence, écrivez “âge”.

    [bel|grand] age
        <<- /conf/ -2>> âge                             # L’age est un élément de la charrue. Pour la durée d’existence, écrivez “âge”.

TEST: des enfants morts en bas {{age}}.
TEST: Quel {{age}} aura-t-il
TEST: quel était ton {{age}} ?
TEST: il est d’un {{age}} avancé.
TEST: c’est le bel {{age}}.


# aux dépens
__conf_aux_dépens__
    au [dépend|dépends|dépens]
    aux [dépend|dépends]
        <<- /conf/ ->> aux dépens           # Locution prépositive : « aux dépens de ».|https://fr.wiktionary.org/wiki/aux_d%C3%A9pens_de

................................................................................
TEST: à qui ce texte doit tant, à qui ce texte est dédié


# ce à quoi
__conf_ce_à_quoi_qui__
    se [à|a] [quoi|koi]
    ce a [quoi|koi]
    ce à koi
        <<- /conf/ ->> ce à quoi                                # Confusion.|https://fr.wiktionary.org/wiki/ce_%C3%A0_quoi

TEST: c’est {{se a quoi}} il pensait qui le minait.


# ces / ses / c’est
__conf_ces_ses_c_est__
................................................................................
    du [nord|sud] au [nord|sud]
    du tout au tout
    eh bien
    en \d\d+ [ans|années|mois|semaines|jours|heures|minutes|secondes]
    en [aparté|apparence|arrière|avance|avant|cachette|ceci|cela|clair|commun|conséquence|continu|contrepartie|définitive|détail|direct|douce|effet|émoi|filigrane|général|goguette|hâte|majorité|outre|pâmoison|parallèle|partie|particulier|permanence|personne|pratique|prime|privé|principe|priorité|public|réalité|retour|revanche|rien|rogne|route|secret|silence|somme|suspens|théorie|trompe-l’œil|vain|vérité|ville|vitesse]
    en aucun cas
    en aucune [circonstance|façon|manière]
    en bas âge
    en bon état
    en bonne [compagnie|posture|voie]
    en bonne et due forme
    en bonne santé ?[physique|mentale|psychique]¿
    en bout de course
    en cas [de|d’] [besoin|doute|urgence]
    en [chacun|chacune] [de|d’] [nous|vous|eux|elles]
................................................................................
    >arc à poulies
    >arme à feu
    >armée de l’air
    >armée terre
    >armer jusqu aux dents
    >arme de [poing|guerre]
    >arme de destruction massive
    >appel au secours
    >attestation sur l’ honneur
    >attendre de pied ferme
    ayants droit
    >billet de *NUM [>euro|>dollar|>centime|>cent|>livre|>shilling]
    [>bisphénol|>bisphenol] A
    >blanche comme neige
    >blanche comme de la craie
................................................................................

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

__purge_ponctuations__
    ,   ,
    (   )
    [   ]
    {   }
    <   >
    [-|–|—]  [-|–|—]
        <<- ~>> *

    <start>  ,
        <<- ~2>> *

................................................................................
    ladite  *WORD
        <<- /gn/ morph(\2, ":[NA].*:m", ":[efGW]") -1>> ledit                               # Accord de genre erroné : « \2 » est masculin.
        <<- /gn/ __also__ and hasFemForm(\2) -2>> =suggFemSing(\2, True)                    # Accord de genre erroné : « \1 » est un déterminant féminin.
        <<- /gn/ morph(\2, ":[NA].*:p", ":[siGW]") -2>> =suggFemSing(\2)                    # Accord de nombre erroné : « \2 » devrait être au singulier.

TEST: ladite {{passions}} l’avait conduit à sa perte.


__gn_aucun_1m__
    aucun  *WORD
        <<- /gn/ morph(\2, ":[NA].*:f", ":[GWme]") -1>> aucune                              # Accord de genre erroné : « \2 » est féminin.
        <<- /gn/ __also__ and hasMasForm(\2) -2>> =suggMasSing(\2, True)                    # Accord de genre erroné : « \1 » est un déterminant masculin.
        <<- /gn/ morph(\2, ":[NA].*:p", ":[siGW]") -2>> =suggMasSing(\2)                    # Accord de nombre erroné : « \2 » devrait être au singulier.

TEST: aucun {{accords}} n’y changera rien.

__gn_aucune_1m__
    aucune  *WORD
        <<- /gn/ morph(\2, ":[NA].*:m", ":[efGW]") -1>> aucun                               # Accord de genre erroné : « \2 » est masculin.
        <<- /gn/ __also__ and hasFemForm(\2) -2>> =suggFemSing(\2, True)                    # Accord de genre erroné : « \1 » est un déterminant féminin.
        <<- /gn/ morph(\2, ":[NA].*:p", ":[siGW]") -2>> =suggFemSing(\2)                    # Accord de nombre erroné : « \2 » devrait être au singulier.

TEST: aucune {{passions}} n’est digne qu’on meurt pour elle.


__gn_un_1m__
    un  *WORD
        <<- /gn/ morph(\2, ":[NA].*:f", ":(?:e|m|G|W|V0|3s|Y)") -1>> une                    # Accord de genre erroné : « \2 » est féminin.
        <<- /gn/ __also__ and hasMasForm(\2) -2>> =suggMasSing(\2, True)                    # Accord de genre erroné : « \1 » est un déterminant masculin.
        <<- /gn/ morph(\2, ":[NA].*:p", ":[siGW]") -2>> =suggMasSing(\2)                    # Accord de nombre erroné : « \2 » devrait être au singulier.

................................................................................
    en >bonnet >difforme
    en >bonne et [du|due|dus|dues] >forme
        <<- ->> en bonne et due forme                                   # Locution “en bonne et due forme” (invariable).|https://fr.wiktionary.org/wiki/en_bonne_et_due_forme

TEST: une raclée {{en bonnes et dues formes}}
TEST: remplir son formulaire en bonne et due forme, c’est le minimum pour espérer un retour positif.


## s’en / c’en
__conf_c_en_être__
    s’ en  [es|est|sera|seras|étais|était] [fini|finie|finis|finit|terminé|terminés|terminée|terminées]
        <<- /conf/ morph(<1, ":C|<start>") or value(<1, "|,|")
        -1:2>> c’en                                         # Confusion probable. « C’en est… » équivaut à « ça, c’est… ».|http://fr.wiktionary.org/wiki/c%E2%80%99en_est_fait_de

    s’ en  [es|est|sera|seras|étais|était] [assez|trop] [<end>|,|de|d’]
        <<- /conf/ -1:2>> c’en                              # Confusion probable. « C’en est… » équivaut à « ça, c’est… ».|http://fr.wiktionary.org/wiki/c%E2%80%99en_est_fait_de

    s’ en  [es|est|sera|seras|étais|était] @:A¬:[GVW]
        <<- /conf/ morph(<1, ":C|<start>") or value(<1, "|,|")
        -1:2>> 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
TEST: c’en est assez, ça suffit
TEST: tout ça, {{s’en}} est fini.
TEST: {{s’en}} est assez de ces foutaises.
TEST: c’est tellement idiot, {{s’en}} est dérisoire…


# en butte à / but / bute
__conf_en_butte_à_au__
    en [>but|>bute]  [à|au|aux]
         <<- /conf/ -2>> butte                                          # Confusion. Écrivez « en butte \3 ».

TEST: Et moi toujours en {{but}} à de nouveaux dangers


# cane / canne (from LanguageTool)
__conf_canne_cane__
    >cane à [sucre|pêche|selfie]
    >cane [de|d’] [bambou|bois|combat|compagnon|compagnonnage|défense|golf|marche|Noël|ramonage)|>aveugle]
        <<- /conf/ -1>> =\1.replace("ane", "anne")                      # Confusion. La cane est la femelle du canard.|https://fr.wiktionary.org/wiki/cane

    [>alcool|>coup|>sucre|>sirop] de >cane
        <<- /conf/ -3>> canne                                           # Confusion. La cane est la femelle du canard.|https://fr.wiktionary.org/wiki/cane

    [>œuf|>filet] de >canne
        <<- /conf/ -3>> cane                                            # Confusion. La canne est un bâton ou un roseau. Pour la femelle du canard, écrivez “cane”.|https://fr.wiktionary.org/wiki/canne

    [>appuyer|>battre|>frapper|>lever|>marcher] [avec|sur] [les|des|ma|ta|sa|mes|tes|ses|cette|une] >cane
        <<- /conf/ -4>> =\4.replace("ane", "anne")                      # Confusion. La cane est la femelle du canard.|https://fr.wiktionary.org/wiki/cane


    >bec de >canne
    bec-de-canne
    becs-de-cannes
    bec-de-cannes
    becs-de-canne
        <<- /conf/ ->> bec-de-cane|becs-de-cane         # Confusion. Le bec-de-cane se somme ainsi à cause de la ressemblance avec le bec de l’animal.|https://fr.wiktionary.org/wiki/bec-de-cane
................................................................................
        <<- ~3:4>> *

    que l’ on
        <<- ~2>> *


### Simplification des groupes nominaux
__purge_pronoms__
    [aucun|aucune] [de|d’] ?entre¿ [nous|vous|eux|elles]
        <<- ~2:0>> *

    [aucun|aucune] des *WORD [ne|n’]
        <<- ~2:3>> *

    [aucun|aucune] des *WORD *WORD [ne|n’]
................................................................................

    beaucoup de [monde|temps]
        <<- ~2:3>> _

    [chacun|chacune] [de|d’] ?entre¿ [nous|vous|eux|elles]
        <<- ~2:0>> *








































    la plupart des *WORD <end>
    la plupart des *WORD ?,¿ [ne|n’|me|m’|te|t’|se|s’|nous|vous|c’|ça|ç’|je|j’|tu|il|elle|on|ils|elles|le|la|l’|les|mon|ma|ta|sa|notre|votre|leur|mes|tes|ses|nos|vos|leurs|ce|cet|cette|ces|quel|quels|quelle|quelles]
    la plupart des *WORD @:[VR]¬:[NAP]
    la plupart des *WORD , @¬:[NA]
        <<- ~3:4>> *

    la plupart des *WORD @:[NA].*:[pi]¬:(?:G|[123][sp]|O) <end>
................................................................................
    [un|une] de [nous|vous]
    [un|une] d’ [eux|elles]
    [un|une] d’ entre [nous|vous|eux|elles]
    [un|une] des [nôtres|vôtres]
        <<- ~2:0>> *


__purge_syntagmes_nominaux__
    [à|au|aux|avec|en|lors]  [de|d’]  [un|une|la|l’|leur|leurs|ce|cet|cette|ces|mon|ton|son|ma|ta|sa|mes|tes|ses|notre|votre|nos|vos|quelques|certains|certaines]  *WORD  <end>
    [à|au|aux|avec|en|lors]  [de|d’]  [un|une|la|l’|leur|leurs|ce|cet|cette|ces|mon|ton|son|ma|ta|sa|mes|tes|ses|notre|votre|nos|vos|quelques|certains|certaines]  *WORD  ?,¿  [ne|n’|me|m’|te|t’|se|s’|nous|vous|c’|ça|ç’|je|j’|tu|il|elle|on|ils|elles|le|la|l’|les|mon|ma|ta|sa|notre|votre|leur|mes|tes|ses|nos|vos|leurs|ce|cet|cette|ces|quel|quels|quelle|quelles]
    [à|au|aux|avec|en|lors]  [de|d’]  [un|une|la|l’|leur|leurs|ce|cet|cette|ces|mon|ton|son|ma|ta|sa|mes|tes|ses|notre|votre|nos|vos|quelques|certains|certaines]  *WORD  @:[VR]¬:[NAP]
    [à|au|aux|avec|en|lors]  [de|d’]  [un|une|la|l’|leur|leurs|ce|cet|cette|ces|mon|ton|son|ma|ta|sa|mes|tes|ses|notre|votre|nos|vos|quelques|certains|certaines]  *WORD  ,  @¬:[NA]
        <<- ~1:4>> *

    [à|au|aux|avec|en|lors]  [des|du]  *WORD  <end>
    [à|au|aux|avec|en|lors]  [des|du]  *WORD  ?,¿  [ne|n’|me|m’|te|t’|se|s’|nous|vous|c’|ça|ç’|je|j’|tu|il|elle|on|ils|elles|le|la|l’|les|mon|ma|ta|sa|notre|votre|leur|mes|tes|ses|nos|vos|leurs|ce|cet|cette|ces|quel|quels|quelle|quelles]
    [à|au|aux|avec|en|lors]  [des|du]  *WORD  @:[VR]¬:[NAP]
    [à|au|aux|avec|en|lors]  [des|du]  *WORD  , @¬:[NA]
        <<- ~1:3>> *

    [à|avec|chez|contre|dans|envers|par|pour|selon|sous|sur|au|aux]  @:[NAM]¬:[GY]  <end>
    [à|avec|chez|contre|dans|envers|par|pour|selon|sous|sur|au|aux]  @:[NAM]¬:[GY]  ?,¿  [ne|n’|me|m’|te|t’|se|s’|nous|vous|c’|ça|ç’|je|j’|tu|il|elle|on|ils|elles|le|la|l’|les|mon|ma|ta|sa|notre|votre|leur|mes|tes|ses|nos|vos|leurs|ce|cet|cette|ces|quel|quels|quelle|quelles]
    [à|avec|chez|contre|dans|envers|par|pour|selon|sous|sur|au|aux]  @:[NAM]¬:[GY]  @:[VR]¬:[NAP]
    [à|avec|chez|contre|dans|envers|par|pour|selon|sous|sur|au|aux]  @:[NAM]¬:[GY]  , @¬:[NA]
        <<- ~1:2>> *

    [à|avec|chez|contre|dans|envers|par|pour|selon|sous|sur] [un|une|le|la|l’|les|leur|leurs|ce|cet|cette|ces|mon|ton|son|ma|ta|sa|mes|tes|ses|notre|votre|nos|vos|quelques|certains|certaines]  @:[NAM]¬:G  <end>
    [à|avec|chez|contre|dans|envers|par|pour|selon|sous|sur] [un|une|le|la|l’|les|leur|leurs|ce|cet|cette|ces|mon|ton|son|ma|ta|sa|mes|tes|ses|notre|votre|nos|vos|quelques|certains|certaines]  @:[NAM]¬:G  ?,¿  [ne|n’|me|m’|te|t’|se|s’|nous|vous|c’|ça|ç’|je|j’|tu|il|elle|on|ils|elles|le|la|l’|les|mon|ma|ta|sa|notre|votre|leur|mes|tes|ses|nos|vos|leurs|ce|cet|cette|ces|quel|quels|quelle|quelles]
    [à|avec|chez|contre|dans|envers|par|pour|selon|sous|sur] [un|une|le|la|l’|les|leur|leurs|ce|cet|cette|ces|mon|ton|son|ma|ta|sa|mes|tes|ses|notre|votre|nos|vos|quelques|certains|certaines]  @:[NAM]¬:G  @:[VR]¬:[NAP]
    [à|avec|chez|contre|dans|envers|par|pour|selon|sous|sur] [un|une|le|la|l’|les|leur|leurs|ce|cet|cette|ces|mon|ton|son|ma|ta|sa|mes|tes|ses|notre|votre|nos|vos|quelques|certains|certaines]  @:[NAM]¬:G  , @¬:[NA]
        <<- ~1:3>> *

    [le|la|l’|les|leur|ton|son|certains|certaines] *WORD *WORD
        <<- morph(\2, ":[NA]", ":(?:[123]p|P|X|G)") and morph(\3, ":[NA]", ":(?:G|[123][sp]|P)") >>>
        <<- morph(\3, ":N", ":A") and morph(\2, ":A", ":N") ~2>> *
        <<- __else__ ~3>> *

    [des|ce|cet|cette|ces|mon|ma|ta|sa|mes|tes|ses|notre|votre|nos|vos|leurs|au|aux] *WORD *WORD
        <<- morph(\3, ":[NA]", ":(?:G|[123][sp]|P)") >>>
        <<- morph(\3, ":N", ":A") and morph(\2, ":A", ":N") ~2>> *
        <<- __else__ ~3>> *

    [de|d’]  [façon|manière]  ?non¿  @:A  et  ?non¿  @:A¬:[GM]
    [de|d’]  [façon|manière]  ?non¿  @:A
        <<- ~>> *

    [de|d’]  @:[NA].*:s¬:[YG]  <end>
    [de|d’]  @:[NA].*:s¬:[YG]  ?,¿ [ne|n’|me|m’|te|t’|se|s’|nous|vous|c’|ça|ç’|je|j’|tu|il|elle|on|ils|elles|le|la|l’|les|mon|ma|ta|sa|notre|votre|leur|mes|tes|ses|nos|vos|leurs|ce|cet|cette|ces|quel|quels|quelle|quelles]

    [de|d’]  @:[NA].*:s¬:[YG]  @:[VR]¬:[NAP]
    [de|d’]  @:[NA].*:s¬:[YG]  , @¬:[NA]
        <<- not value(\2, "|autres|") ~1:2>> *

    [de|d’]  @:[NA].*:s¬:[YG]  @:[NA].*:s¬:(?:G|[123][sp]|O)   <end>
    [de|d’]  @:[NA].*:s¬:[YG]  @:[NA].*:s¬:(?:G|[123][sp]|O)   ?,¿ [ne|n’|me|m’|te|t’|se|s’|nous|vous|c’|ça|ç’|je|j’|tu|il|elle|on|ils|elles|le|la|l’|les|mon|ma|ta|sa|notre|votre|leur|mes|tes|ses|nos|vos|leurs|ce|cet|cette|ces|quel|quels|quelle|quelles]
    [de|d’]  @:[NA].*:s¬:[YG]  @:[NA].*:s¬:(?:G|[123][sp]|O)   @:[VR]¬:[NAP]
    [de|d’]  @:[NA].*:s¬:[YG]  @:[NA].*:s¬:(?:G|[123][sp]|O)   , @¬:[NA]
        <<- ~1:3>> *



    [de|d’]  [un|une|ce|cet|cette|ces|mon|ton|son|ma|ta|sa|mes|tes|ses|notre|votre|nos|vos|leurs]  @:[NA]  <end>
    [de|d’]  [un|une|ce|cet|cette|ces|mon|ton|son|ma|ta|sa|mes|tes|ses|notre|votre|nos|vos|leurs]  @:[NA]  ?,¿ [ne|n’|me|m’|te|t’|se|s’|nous|vous|c’|ça|ç’|je|j’|tu|il|elle|on|ils|elles|le|la|l’|les|mon|ma|ta|sa|notre|votre|leur|mes|tes|ses|nos|vos|leurs|ce|cet|cette|ces|quel|quels|quelle|quelles]
    [de|d’]  [un|une|ce|cet|cette|ces|mon|ton|son|ma|ta|sa|mes|tes|ses|notre|votre|nos|vos|leurs]  @:[NA]  @:[VR]¬:[NAP]
    [de|d’]  [un|une|ce|cet|cette|ces|mon|ton|son|ma|ta|sa|mes|tes|ses|notre|votre|nos|vos|leurs]  @:[NA]  , @¬:[NA]
        <<- ~1:3>> *



    de  [la|leur]  @:[NA]¬:Y  <end>
    de  [la|leur]  @:[NA]¬:Y  ?,¿ [ne|n’|me|m’|te|t’|se|s’|nous|vous|c’|ça|ç’|je|j’|tu|il|elle|on|ils|elles|le|la|l’|les|mon|ma|ta|sa|notre|votre|leur|mes|tes|ses|nos|vos|leurs|ce|cet|cette|ces|quel|quels|quelle|quelles]
    de  [la|leur]  @:[NA]¬:Y  @:[VR]¬:[NAP]
    de  [la|leur]  @:[NA]¬:Y  , @¬:[NA]
        <<- ~1:3>> *

    en [plein|pleine] @:[NA]  <end>
    en [plein|pleine] @:[NA]  ?,¿ [ne|n’|me|m’|te|t’|se|s’|nous|vous|c’|ça|ç’|je|j’|tu|il|elle|on|ils|elles|le|la|l’|les|mon|ma|ta|sa|notre|votre|leur|mes|tes|ses|nos|vos|leurs|ce|cet|cette|ces|quel|quels|quelle|quelles]
    en [plein|pleine] @:[NA]  @:[VR]¬:[NAP]
    en [plein|pleine] @:[NA]  , @¬:[NA]
        <<- ~1:3>> *






#### isEndOfNG ####
# <end>
# @:[VR]¬:[NAP]
# , @¬:[NA]
# ?,¿ [ne|n’|me|m’|te|t’|se|s’|nous|vous|c’|ça|ç’|je|j’|tu|il|elle|on|ils|elles|le|la|l’|les|mon|ma|ta|sa|notre|votre|leur|mes|tes|ses|nos|vos|leurs|ce|cet|cette|ces|quel|quels|quelle|quelles]





__purge_autre__
    [de|d’]  @:V[123]_i.*:Y¬>(?:devenir|rester|demeurer)/  ,
    [de|d’]  @:V[123]_i.*:Y¬>(?:devenir|rester|demeurer)/  [je|j’|tu|il|elle|on|ç’|c’|nous|vous|ils|elles|ne|n’|me|m’|te|t’|se|s’]
    [de|d’]  @:V[123]_i.*:Y¬>(?:devenir|rester|demeurer)/  @:[123][sp]¬:[DM]
        <<- ~1:2>> *



    en tant que >telle
        <<- ~>> *








    fois que
        <<- ~1>> _







    [<start>|,] nul doute [que|qu’|qu]
        <<- ~2:0>> *

    y compris
        <<- not value(<1, "|j’|n’|tu|il|on|") ~>> *

    [me|te|se|nous|vous]  >douter  [que|qu’|qu]
        <<- /3>> no_subj


@@@@
@@@@
@@@@
@@@@
@@@@GRAPH: purge_ponctuations2                                                                     _
@@@@
@@@@
@@@@
@@@@

__purge_ponctuations2__
    ,   ,
    (   )
    [   ]
    {   }
    <   >
    [-|–|—]  [-|–|—]
        <<- ~>> *

    <start>  ,
        <<- ~2>> *

    ,  <end>
        <<- ~1>> *


TEST: ils vont de manière non conventionnelle {{fêtée}} leur réussite.
TEST: ils vont de manière absurde {{arrivé}} au résultat inverse à leurs espérances
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.
TEST: Notre but n’était pas de devenir célèbres.
TEST: sans qu’on ait à le lui ordonner


@@@@
@@@@
@@@@
@@@@
@@@@GRAPH: verbes1                                                                                 _
@@@@
@@@@
@@@@
@@@@


!!!! OCR                                                                                          !!

# Participes passés
__ocr_être_participe_passé__
    >être  ~es?$
        <<- /ocr/ not value(\1, "|êtres|") >>>
        <<- /ocr/ \2.endswith("e") and morph(\2, ":V1.*:Ip.*:[13]s", ":[GMA]") and not before(r"(?i)\belle +(?:ne +|n’|)$")
        -2>> =suggVerbPpas(\2, ":m:s")                                                              # Erreur de numérisation ?
        <<- /ocr/ __else__ and \2.endswith("s") and morph(\2, ":V1.*:Ip.*:2s", ":[GMA]") and not before(r"(?i)\belles +(?:ne +|n’|)$")
        -2>> =suggVerbPpas(\2, ":m:p")                                                              # Erreur de numérisation ?

__ocr_avoir_participe_passé__
    >avoir  ~es?$
        <<- /ocr/ not value(\1, "|avoirs|") >>>
        <<- /ocr/ \2.endswith("e") and morph(\2, ":V1.*:Ip.*:[13]s", ":[GM]|>envie/")
        -2>> =suggVerbPpas(\2, ":m:s")                                                              # Erreur de numérisation ?
        <<- /ocr/ __else__ and \2.endswith("s") and morph(\2, ":V1.*:Ip.*:2s", ":[GM]")
        -2>> =suggVerbPpas(\2, ":m:p")                                                              # Erreur de numérisation ?

TEST: __ocr__ vous serez {{couche}} en terre.
TEST: __ocr__ nous serons {{presses}} de monter à bord de ce train-ci.
TEST: __ocr__ Elle était toujours persuadée que B. serait {{acquitte}}
TEST: __ocr__ je reconnais que j’ai pas {{traîne}}
TEST: __ocr__ elle est fauchée et a {{emprunte}} de l’argent
TEST: __ocr__ Alors il lui est {{remonte}} dessus
................................................................................
# TEST: __ocr__ vous êtes {{presses}} de monter à bord de ce train-ci.
# Fonctionne avec nous serons, mais pas nous sommes (bug de JavaScript?)



!!!! Confusions                                                                                   !!






















## soit / soie / soi
__conf_aller_de_soi__

    >aller de [sois|>soie]
        <<- /conf/ -3>> soi                                 # Confusion.|https://fr.wiktionary.org/wiki/aller_de_soi

    >aller de soit
        <<- /conf/ not after(" soit ") -3>> soi             # Confusion.|https://fr.wiktionary.org/wiki/aller_de_soi

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



!!!! Adverbes après verbe                                                                         !!

# fort
__sgpl_verbe_fort__
    forts
        <<- morph(<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(>1, ":A.*:[me]:[pi]")
        ->> 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
__sgpl_verbe_bien__
    biens
        <<- morph(<1, ":V", ":D.*:p|:A.*:p") ->> 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                                                                                    !!
!!
!!

#### devoir / faire / falloir / pouvoir / savoir / vouloir

__infi_faire_verbe__
    >faire  ~(?:ée?s?|ez)$
        <<- not value(<1, "|en|") and morph(\1, ":V") and morph(\2, ":V", ":[MG]")
        -2>> =suggVerbInfi(\2)                                  # Après le verbe “faire”, ce verbe devrait être à l’infinitif.

TEST: elle fit peu {{mangé}} les enfants
TEST: Tu fais {{décoloré}} tes cheveux ?
TEST: quelqu’un fait {{passé}} ces gens en secret.
TEST: il le fait {{pensé}} à son avenir.
TEST: ce sont des faits constestés.
TEST: c’est un fait reconnu.
TEST: fait pourtant avéré et corroboré par le même sondage.
TEST: ce fait rapporté par des témoins au-delà de tout soupçon n’est pas contestable.


#__[i]/infi(infi_faire)__
#    (f(?:ai|[iî]|er|on)\w+) +({w_2}(?:ée?s?|ez))  @@0,$
#    <<- morph(\1, ">faire/", False) and not before(r"(?i)\b(?:en|[mtsldc]es?|[nv]ous|un) +$") and morphex(\2, ":V", ":M")
#        and not (re.search("(?i)^fait$", \1) and \2.endswith("é"))
#        and not (re.search("(?i)^faits$", \1) and \2.endswith("és"))
#    -2>> =suggVerbInfi(@)                                                                           # Le verbe devrait être à l’infinitif.






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


__[i]/infi(infi_vouloir)__
    (v[oe]u\w+) +({w_2}(?:ée?s?|ez))  @@0,$
    <<- morph(\1, ">vouloir/", False) and not before(r"(?i)\b(?:[mtsldc]es?|[nv]ous|un) +$") and morphex(\2, ":V", ":M")
        and not (re.search("(?i)^vouloir$", \1) and \2.endswith("é"))
        and not (re.search("(?i)^vouloirs$", \1) and \2.endswith("és"))