Grammalecte  Check-in [8a4cad3f05]

Overview
Comment:[fr] suggestion des graphies similaires mieux contrôlée
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk | fr
Files: files | file ages | folders
SHA3-256: 8a4cad3f05d73ec222d6a8853529c0183f8e53ac8a141dc66a2600ba70afdc0b
User & Date: olr on 2017-09-25 10:04:49
Other Links: manifest | tags
Context
2017-09-26
08:25
[fx] WebExt: adaptation to Chrome (manifest.json) check-in: 4048828d5e user: olr tags: fx, trunk
2017-09-25
10:04
[fr] suggestion des graphies similaires mieux contrôlée check-in: 8a4cad3f05 user: olr tags: fr, trunk
2017-09-22
09:44
[fr] phonet_simil: remord remords check-in: 82b92a6d17 user: olr tags: fr, trunk
Changes

Modified gc_lang/fr/modules/conj.py from [ec8e754549] to [99ba236032].

51
52
53
54
55
56
57
58
59
60
61
62
63
64

65
66
67
68
69
70
71
..
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
def getVtyp (sVerb):
    "returns raw informations about sVerb"
    if sVerb not in _dVerb:
        return None
    return _lVtyp[_dVerb[sVerb][0]]


def getSimil (sWord, sMorph, sFilter=None):
    if ":V" not in sMorph:
        return set()
    sInfi = sMorph[1:sMorph.find(" ")]
    tTags = _getTags(sInfi)
    aSugg = set()
    if ":Q" in sMorph or ":Y" in sMorph:

        # we suggest conjugated forms
        if ":V1" in sMorph:
            aSugg.add(sInfi)
            aSugg.add(_getConjWithTags(sInfi, tTags, ":Ip", ":3s"))
            aSugg.add(_getConjWithTags(sInfi, tTags, ":Ip", ":2p"))
            aSugg.add(_getConjWithTags(sInfi, tTags, ":Iq", ":1s"))
            aSugg.add(_getConjWithTags(sInfi, tTags, ":Iq", ":3s"))
................................................................................
        aSugg.add(_getConjWithTags(sInfi, tTags, ":PQ", ":Q2"))
        aSugg.add(_getConjWithTags(sInfi, tTags, ":PQ", ":Q3"))
        aSugg.add(_getConjWithTags(sInfi, tTags, ":PQ", ":Q4"))
        aSugg.discard("")
        # if there is only one past participle (epi inv), unreliable.
        if len(aSugg) == 1:
            aSugg.clear()
        if ":V1" in sMorph:
            aSugg.add(sInfi)
    return aSugg


def getConjSimilInfiV1 (sInfi):
    if sInfi not in _dVerb:
        return set()
    tTags = _getTags(sInfi)







|





|
>







 







<
<







51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
..
92
93
94
95
96
97
98


99
100
101
102
103
104
105
def getVtyp (sVerb):
    "returns raw informations about sVerb"
    if sVerb not in _dVerb:
        return None
    return _lVtyp[_dVerb[sVerb][0]]


def getSimil (sWord, sMorph, bSubst=False):
    if ":V" not in sMorph:
        return set()
    sInfi = sMorph[1:sMorph.find(" ")]
    tTags = _getTags(sInfi)
    aSugg = set()
    #if ":Q" in sMorph or ":Y" in sMorph:
    if not bSubst:
        # we suggest conjugated forms
        if ":V1" in sMorph:
            aSugg.add(sInfi)
            aSugg.add(_getConjWithTags(sInfi, tTags, ":Ip", ":3s"))
            aSugg.add(_getConjWithTags(sInfi, tTags, ":Ip", ":2p"))
            aSugg.add(_getConjWithTags(sInfi, tTags, ":Iq", ":1s"))
            aSugg.add(_getConjWithTags(sInfi, tTags, ":Iq", ":3s"))
................................................................................
        aSugg.add(_getConjWithTags(sInfi, tTags, ":PQ", ":Q2"))
        aSugg.add(_getConjWithTags(sInfi, tTags, ":PQ", ":Q3"))
        aSugg.add(_getConjWithTags(sInfi, tTags, ":PQ", ":Q4"))
        aSugg.discard("")
        # if there is only one past participle (epi inv), unreliable.
        if len(aSugg) == 1:
            aSugg.clear()


    return aSugg


def getConjSimilInfiV1 (sInfi):
    if sInfi not in _dVerb:
        return set()
    tTags = _getTags(sInfi)

Modified gc_lang/fr/modules/gce_suggestions.py from [e839f7efe5] to [37d0c398ac].

369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
    return ""


def hasSimil (sWord, sPattern=None):
    return phonet.hasSimil(sWord, sPattern)


def suggSimil (sWord, sPattern=None):
    "return list of words phonetically similar to sWord and whom POS is matching sPattern"
    # we don’t check if word exists in _dAnalyses, for it is assumed it has been done before
    aSugg = phonet.selectSimil(sWord, sPattern)
    for sMorph in _dAnalyses.get(sWord, []):
        for e in conj.getSimil(sWord, sMorph, sPattern):
            aSugg.add(e)
        #aSugg = aSugg.union(conj.getSimil(sWord, sMorph))
    if aSugg:
        return "|".join(aSugg)
    return ""


def suggCeOrCet (sWord):
    if re.match("(?i)[aeéèêiouyâîï]", sWord):







|




|
|
<







369
370
371
372
373
374
375
376
377
378
379
380
381
382

383
384
385
386
387
388
389
    return ""


def hasSimil (sWord, sPattern=None):
    return phonet.hasSimil(sWord, sPattern)


def suggSimil (sWord, sPattern=None, bSubst=False):
    "return list of words phonetically similar to sWord and whom POS is matching sPattern"
    # we don’t check if word exists in _dAnalyses, for it is assumed it has been done before
    aSugg = phonet.selectSimil(sWord, sPattern)
    for sMorph in _dAnalyses.get(sWord, []):
        aSugg.update(conj.getSimil(sWord, sMorph, bSubst))
        break

    if aSugg:
        return "|".join(aSugg)
    return ""


def suggCeOrCet (sWord):
    if re.match("(?i)[aeéèêiouyâîï]", sWord):

Modified gc_lang/fr/modules/phonet.py from [d03956eafb] to [cc107e0763].

35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
        sWord = sWord.lower()
        if sWord in _dWord:
            return _lSet[_dWord[sWord]]
    return []


def selectSimil (sWord, sPattern):
    "return list of words phonetically similar to sWord and whom POS is matching sPattern"
    if not sPattern:
        return set(getSimil(sWord))
    aSelect = set()
    for sSimil in getSimil(sWord):
        for sMorph in _dMorph.get(sSimil, []):
            if re.search(sPattern, sMorph):
                aSelect.add(sSimil)
    return aSelect







|








35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
        sWord = sWord.lower()
        if sWord in _dWord:
            return _lSet[_dWord[sWord]]
    return []


def selectSimil (sWord, sPattern):
    "return a set of words phonetically similar to sWord and whom POS is matching sPattern"
    if not sPattern:
        return set(getSimil(sWord))
    aSelect = set()
    for sSimil in getSimil(sWord):
        for sMorph in _dMorph.get(sSimil, []):
            if re.search(sPattern, sMorph):
                aSelect.add(sSimil)
    return aSelect

Modified gc_lang/fr/rules.grx from [27c994bd63] to [b1937a9818].

2501
2502
2503
2504
2505
2506
2507
2508
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
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
....
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
....
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
....
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
....
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
....
4043
4044
4045
4046
4047
4048
4049
4050
4051
4052
4053
4054
4055
4056
4057
4058
4059
4060
4061
4062
4063
4064
4065
4066
4067
4068
4069
4070
4071
4072
4073
4074
4075
4076
4077
4078
4079
4080
4081
4082
4083
4084
4085
4086
4087
4088
4089
4090
....
5307
5308
5309
5310
5311
5312
5313
5314
5315
5316
5317
5318
5319
5320
5321
.....
11460
11461
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
11519
11520
11521
11522
11523
11524
11525
11526
11527
11528
11529
11530
11531
11532
11533
11534
11535
11536
11537
11538
11539
11540
11541
11542

