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: trunk, fx
2017-09-25
10:04
[fr] suggestion des graphies similaires mieux contrôlée check-in: 8a4cad3f05 user: olr tags: trunk, fr
2017-09-22
09:44
[fr] phonet_simil: remord remords check-in: 82b92a6d17 user: olr tags: trunk, fr
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
51
52
53
54
55
56
57

58
59
60
61
62
63

64
65
66
67
68
69
70
71
72







-
+





-
+
+







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):
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 ":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"))
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
92
93
94
95
96
97
98


99
100
101
102
103
104
105







-
-







        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)

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
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):
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, []):
        for e in conj.getSimil(sWord, sMorph, sPattern):
            aSugg.add(e)
        aSugg.update(conj.getSimil(sWord, sMorph, bSubst))
        break
        #aSugg = aSugg.union(conj.getSimil(sWord, sMorph))
    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
35
36
37
38
39
40
41

42
43
44
45
46
47
48
49







-
+







        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"
    "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)

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







-
+


-
+









-
+












-
+










-
-
+
+








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.
    <<- -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]")         # Incohérence : les mots “\1” et “\2” ne devraient pas se succéder.
    <<- -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]")                                                             # Incohérence : les mots “\1” et “\2” ne devraient pas se succéder.
    -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]")                                                             # Incohérence : les mots “\1” et “\2” ne devraient pas se succéder.
    -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]")         # 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.
    <<- -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.



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







-
+







-
+









-
+














-
+







-
+







-
+








-
+







-
+







-
+







-
+






-
+











-
+







-
+







-
+






-
+








-
+









-
+







-
+








-
+







-
+








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.
    <<- 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]")                                                          # Incohérence avec « \1 » : « \2 » est un verbe.
    -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]")                                                          # Incohérence avec « \1 » : « \2 » est un verbe.
    -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]")                                                          # Incohérence avec « \1 » : « \2 » est un verbe.
    -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]")                                                          # Incohérence avec « \1 » : « \2 » est un verbe.
    -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]")                                                             # Incohérence avec « \1 » : « \2 » est un verbe.
    -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]")                                                          # Incohérence : « \1 » est un verbe.
    -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]")                                                             # Incohérence avec « \1 » : « \2 » est un verbe.
    -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]")                                                          # Incohérence avec « \1 » : « \2 » est un verbe.
    -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]")                                                          # Incohérence avec « \1 » : « \2 » est un verbe.
    -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])")                                                      # Incohérence : « \1 » est un verbe.
    -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>> =suggSimil(\2, ":Y")                                    # Incohérence : « \2 » est une forme verbale conjuguée.
    <<- 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])")                 # Incohérence : « \1 » est une forme verbale conjuguée.
    <<- 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]")                                                         # Incohérence : « \1 » est une forme verbale conjuguée.
    -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]")                # Incohérence : « \1 » est une forme verbale conjuguée.
    <<- \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]")    # Incohérence : « \1 » est une forme verbale conjuguée.
    -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)")                                                               # Incohérence : « \1 » devrait être un verbe, un pronom objet, un adverbe de négation, etc.
    -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)")                                                               # Incohérence avec « ils » : « \1 » devrait être un verbe, un pronom objet, un adverbe de négation, etc.
    -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)")                                                               # Incohérence avec « je » : « \1 » devrait être un verbe, un pronom objet, un adverbe de négation, etc.
    -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)")                                                               # Incohérence avec « tu » : « \1 » devrait être un verbe, un pronom objet, un adverbe de négation, etc.
    -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
3062
3063
3064
3065
3066
3067
3068
3069

3070
3071
3072
3073
3074
3075
3076
3062
3063
3064
3065
3066
3067
3068

3069
3070
3071
3072
3073
3074
3075
3076







-
+







#    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.
    <<- 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)__
3107
3108
3109
3110
3111
3112
3113
3114

3115
3116
3117
3118
3119
3120
3121
3107
3108
3109
3110
3111
3112
3113

3114
3115
3116
3117
3118
3119
3120
3121







-
+








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.
    -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})  @@$
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
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







-
+



-
+



-
+



-
+




-
+



-
+



-
+



-
+



-
+







!!
!!
__[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.
    -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)")                                                      # Incohérence avec « \1 » : « \2 » devrait être un verbe ou un pronom personnel objet.
    -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)")                                                         # Incohérence avec « \1 » : « \2 » devrait être un verbe.
    -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)")                                                         # Incohérence avec « \1 » : « \2 » devrait être un verbe.
    -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)")                                                      # Incohérence avec « \1 » : « \2 » devrait être un verbe ou un pronom personnel objet.
    -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)")                                                         # Incohérence avec « \1 » : « \2 » devrait être un verbe.
    -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)")                                                         # Incohérence avec « \1 » : « \2 » devrait être un verbe.
    -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)")                                                         # Incohérence avec « \1 » : « \2 » devrait être un verbe.
    -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")                                                                      # Incohérence avec « \1 » : « \2 » devrait être un verbe.
    -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é}}
5307
5308
5309
5310
5311
5312
5313
5314

5315
5316
5317
5318
5319
5320
5321
5307
5308
5309
5310
5311
5312
5313

5314
5315
5316
5317
5318
5319
5320
5321







-
+







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}}
TEST: des dossiers secrets défense


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


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
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: 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.
    <<- 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")                                       # 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")                                                                      # Forme interrogative : « \1 » n’est pas un verbe à la 3ᵉ personne du singulier.
    -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")                   # 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")                                    # 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")                                # 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")                                                                      # Forme interrogative : « \1 » n’est pas un verbe à la 3ᵉ personne du pluriel.
    -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