TEST: Ce que tu ne fais {{pas jamais}}.


### incohérences globales (attention à la casse du 2e mot, car beaucoup de sigles peuvent tromper)
__[s](incohérences_globales1)__
    ([clmtsCLMTS]es|[nvNV]os) ([cdlmst]es|[nv]os|cettes?|[mts]a|mon|je|tu|ils?|elle?|[vn]ous|on)  @@0,$
    <<- -2>> =suggSimil(\2, ":[NA].*:[pi]")         # Incohérence : les mots “\1” et “\2” ne devraient pas se succéder.
__[s](incohérences_globales2)__
    ([cC]e(?:tte|t|)|[mtsMTS]a|[mM]on) ([cdlmst]es|[nv]os|cettes?|[mts]a|mon|je|tu|ils?|elle?|[vn]ous|on)  @@0,$
    <<- -2>> =suggSimil(\2, ":[NA].*:[si]")         # Incohérence : les mots “\1” et “\2” ne devraient pas se succéder.

TEST: {{Ces}} {{cette}} canaille qui nous a donné tant de fil à retordre.
TEST: Mon {{il}} est une merveille.


__[s](incohérence_globale_au_qqch)__
    ([aA]u) ({w2})  @@0,$
    <<- not \2.isupper() >>>
    <<- morph(\2, ">(?:[cdlmst]es|[nv]os|cettes?|[mts]a|mon|je|tu|ils?|elle?|[vn]ous|on|parce) ", False)
    -2>> =suggSimil(\2, ":[NA].*:[si]")                                                             # Incohérence : les mots “\1” et “\2” ne devraient pas se succéder.
    <<- __else__ and morph(\2, ">quelle ", False) ->> auquel|auxquels|auxquelles                    # Incohérence. Soudez les deux mots.|https://fr.wiktionary.org/wiki/auquel
    <<- __else__ and \2 == "combien" and morph(word(1), ":[AY]", False) -1>> ô                      # Incohérence probable.|https://fr.wiktionary.org/wiki/%C3%B4_combien

TEST: au {{nos}} enfants.
TEST: {{Au quel}} faut-il s’adresser ?
TEST: Au MES, rien de nouveau.


__[s](incohérence_globale_aux_qqch)__
    ([aA]ux) ({w2})  @@0,$
    <<- not \2.isupper() >>>
    <<- morph(\2, ">(?:[cdlmst]es|[nv]os|cettes?|[mts]a|mon|je|tu|ils?|elle?|[vn]ous|on|parce) ", False)
    -2>> =suggSimil(\2, ":[NA].*:[pi]")                                                             # Incohérence : les mots “\1” et “\2” ne devraient pas se succéder.
    <<- __else__ and morph(\2, ">quelle ", False) ->> auxquels|auxquelles                           # Incohérence. Soudez les deux mots.|https://fr.wiktionary.org/wiki/auquel
    <<- __else__ and \2 == "combien" and morph(word(1), ":[AY]", False) -1>> ô                      # Incohérence probable.|https://fr.wiktionary.org/wiki/%C3%B4_combien

TEST: ils jouent aux {{des}}.
TEST: {{Aux quels}} a-t-il adressé sa requête. ?
TEST: Des individus {{aux}} combien sensibles aux usages.


__[s](incohérences_globales3)__
    ([dD]es) ([cdlmst]es|[nv]os|cettes?|[mts]a|mon|je|tu|ils?|elle?|[vn]ous|on)  @@0,$
    <<- -2>> =suggSimil(\2, ":[NA].*:[pi]")         # Incohérence : les mots “\1” et “\2” ne devraient pas se succéder.
    <<- -1>> de                                     # Incohérence : les mots “\1” et “\2” ne devraient pas se succéder.

TEST: je ne sais {{des}} {{ses}} choses.



!!
!!
................................................................................

TEST: {{en t’}}ait donné tant.                          ->> "t’en "
TEST: {{en n’}}{{envoient}} que peu.


__[i]/conf(conf_malgré_le_la_les)__
    malgré l(?:es? +|a +|’)({w_3})  @@$
    <<- morphex(\1, ":", ":[GNAWM]") -1>> =suggSimil(\1, ":[NA]")                                   # Incohérence : après “malgré”, on devrait trouver un groupe nominal.

TEST: malgré l’{{arrête}} qui interdisait le port 


__[i]/conf(conf_ma_ta_cette_verbe)__
    ([mt]a|cette) +({w_2})  @@0,$
    <<- morphex(\2, ":V.*:(?:Y|[123][sp])", ":[NAQ]") and \2[0].islower()
    -2>> =suggSimil(\2, ":[NA]:[fe]:[si]")                                                          # Incohérence avec « \1 » : « \2 » est un verbe.

TEST: Cette {{pèle}} est trop fragile.


__[i]/conf(conf_sa_verbe)__
    (sa) ({w_2})  @@0,3
    <<- morphex(\2, ":V.*:(?:Y|[123][sp])", ":N.*:[fe]|:[AW]") and \2[0].islower() or \2 == "va"
    -1>> ça                                                                                         # Confusion : « \2 » est un verbe. Exemples : sa jambe, ça vient.
    <<- morphex(\2, ":V.*:(?:Y|[123][sp])", ":[NAQ]") and \2[0].islower() and hasSimil(\2)
    -2>> =suggSimil(\2, ":[NA]:[fe]:[si]")                                                          # Incohérence avec « \1 » : « \2 » est un verbe.

TEST: {{sa}} devient difficile.
TEST: il me tendit {{sa}} {{pèche}}.


__[s]/conf(conf_sa_fin)__
    (sa) *$  @@0  <<- -1>> ça                           # Confusion probable : “sa” est un déterminant féminin singulier. Pour l’équivalent de “cela” ou “ceci”, écrivez :
................................................................................

TEST: Je prends {{sa}}…


__[i]/conf(conf_du_cet_au_verbe)__
    (du|cet|au) +({w_2})  @@0,$
    <<- morphex(\2, ":V.*:(?:Y|[123][sp])", ":[NAQ]") and \2[0].islower() and not (\2 == "sortir" and re.search(r"(?i)au", \1))
    -2>> =suggSimil(\2, ":[NA]:[me]:[si]")                                                          # Incohérence avec « \1 » : « \2 » est un verbe.

TEST: cet {{plaît}} est infectée.


__[i]/conf(conf_ce_verbe)__
    (ce) +(?!faire|peut)({w_2})  @@0,$
    <<- morphex(\2, ":V.*:(?:Y|[123][sp])", ":[NAQ]:.:[si]|:V0e.*:3[sp]|>devoir") and \2[0].islower() and hasSimil(\2)
    -2>> =suggSimil(\2, ":[NA]:[me]:[si]")                                                          # Incohérence avec « \1 » : « \2 » est un verbe.

TEST: {{ce}} {{rappelle}} n’en finit pas.


__[i]/conf(conf_mon_verbe)__
    (mon) +({w_2})  @@0,$
    <<- morphex(\2, ":V.*:(?:Y|[123][sp])", ":[NAQ]") and \2[0].islower()
    -2>> =suggSimil(\2, ":[NA]:.:[si]")                                                             # Incohérence avec « \1 » : « \2 » est un verbe.

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


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

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


__[i]/conf(conf_det_plur_verbe)__
    ([dcmts]es|quelques|aux|[nv]os) +({w_2})  @@0,$
    <<- morphex(\2, ":V.*:(?:Y|[123][sp])", ":[NAQ]") and \2[0].islower() and not re.search(r"(?i)^quelques? soi(?:ent|t|s)\b", \0)
    -2>> =suggSimil(\2, ":[NA]:.:[pi]")                                                             # Incohérence avec « \1 » : « \2 » est un verbe.

TEST: la crainte des {{attentas}} fait feu de tout bois.


__[i]/conf(conf_auxdits_verbe)__
    (auxdits) +({w_2})  @@0,$
    <<- morphex(\2, ":V.*:(?:Y|[123][sp])", ":[NAQ]") and \2[0].islower()
    -2>> =suggSimil(\2, ":[NA]:[me]:[pi]")                                                          # Incohérence avec « \1 » : « \2 » est un verbe.

TEST: elle se rendit auxdits {{jardinais}}


__[i]/conf(conf_auxdites_verbe)__
    (auxdites) +({w_2})  @@0,$
    <<- morphex(\2, ":V.*:(?:Y|[123][sp])", ":[NAQ]") and \2[0].islower()
    -2>> =suggSimil(\2, ":[NA]:[fe]:[pi]")                                                          # Incohérence avec « \1 » : « \2 » est un verbe.

TEST: auxdites {{scelles}}, il ne prêta pas attention.


__[i]/conf(conf_de_la_vconj)__  de la ({w_2})  @@6
    <<- morphex(\1, ":[123][sp]", ":[NAQ]")
    -1>> =suggSimil(\1, ":(?:[NA]:[fe]:[si])")                                                      # Incohérence : « \1 » est un verbe.

TEST: les petits esprits de la {{pensait}} religieuse


TEST: pour les insulter au sortir du seul troquet dispensateur d’oubli liquide du coin
TEST: ce peut être un matériau à part entière pour alimenter discussions et délibérations.


__[i]/conf(conf_de_le_nom_ou_vconj)__
    (de le) ({w_2})  @@0,6
    <<- morphex(\2, ":[NAQ].*:[me]", ":[YG]") and \2[0].islower() -1>> du                           # Incohérence : « \2 » est un nom ou un adjectif.
    <<- morph(\2, ":[123][sp]", False) -2>> =suggSimil(\2, ":Y")                                    # Incohérence : « \2 » est une forme verbale conjuguée.

TEST: {{de le}} vin                                           ->> du
TEST: il n’est pas interdit de le {{pensait}}


__[i]/conf(conf_de_l_vconj)__
    de l’({w_2})  @@5
    <<- morphex(\1, ":[123][sp]", ":[NAQ]") -1>> =suggSimil(\1, ":(?:[NA]:.:[si])")                 # Incohérence : « \1 » est une forme verbale conjuguée.

TEST: de l’{{entra}}


__[i]/conf(conf_un_verbe)__
    (?<!’)un ({w_2})  @@3
    <<- morph(\1, ":(?:Y|[123][sp])") and not before("(?i)(?:dont|sauf|un à) +$")
    -1>> =suggSimil(\1, ":[NAQ]:[me]:[si]")                                                         # Incohérence : « \1 » est une forme verbale conjuguée.

TEST: un {{maintient}} difficile.


__[i]/conf(conf_de_dès_par_vconj)__
    (?:d(?:e|ès)|par) ({w_2})  @@$
    <<- \1[0].islower() and morph(\1, ":V.*:[123][sp]") -1>> =suggSimil(\1, ":[NA]")                # Incohérence : « \1 » est une forme verbale conjuguée.

TEST: par {{bloque}} de données
TEST: il s’agit de {{mette}} en évidence.


__[i]/conf(conf_d_une_vconj)__
    d’(?:une? +|)({w_2})  @@$
    <<- \1[0].islower() and morphex(\1, ":V.*:[123][sp]", ":[GNA]") and not before(r"(?i)\b(?:plus|moins) +$")
    -1>> =suggSimil(\1, ":[NA]")    # Incohérence : « \1 » est une forme verbale conjuguée.

TEST: d’une {{habille}} femme
TEST: plus d’un ont été traumatisés
TEST: plus d’une sont parties aussi vite qu’elles étaient venues


__[i]/conf(conf_il_on_pas_verbe)__
    (?<!t’)(?:il|on) (?:l’|l(?:es?|a|eur|ui) +|[nv]ous +|)({w_2}) @@$
    <<- morphex(\1, ":", ":(?:[123][sp]|O[onw]|X)|ou ") and morphex(word(-1), ":", ":3s", True)
    -1>> =suggSimil(\1, ":(?:3s|Oo)")                                                               # Incohérence : « \1 » devrait être un verbe, un pronom objet, un adverbe de négation, etc.

TEST: il {{et}} parti.


__[i]/conf(conf_ils_pas_verbe)__
    (?<!t’)ils (?:l’|l(?:es?|a|eur|ui) +|[nv]ous +|)({w_2}) @@$
    <<- morphex(\1, ":", ":(?:[123][sp]|O[onw]|X)|ou ") and morphex(word(-1), ":", ":3p", True)
    -1>> =suggSimil(\1, ":(?:3p|Oo)")                                                               # Incohérence avec « ils » : « \1 » devrait être un verbe, un pronom objet, un adverbe de négation, etc.

TEST: ils {{son}} du même bois.
TEST: Ils {{étai}} partie au {{restaurent}}


__[i]/conf(conf_je_pas_verbe)__
    je (?!soussigné)(?:l’|l(?:es?|a|eur|ui) +|[nv]ous +|)({w_2}) @@$
    <<- morphex(\1, ":", ":(?:[123][sp]|O[onw]|X)") and morphex(word(-1), ":", ":1s", True)
    -1>> =suggSimil(\1, ":(?:1s|Oo)")                                                               # Incohérence avec « je » : « \1 » devrait être un verbe, un pronom objet, un adverbe de négation, etc.

TEST: Je {{travail}}.


__[i]/conf(conf_tu_pas_verbe)__
    tu (?:l’|l(?:es?|a|eur|ui) +|[nv]ous +|)({w_2}) @@$
    <<- morphex(\1, ":", ":(?:[123][sp]|O[onw]|X)") and morphex(word(-1), ":", ":(?:2s|V0e)", True)
    -1>> =suggSimil(\1, ":(?:2s|Oo)")                                                               # Incohérence avec « tu » : « \1 » devrait être un verbe, un pronom objet, un adverbe de négation, etc.

TEST: tu {{croix}} que tu sais quelque chose, mais tu ne sais rien.


TEST: elles seules peuvent s’en sortir.
TEST: elle seule peut y arriver
TEST: elle seules les femmes la font craquer
................................................................................
#    très +(bien|\w+ent) +({w2})  @@w,$
#    <<- morph(\1, ":W", False) and morphex(\2, ":[123][sp]", ":[GAQW]") -2>> _
#    # Incohérence avec « très » : « \2 » n’est ni un adjectif, ni un participe passé, ni un adverbe.

 
__[i]/conf(conf_très_verbe)__
    très +(?!envie)({w_2})  @@$
    <<- morphex(\1, ":(?:Y|[123][sp])", ":[AQW]") -1>> =suggSimil(\1, ":[AW]")                      # Incohérence avec « très » : « \1 » n’est ni un adjectif, ni un participe passé, ni un adverbe.

TEST: Il est très {{cite}}.
TEST: très {{suivit}} par ce détective
TEST: il était très {{habille}}


__[i]/conf(conf_trop_vconj)__
................................................................................

TEST: Toutes les blagues qu’on fera sur {{entreront}} dans l’histoire !


__[i]/conf(conf_si_vconj)__
    si +({w2})  @@$
    <<- morphex(\1, ":[123][sp]", ":[GNAQWMT]") and morphex(word(1), ":", ":D", True)
    -1>> =suggSimil(\1, ":[AWGT]")                                                                  # Incohérence avec « si » : « \1 » ne devrait pas être une forme verbale conjuguée.

TEST: Ces gens sont si {{prit}} par leur travail qu’ils en oublient de vivre.
TEST: Ça ira mieux demain, surtout si émerge une demande forte de la part des consommateurs.


__[i]/conf(conf_de_plus_en_plus_verbe)__
    de plus en plus +({w_2})  @@$
................................................................................
!!
!!
__[i](p_m_enfin)__      m’enfin <<- ~>> *

__[i]/conf(conf_j_y_en_qqch)__
    (j’(?:en +|y +|))({w_1})  @@0,$
    <<- morphex(\2, ":", ":(?:[123][sp]|O[onw])")
    -2>> =suggSimil(\2, ":1s")                                                                      # Incohérence avec « \1 » : « \2 » devrait être un verbe.
__[i]/conf(conf_ne_qqch)__
    (n(?:e +|’))({w_1})  @@0,$
    <<- morphex(\2, ":", ":(?:[123][sp]|Y|P|O[onw]|X)|>(?:[lmtsn]|surtout|guère|presque|même|tout|parfois|vraiment|réellement) ") and not re.search("(?i)-(?:ils?|elles?|[nv]ous|je|tu|on|ce)$", \2)
    -2>> =suggSimil(\2, ":(?:[123][sp]|Oo|Y)")                                                      # Incohérence avec « \1 » : « \2 » devrait être un verbe ou un pronom personnel objet.
__[i]/conf(conf_n_y_en_qqch)__
    (n’(?:en|y)) ({w_1})  @@0,$
    <<- morphex(\2, ":", ":(?:[123][sp]|Y|P|O[onw]|X)") and not re.search("(?i)-(?:ils?|elles?|[nv]ous|je|tu|on|ce)$", \2)
    -2>> =suggSimil(\2, ":(?:[123][sp]|Y)")                                                         # Incohérence avec « \1 » : « \2 » devrait être un verbe.
__[i]/conf(conf_ne_pronom_qqch)__
    (ne (?:l(?:es? +|eur +|a +|’)|[nv]ous))({w_1})  @@0,$
    <<- morphex(\2, ":", ":(?:[123][sp]|Y|P|O[onw]|X)") and not re.search("(?i)-(?:ils?|elles?|[nv]ous|je|tu|on|ce)$", \2)
    -2>> =suggSimil(\2, ":(?:[123][sp]|Y)")                                                         # Incohérence avec « \1 » : « \2 » devrait être un verbe.
__[i]/conf(conf_me_te_se_qqch)__
    ([mts]e +(?:les? |la |l’|))(?!voi(?:là|ci))({w_1})  @@0,$
    <<- not re.search("(?i)^se que?", \0)
    and morphex(\2, ":", ":(?:[123][sp]|Y|P|Oo)|>[lmts] ") and not re.search("(?i)-(?:ils?|elles?|[nv]ous|je|tu|on|ce)$", \2)
    -2>> =suggSimil(\2, ":(?:[123][sp]|Oo|Y)")                                                      # Incohérence avec « \1 » : « \2 » devrait être un verbe ou un pronom personnel objet.
__[i]/conf(conf_m_t_s_y_en_qqch)__
    ([mts]’(?:en|y)) (?!voilà)({w_1})  @@0,$
    <<- morphex(\2, ":", ":(?:[123][sp]|Y|P|Oo)") and not re.search("(?i)-(?:ils?|elles?|[nv]ous|je|tu|on|ce)$", \2)
    -2>> =suggSimil(\2, ":(?:[123][sp]|Y)")                                                         # Incohérence avec « \1 » : « \2 » devrait être un verbe.
__[i]/conf(conf_m_s_qqch)__
    ([ms]’)({w_1})  @@0,2
    <<- morphex(\2, ":", ":(?:[123][sp]|Y|P)|>(?:en|y|ils?) ") and not re.search("(?i)-(?:ils?|elles?|[nv]ous|je|tu|on|ce)$", \2)
    -2>> =suggSimil(\2, ":(?:[123][sp]|Y)")                                                         # Incohérence avec « \1 » : « \2 » devrait être un verbe.
__[i]/conf(conf_t_qqch)__
    (t’)({w_1})  @@0,2
    <<- morphex(\2, ":", ":(?:[123][sp]|Y|P)|>(?:en|y|ils?|elles?) ") and not re.search("(?i)-(?:ils?|elles?|[nv]ous|je|tu|on|ce)$", \2)
    -2>> =suggSimil(\2, ":(?:[123][sp]|Y)")                                                         # Incohérence avec « \1 » : « \2 » devrait être un verbe.
__[i]/conf(conf_c_ç_qqch)__
    ([cç]’)({w_1})  @@0,2
    <<- morphex(\2, ":", ":[123][sp]|>(?:en|y|que?) ") and not re.search("(?i)-(?:ils?|elles?|[nv]ous|je|tu|on|dire)$", \2)
    -2>> =suggSimil(\2, ":3s")                                                                      # Incohérence avec « \1 » : « \2 » devrait être un verbe.

TEST: ne l’{{oubli}} pas
TEST: elle ne la {{croix}} pas
TEST: ils me les {{laissés}}.
TEST: ne {{pensée}} rien, jamais
TEST: n’en {{laissée}} que des miettes
TEST: s’y {{intéressé}}
................................................................................
TEST: comme le signe évident d’une politique volontaire
TEST: c’était le signe évident d’une politique volontaire
TEST: ce que c’est : le signe évident d’une politique volontaire
TEST: On aura carte blanche.
TEST: La seule façon de redonner sens à des notions…
TEST: Les longues tresses que j’ai pris l’habitude de porter depuis quelque temps et qu’il faut cinq heures pour parfaire.
TEST: Il est pieds nus.
TEST: des dossiers secrets {{défense}}


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


................................................................................
TEST: Veuillez vous instruire avant de contester ces mesures.
TEST: C’était elle qui avait pris le contrôle.


__[i]/inte(inte_je)__
    ({w1})-je  @@0
    <<- morphex(\1, ":V", ":1[sśŝ]") -1>> =suggVerb(@, ":1ś")                                       # Forme interrogative : « \1 » n’est pas un verbe à la 1ʳᵉ personne du singulier.
    <<- not morph(\1, ":V", False) -1>> =suggSimil(\1, ":1[sśŝ]")                                   # Forme interrogative : « \1 » n’est pas un verbe à la 1ʳᵉ personne du singulier.

TEST: {{Vas}}-je                                            ->> Vais
TEST: {{Prit}}-je                                           ->> Pris
TEST: {{prix}}-je le temps d’y parvenir ? Oui.


__[i]/inte(inte_tu)__
    ({w1})-tu  @@0
    <<- morphex(\1, ":V", ":[ISK].*:2s") -1>> =suggVerb(@, ":2s")                                   # Forme interrogative. « \1 » n’est pas un verbe à la 2ᵉ personne du singulier.
    <<- not morph(\1, ":V", False) -1>> =suggSimil(\1, ":2s")                                       # Forme interrogative : « \1 » n’est pas un verbe à la 2ᵉ personne du singulier.

TEST: {{Peut}}-tu                                           ->> Peux
TEST: {{peu}}-tu revenir chez moi ?


__[i]/inte(inte_il_elle_on)__
    ({w1})-(?:t-|)(il|elle|on)  @@0,$
    <<- morphex(\1, ":V", ":3s") -1>> =suggVerb(@, ":3s")                                           # Forme interrogative : « \1 » n’est pas un verbe à la 3ᵉ personne du singulier.
    <<- \1 != "t" and (not \1.endswith("oilà") or \2 != "il") and morphex(\1, ":", ":V")
    -1>> =suggSimil(\1, ":3s")                                                                      # Forme interrogative : « \1 » n’est pas un verbe à la 3ᵉ personne du singulier.
    <<- not \2.endswith(("n", "N")) and morphex(\1, ":3p", ":3s") -2>> \2s                          # Forme interrogative : accordez “\2” avec le verbe à la 3ᵉ personne du pluriel.

TEST: {{Peux}}-il                                           ->> Peut
TEST: {{Attaques}}-t-on                                     ->> Attaque
TEST: {{Prends}}-elle                                       ->> Prend
TEST: {{Menthe}}-t-elle souvent ?
TEST: {{viennent}}-{{il}} demain ?
TEST: Le moteur choisi convient-il ?


__[s]/inte(inte_ce)__
    ({w_2})-([cs]e)  @@0,$
    <<- morphex(\1, ":V", ":(?:3s|V0e.*:3p)") -1>> =suggVerb(@, ":3s")      # Forme interrogative : « \1 » n’est pas un verbe à la 3ᵉ personne du singulier.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4132
    <<- morphex(\1, ":", ":V") -1>> =suggSimil(\1, ":3s")                   # Forme interrogative : « \1 » n’est pas un verbe à la 3ᵉ personne du singulier.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4132
    <<- \2 == "se" -2>> ce                                                  # Forme interrogative. Confusion.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4132

TEST: était-{{se}} cela, la vérité ineffable ?
TEST: {{étai}}-ce notre destinée de souffrir ?
TEST: étaient-{{se}} ces hommes-là qui allaient nous guider dans les montagnes ?
TEST: Était-ce des femmes de ce pays ?
TEST: Eh ! dit Athos, ne sont-ce pas des braconniers qu’on arrête là-bas ?


__[i]/inte(inte_nous)__
    ({w1})-nous  @@0
    <<- morphex(\1, ":V", ":(?:1p|E:2[sp])") -1>> =suggVerb(@, ":1p")                               # Forme interrogative ou impérative incorrecte.
    <<- morphex(\1, ":", ":V|>chez ") -1>> =suggSimil(\1, ":1p")                                    # Forme interrogative ou impérative incorrecte.

TEST: {{Prendront}}-nous                                    ->> Prendrons
TEST: {{Attendront}}-nous le train                          ->> Attendrons


__[i]/inte(inte_vous)__
    ({w1})-vous  @@0
    <<- morphex(\1, ":V", ":2p") -1>> =suggVerb(@, ":2p")                                           # Forme interrogative ou impérative incorrecte.
    <<- not morph(\1, ":V|>chez ", False) -1>> =suggSimil(\1, ":2p")                                # Forme interrogative ou impérative incorrecte.

TEST: {{Attaquait}}-vous                                    ->> Attaquiez
TEST: Elle a de nombreux rendez-vous ce matin.
TEST: êtes-vous là ?


__[i]/inte(inte_ils_elles)__
    ({w1})-(?:ils|elles)  @@0
    <<- morphex(\1, ":V", ":3p") and spell(\1)
    -1>> =suggVerb(@, ":3p")                                                                        # Forme interrogative : « \1 » n’est pas un verbe à la 3ᵉ personne du pluriel.
    <<- \1 != "t" and not morph(\1, ":V", False) and spell(\1)
    -1>> =suggSimil(\1, ":3p")                                                                      # Forme interrogative : « \1 » n’est pas un verbe à la 3ᵉ personne du pluriel.

TEST: {{attaquant}}-ils                                     ->> attaquent
TEST: {{prendrons}}-elles un verre avec moi ?



!!!! Verbe auxiliaire                                                                               







|


|









|












|










|
|







 







|







|









|







 







|







|







|








|







|







|







|






|











|







|







|






|








|









|







|








|







|







 







|







 







|







 







|



|



|



|




|



|



|



|



|







 







|







 







|









|









|













|












|








|











|







2501
2502
2503
2504
2505
2506
2507
2508
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
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
....
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
....
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
....
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
....
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
....
4043
4044
4045
4046
4047
4048
4049
4050
4051
4052
4053
4054
4055
4056
4057
4058
4059
4060
4061
4062
4063
4064
4065
4066
4067
4068
4069
4070
4071
4072
4073
4074
4075
4076
4077
4078
4079
4080
4081
4082
4083
4084
4085
4086
4087
4088
4089
4090
....
5307
5308
5309
5310
5311
5312
5313
5314
5315
5316
5317
5318
5319
5320
5321
.....
11460
11461
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
11519
11520
11521
11522
11523
11524
11525
11526
11527
11528
11529
11530
11531
11532
11533
11534
11535
11536
11537
11538
11539
11540
11541
11542

TEST: Ce que tu ne fais {{pas jamais}}.


### incohérences globales (attention à la casse du 2e mot, car beaucoup de sigles peuvent tromper)
__[s](incohérences_globales1)__
    ([clmtsCLMTS]es|[nvNV]os) ([cdlmst]es|[nv]os|cettes?|[mts]a|mon|je|tu|ils?|elle?|[vn]ous|on)  @@0,$
    <<- -2>> =suggSimil(\2, ":[NA].*:[pi]", True)                                                   # Incohérence : les mots “\1” et “\2” ne devraient pas se succéder.
__[s](incohérences_globales2)__
    ([cC]e(?:tte|t|)|[mtsMTS]a|[mM]on) ([cdlmst]es|[nv]os|cettes?|[mts]a|mon|je|tu|ils?|elle?|[vn]ous|on)  @@0,$
    <<- -2>> =suggSimil(\2, ":[NA].*:[si]", True)                                                   # Incohérence : les mots “\1” et “\2” ne devraient pas se succéder.

TEST: {{Ces}} {{cette}} canaille qui nous a donné tant de fil à retordre.
TEST: Mon {{il}} est une merveille.


__[s](incohérence_globale_au_qqch)__
    ([aA]u) ({w2})  @@0,$
    <<- not \2.isupper() >>>
    <<- morph(\2, ">(?:[cdlmst]es|[nv]os|cettes?|[mts]a|mon|je|tu|ils?|elle?|[vn]ous|on|parce) ", False)
    -2>> =suggSimil(\2, ":[NA].*:[si]", True)                                                       # Incohérence : les mots “\1” et “\2” ne devraient pas se succéder.
    <<- __else__ and morph(\2, ">quelle ", False) ->> auquel|auxquels|auxquelles                    # Incohérence. Soudez les deux mots.|https://fr.wiktionary.org/wiki/auquel
    <<- __else__ and \2 == "combien" and morph(word(1), ":[AY]", False) -1>> ô                      # Incohérence probable.|https://fr.wiktionary.org/wiki/%C3%B4_combien

TEST: au {{nos}} enfants.
TEST: {{Au quel}} faut-il s’adresser ?
TEST: Au MES, rien de nouveau.


__[s](incohérence_globale_aux_qqch)__
    ([aA]ux) ({w2})  @@0,$
    <<- not \2.isupper() >>>
    <<- morph(\2, ">(?:[cdlmst]es|[nv]os|cettes?|[mts]a|mon|je|tu|ils?|elle?|[vn]ous|on|parce) ", False)
    -2>> =suggSimil(\2, ":[NA].*:[pi]", True)                                                       # Incohérence : les mots “\1” et “\2” ne devraient pas se succéder.
    <<- __else__ and morph(\2, ">quelle ", False) ->> auxquels|auxquelles                           # Incohérence. Soudez les deux mots.|https://fr.wiktionary.org/wiki/auquel
    <<- __else__ and \2 == "combien" and morph(word(1), ":[AY]", False) -1>> ô                      # Incohérence probable.|https://fr.wiktionary.org/wiki/%C3%B4_combien

TEST: ils jouent aux {{des}}.
TEST: {{Aux quels}} a-t-il adressé sa requête. ?
TEST: Des individus {{aux}} combien sensibles aux usages.


__[s](incohérences_globales3)__
    ([dD]es) ([cdlmst]es|[nv]os|cettes?|[mts]a|mon|je|tu|ils?|elle?|[vn]ous|on)  @@0,$
    <<- -2>> =suggSimil(\2, ":[NA].*:[pi]", True)                                                   # Incohérence : les mots “\1” et “\2” ne devraient pas se succéder.
    <<- -1>> de                                                                                     # Incohérence : les mots “\1” et “\2” ne devraient pas se succéder.

TEST: je ne sais {{des}} {{ses}} choses.



!!
!!
................................................................................

TEST: {{en t’}}ait donné tant.                          ->> "t’en "
TEST: {{en n’}}{{envoient}} que peu.


__[i]/conf(conf_malgré_le_la_les)__
    malgré l(?:es? +|a +|’)({w_3})  @@$
    <<- morphex(\1, ":", ":[GNAWM]") -1>> =suggSimil(\1, ":[NA]", True)                             # Incohérence : après “malgré”, on devrait trouver un groupe nominal.

TEST: malgré l’{{arrête}} qui interdisait le port 


__[i]/conf(conf_ma_ta_cette_verbe)__
    ([mt]a|cette) +({w_2})  @@0,$
    <<- morphex(\2, ":V.*:(?:Y|[123][sp])", ":[NAQ]") and \2[0].islower()
    -2>> =suggSimil(\2, ":[NA]:[fe]:[si]", True)                                                    # Incohérence avec « \1 » : « \2 » est un verbe.

TEST: Cette {{pèle}} est trop fragile.


__[i]/conf(conf_sa_verbe)__
    (sa) ({w_2})  @@0,3
    <<- morphex(\2, ":V.*:(?:Y|[123][sp])", ":N.*:[fe]|:[AW]") and \2[0].islower() or \2 == "va"
    -1>> ça                                                                                         # Confusion : « \2 » est un verbe. Exemples : sa jambe, ça vient.
    <<- morphex(\2, ":V.*:(?:Y|[123][sp])", ":[NAQ]") and \2[0].islower() and hasSimil(\2)
    -2>> =suggSimil(\2, ":[NA]:[fe]:[si]", True)                                                    # Incohérence avec « \1 » : « \2 » est un verbe.

TEST: {{sa}} devient difficile.
TEST: il me tendit {{sa}} {{pèche}}.


__[s]/conf(conf_sa_fin)__
    (sa) *$  @@0  <<- -1>> ça                           # Confusion probable : “sa” est un déterminant féminin singulier. Pour l’équivalent de “cela” ou “ceci”, écrivez :
................................................................................

TEST: Je prends {{sa}}…


__[i]/conf(conf_du_cet_au_verbe)__
    (du|cet|au) +({w_2})  @@0,$
    <<- morphex(\2, ":V.*:(?:Y|[123][sp])", ":[NAQ]") and \2[0].islower() and not (\2 == "sortir" and re.search(r"(?i)au", \1))
    -2>> =suggSimil(\2, ":[NA]:[me]:[si]", True)                                                    # Incohérence avec « \1 » : « \2 » est un verbe.

TEST: cet {{plaît}} est infectée.


__[i]/conf(conf_ce_verbe)__
    (ce) +(?!faire|peut)({w_2})  @@0,$
    <<- morphex(\2, ":V.*:(?:Y|[123][sp])", ":[NAQ]:.:[si]|:V0e.*:3[sp]|>devoir") and \2[0].islower() and hasSimil(\2)
    -2>> =suggSimil(\2, ":[NA]:[me]:[si]", True)                                                    # Incohérence avec « \1 » : « \2 » est un verbe.

TEST: {{ce}} {{rappelle}} n’en finit pas.


__[i]/conf(conf_mon_verbe)__
    (mon) +({w_2})  @@0,$
    <<- morphex(\2, ":V.*:(?:Y|[123][sp])", ":[NAQ]") and \2[0].islower()
    -2>> =suggSimil(\2, ":[NA]:.:[si]", True)                                                       # Incohérence avec « \1 » : « \2 » est un verbe.

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


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

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


__[i]/conf(conf_det_plur_verbe)__
    ([dcmts]es|quelques|aux|[nv]os) +({w_2})  @@0,$
    <<- morphex(\2, ":V.*:(?:Y|[123][sp])", ":[NAQ]") and \2[0].islower() and not re.search(r"(?i)^quelques? soi(?:ent|t|s)\b", \0)
    -2>> =suggSimil(\2, ":[NA]:.:[pi]", True)                                                       # Incohérence avec « \1 » : « \2 » est un verbe.

TEST: la crainte des {{attentas}} fait feu de tout bois.


__[i]/conf(conf_auxdits_verbe)__
    (auxdits) +({w_2})  @@0,$
    <<- morphex(\2, ":V.*:(?:Y|[123][sp])", ":[NAQ]") and \2[0].islower()
    -2>> =suggSimil(\2, ":[NA]:[me]:[pi]", True)                                                    # Incohérence avec « \1 » : « \2 » est un verbe.

TEST: elle se rendit auxdits {{jardinais}}


__[i]/conf(conf_auxdites_verbe)__
    (auxdites) +({w_2})  @@0,$
    <<- morphex(\2, ":V.*:(?:Y|[123][sp])", ":[NAQ]") and \2[0].islower()
    -2>> =suggSimil(\2, ":[NA]:[fe]:[pi]", True)                                                    # Incohérence avec « \1 » : « \2 » est un verbe.

TEST: auxdites {{scelles}}, il ne prêta pas attention.


__[i]/conf(conf_de_la_vconj)__  de la ({w_2})  @@6
    <<- morphex(\1, ":[123][sp]", ":[NAQ]")
    -1>> =suggSimil(\1, ":(?:[NA]:[fe]:[si])", True)                                                # Incohérence : « \1 » est un verbe.

TEST: les petits esprits de la {{pensait}} religieuse


TEST: pour les insulter au sortir du seul troquet dispensateur d’oubli liquide du coin
TEST: ce peut être un matériau à part entière pour alimenter discussions et délibérations.


__[i]/conf(conf_de_le_nom_ou_vconj)__
    (de le) ({w_2})  @@0,6
    <<- morphex(\2, ":[NAQ].*:[me]", ":[YG]") and \2[0].islower() -1>> du                           # Incohérence : « \2 » est un nom ou un adjectif.
    <<- morph(\2, ":[123][sp]", False) -2>> =suggVerbInfi(\2)                                       # Incohérence : « \2 » est une forme verbale conjuguée.

TEST: {{de le}} vin                                           ->> du
TEST: il n’est pas interdit de le {{pensait}}


__[i]/conf(conf_de_l_vconj)__
    de l’({w_2})  @@5
    <<- morphex(\1, ":[123][sp]", ":[NAQ]") -1>> =suggSimil(\1, ":[NA]:.:[si]", True)               # Incohérence : « \1 » est une forme verbale conjuguée.

TEST: de l’{{entra}}


__[i]/conf(conf_un_verbe)__
    (?<!’)un ({w_2})  @@3
    <<- morph(\1, ":(?:Y|[123][sp])") and not before("(?i)(?:dont|sauf|un à) +$")
    -1>> =suggSimil(\1, ":[NAQ]:[me]:[si]", True)                                                   # Incohérence : « \1 » est une forme verbale conjuguée.

TEST: un {{maintient}} difficile.


__[i]/conf(conf_de_dès_par_vconj)__
    (?:d(?:e|ès)|par) ({w_2})  @@$
    <<- \1[0].islower() and morph(\1, ":V.*:[123][sp]") -1>> =suggSimil(\1, ":[NA]", True)          # Incohérence : « \1 » est une forme verbale conjuguée.

TEST: par {{bloque}} de données
TEST: il s’agit de {{mette}} en évidence.


__[i]/conf(conf_d_une_vconj)__
    d’(?:une? +|)({w_2})  @@$
    <<- \1[0].islower() and morphex(\1, ":V.*:[123][sp]", ":[GNA]") and not before(r"(?i)\b(?:plus|moins) +$")
    -1>> =suggSimil(\1, ":[NA]", True)                                                              # Incohérence : « \1 » est une forme verbale conjuguée.

TEST: d’une {{habille}} femme
TEST: plus d’un ont été traumatisés
TEST: plus d’une sont parties aussi vite qu’elles étaient venues


__[i]/conf(conf_il_on_pas_verbe)__
    (?<!t’)(?:il|on) (?:l’|l(?:es?|a|eur|ui) +|[nv]ous +|)({w_2}) @@$
    <<- morphex(\1, ":", ":(?:[123][sp]|O[onw]|X)|ou ") and morphex(word(-1), ":", ":3s", True)
    -1>> =suggSimil(\1, ":(?:3s|Oo)", False)                                                        # Incohérence : « \1 » devrait être un verbe, un pronom objet, un adverbe de négation, etc.

TEST: il {{et}} parti.


__[i]/conf(conf_ils_pas_verbe)__
    (?<!t’)ils (?:l’|l(?:es?|a|eur|ui) +|[nv]ous +|)({w_2}) @@$
    <<- morphex(\1, ":", ":(?:[123][sp]|O[onw]|X)|ou ") and morphex(word(-1), ":", ":3p", True)
    -1>> =suggSimil(\1, ":(?:3p|Oo)", False)                                                        # Incohérence avec « ils » : « \1 » devrait être un verbe, un pronom objet, un adverbe de négation, etc.

TEST: ils {{son}} du même bois.
TEST: Ils {{étai}} partie au {{restaurent}}


__[i]/conf(conf_je_pas_verbe)__
    je (?!soussigné)(?:l’|l(?:es?|a|eur|ui) +|[nv]ous +|)({w_2}) @@$
    <<- morphex(\1, ":", ":(?:[123][sp]|O[onw]|X)") and morphex(word(-1), ":", ":1s", True)
    -1>> =suggSimil(\1, ":(?:1s|Oo)", False)                                                        # Incohérence avec « je » : « \1 » devrait être un verbe, un pronom objet, un adverbe de négation, etc.

TEST: Je {{travail}}.


__[i]/conf(conf_tu_pas_verbe)__
    tu (?:l’|l(?:es?|a|eur|ui) +|[nv]ous +|)({w_2}) @@$
    <<- morphex(\1, ":", ":(?:[123][sp]|O[onw]|X)") and morphex(word(-1), ":", ":(?:2s|V0e)", True)
    -1>> =suggSimil(\1, ":(?:2s|Oo)", False)                                                        # Incohérence avec « tu » : « \1 » devrait être un verbe, un pronom objet, un adverbe de négation, etc.

TEST: tu {{croix}} que tu sais quelque chose, mais tu ne sais rien.


TEST: elles seules peuvent s’en sortir.
TEST: elle seule peut y arriver
TEST: elle seules les femmes la font craquer
................................................................................
#    très +(bien|\w+ent) +({w2})  @@w,$
#    <<- morph(\1, ":W", False) and morphex(\2, ":[123][sp]", ":[GAQW]") -2>> _
#    # Incohérence avec « très » : « \2 » n’est ni un adjectif, ni un participe passé, ni un adverbe.

 
__[i]/conf(conf_très_verbe)__
    très +(?!envie)({w_2})  @@$
    <<- morphex(\1, ":(?:Y|[123][sp])", ":[AQW]") -1>> =suggSimil(\1, ":[AW]", True)                # Incohérence avec « très » : « \1 » n’est ni un adjectif, ni un participe passé, ni un adverbe.

TEST: Il est très {{cite}}.
TEST: très {{suivit}} par ce détective
TEST: il était très {{habille}}


__[i]/conf(conf_trop_vconj)__
................................................................................

TEST: Toutes les blagues qu’on fera sur {{entreront}} dans l’histoire !


__[i]/conf(conf_si_vconj)__
    si +({w2})  @@$
    <<- morphex(\1, ":[123][sp]", ":[GNAQWMT]") and morphex(word(1), ":", ":D", True)
    -1>> =suggSimil(\1, ":[AWGT]", True)                                                            # Incohérence avec « si » : « \1 » ne devrait pas être une forme verbale conjuguée.

TEST: Ces gens sont si {{prit}} par leur travail qu’ils en oublient de vivre.
TEST: Ça ira mieux demain, surtout si émerge une demande forte de la part des consommateurs.


__[i]/conf(conf_de_plus_en_plus_verbe)__
    de plus en plus +({w_2})  @@$
................................................................................
!!
!!
__[i](p_m_enfin)__      m’enfin <<- ~>> *

__[i]/conf(conf_j_y_en_qqch)__
    (j’(?:en +|y +|))({w_1})  @@0,$
    <<- morphex(\2, ":", ":(?:[123][sp]|O[onw])")
    -2>> =suggSimil(\2, ":1s", False)                                                               # Incohérence avec « \1 » : « \2 » devrait être un verbe.
__[i]/conf(conf_ne_qqch)__
    (n(?:e +|’))({w_1})  @@0,$
    <<- morphex(\2, ":", ":(?:[123][sp]|Y|P|O[onw]|X)|>(?:[lmtsn]|surtout|guère|presque|même|tout|parfois|vraiment|réellement) ") and not re.search("(?i)-(?:ils?|elles?|[nv]ous|je|tu|on|ce)$", \2)
    -2>> =suggSimil(\2, ":(?:[123][sp]|Oo|Y)", False)                                               # Incohérence avec « \1 » : « \2 » devrait être un verbe ou un pronom personnel objet.
__[i]/conf(conf_n_y_en_qqch)__
    (n’(?:en|y)) ({w_1})  @@0,$
    <<- morphex(\2, ":", ":(?:[123][sp]|Y|P|O[onw]|X)") and not re.search("(?i)-(?:ils?|elles?|[nv]ous|je|tu|on|ce)$", \2)
    -2>> =suggSimil(\2, ":(?:[123][sp]|Y)", False)                                                  # Incohérence avec « \1 » : « \2 » devrait être un verbe.
__[i]/conf(conf_ne_pronom_qqch)__
    (ne (?:l(?:es? +|eur +|a +|’)|[nv]ous))({w_1})  @@0,$
    <<- morphex(\2, ":", ":(?:[123][sp]|Y|P|O[onw]|X)") and not re.search("(?i)-(?:ils?|elles?|[nv]ous|je|tu|on|ce)$", \2)
    -2>> =suggSimil(\2, ":(?:[123][sp]|Y)", False)                                                  # Incohérence avec « \1 » : « \2 » devrait être un verbe.
__[i]/conf(conf_me_te_se_qqch)__
    ([mts]e +(?:les? |la |l’|))(?!voi(?:là|ci))({w_1})  @@0,$
    <<- not re.search("(?i)^se que?", \0)
    and morphex(\2, ":", ":(?:[123][sp]|Y|P|Oo)|>[lmts] ") and not re.search("(?i)-(?:ils?|elles?|[nv]ous|je|tu|on|ce)$", \2)
    -2>> =suggSimil(\2, ":(?:[123][sp]|Oo|Y)", False)                                               # Incohérence avec « \1 » : « \2 » devrait être un verbe ou un pronom personnel objet.
__[i]/conf(conf_m_t_s_y_en_qqch)__
    ([mts]’(?:en|y)) (?!voilà)({w_1})  @@0,$
    <<- morphex(\2, ":", ":(?:[123][sp]|Y|P|Oo)") and not re.search("(?i)-(?:ils?|elles?|[nv]ous|je|tu|on|ce)$", \2)
    -2>> =suggSimil(\2, ":(?:[123][sp]|Y)", False)                                                  # Incohérence avec « \1 » : « \2 » devrait être un verbe.
__[i]/conf(conf_m_s_qqch)__
    ([ms]’)({w_1})  @@0,2
    <<- morphex(\2, ":", ":(?:[123][sp]|Y|P)|>(?:en|y|ils?) ") and not re.search("(?i)-(?:ils?|elles?|[nv]ous|je|tu|on|ce)$", \2)
    -2>> =suggSimil(\2, ":(?:[123][sp]|Y)", False)                                                  # Incohérence avec « \1 » : « \2 » devrait être un verbe.
__[i]/conf(conf_t_qqch)__
    (t’)({w_1})  @@0,2
    <<- morphex(\2, ":", ":(?:[123][sp]|Y|P)|>(?:en|y|ils?|elles?) ") and not re.search("(?i)-(?:ils?|elles?|[nv]ous|je|tu|on|ce)$", \2)
    -2>> =suggSimil(\2, ":(?:[123][sp]|Y)", False)                                                  # Incohérence avec « \1 » : « \2 » devrait être un verbe.
__[i]/conf(conf_c_ç_qqch)__
    ([cç]’)({w_1})  @@0,2
    <<- morphex(\2, ":", ":[123][sp]|>(?:en|y|que?) ") and not re.search("(?i)-(?:ils?|elles?|[nv]ous|je|tu|on|dire)$", \2)
    -2>> =suggSimil(\2, ":3s", False)                                                               # Incohérence avec « \1 » : « \2 » devrait être un verbe.

TEST: ne l’{{oubli}} pas
TEST: elle ne la {{croix}} pas
TEST: ils me les {{laissés}}.
TEST: ne {{pensée}} rien, jamais
TEST: n’en {{laissée}} que des miettes
TEST: s’y {{intéressé}}
................................................................................
TEST: comme le signe évident d’une politique volontaire
TEST: c’était le signe évident d’une politique volontaire
TEST: ce que c’est : le signe évident d’une politique volontaire
TEST: On aura carte blanche.
TEST: La seule façon de redonner sens à des notions…
TEST: Les longues tresses que j’ai pris l’habitude de porter depuis quelque temps et qu’il faut cinq heures pour parfaire.
TEST: Il est pieds nus.
TEST: des dossiers secrets défense


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


................................................................................
TEST: Veuillez vous instruire avant de contester ces mesures.
TEST: C’était elle qui avait pris le contrôle.


__[i]/inte(inte_je)__
    ({w1})-je  @@0
    <<- morphex(\1, ":V", ":1[sśŝ]") -1>> =suggVerb(@, ":1ś")                                       # Forme interrogative : « \1 » n’est pas un verbe à la 1ʳᵉ personne du singulier.
    <<- not morph(\1, ":V", False) -1>> =suggSimil(\1, ":1[sśŝ]", False)                            # Forme interrogative : « \1 » n’est pas un verbe à la 1ʳᵉ personne du singulier.

TEST: {{Vas}}-je                                            ->> Vais
TEST: {{Prit}}-je                                           ->> Pris
TEST: {{prix}}-je le temps d’y parvenir ? Oui.


__[i]/inte(inte_tu)__
    ({w1})-tu  @@0
    <<- morphex(\1, ":V", ":[ISK].*:2s") -1>> =suggVerb(@, ":2s")                                   # Forme interrogative. « \1 » n’est pas un verbe à la 2ᵉ personne du singulier.
    <<- not morph(\1, ":V", False) -1>> =suggSimil(\1, ":2s", False)                                # Forme interrogative : « \1 » n’est pas un verbe à la 2ᵉ personne du singulier.

TEST: {{Peut}}-tu                                           ->> Peux
TEST: {{peu}}-tu revenir chez moi ?


__[i]/inte(inte_il_elle_on)__
    ({w1})-(?:t-|)(il|elle|on)  @@0,$
    <<- morphex(\1, ":V", ":3s") -1>> =suggVerb(@, ":3s")                                           # Forme interrogative : « \1 » n’est pas un verbe à la 3ᵉ personne du singulier.
    <<- \1 != "t" and (not \1.endswith("oilà") or \2 != "il") and morphex(\1, ":", ":V")
    -1>> =suggSimil(\1, ":3s", False)                                                               # Forme interrogative : « \1 » n’est pas un verbe à la 3ᵉ personne du singulier.
    <<- not \2.endswith(("n", "N")) and morphex(\1, ":3p", ":3s") -2>> \2s                          # Forme interrogative : accordez “\2” avec le verbe à la 3ᵉ personne du pluriel.

TEST: {{Peux}}-il                                           ->> Peut
TEST: {{Attaques}}-t-on                                     ->> Attaque
TEST: {{Prends}}-elle                                       ->> Prend
TEST: {{Menthe}}-t-elle souvent ?
TEST: {{viennent}}-{{il}} demain ?
TEST: Le moteur choisi convient-il ?


__[s]/inte(inte_ce)__
    ({w_2})-([cs]e)  @@0,$
    <<- morphex(\1, ":V", ":(?:3s|V0e.*:3p)") -1>> =suggVerb(@, ":3s")      # Forme interrogative : « \1 » n’est pas un verbe à la 3ᵉ personne du singulier.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4132
    <<- morphex(\1, ":", ":V") -1>> =suggSimil(\1, ":3s", False)            # Forme interrogative : « \1 » n’est pas un verbe à la 3ᵉ personne du singulier.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4132
    <<- \2 == "se" -2>> ce                                                  # Forme interrogative. Confusion.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4132

TEST: était-{{se}} cela, la vérité ineffable ?
TEST: {{étai}}-ce notre destinée de souffrir ?
TEST: étaient-{{se}} ces hommes-là qui allaient nous guider dans les montagnes ?
TEST: Était-ce des femmes de ce pays ?
TEST: Eh ! dit Athos, ne sont-ce pas des braconniers qu’on arrête là-bas ?


__[i]/inte(inte_nous)__
    ({w1})-nous  @@0
    <<- morphex(\1, ":V", ":(?:1p|E:2[sp])") -1>> =suggVerb(@, ":1p")                               # Forme interrogative ou impérative incorrecte.
    <<- morphex(\1, ":", ":V|>chez ") -1>> =suggSimil(\1, ":1p", False)                             # Forme interrogative ou impérative incorrecte.

TEST: {{Prendront}}-nous                                    ->> Prendrons
TEST: {{Attendront}}-nous le train                          ->> Attendrons


__[i]/inte(inte_vous)__
    ({w1})-vous  @@0
    <<- morphex(\1, ":V", ":2p") -1>> =suggVerb(@, ":2p")                                           # Forme interrogative ou impérative incorrecte.
    <<- not morph(\1, ":V|>chez ", False) -1>> =suggSimil(\1, ":2p", False)                         # Forme interrogative ou impérative incorrecte.

TEST: {{Attaquait}}-vous                                    ->> Attaquiez
TEST: Elle a de nombreux rendez-vous ce matin.
TEST: êtes-vous là ?


__[i]/inte(inte_ils_elles)__
    ({w1})-(?:ils|elles)  @@0
    <<- morphex(\1, ":V", ":3p") and spell(\1)
    -1>> =suggVerb(@, ":3p")                                                                        # Forme interrogative : « \1 » n’est pas un verbe à la 3ᵉ personne du pluriel.
    <<- \1 != "t" and not morph(\1, ":V", False) and spell(\1)
    -1>> =suggSimil(\1, ":3p", False)                                                               # Forme interrogative : « \1 » n’est pas un verbe à la 3ᵉ personne du pluriel.

TEST: {{attaquant}}-ils                                     ->> attaquent
TEST: {{prendrons}}-elles un verre avec moi ?



!!!! Verbe auxiliaire