Grammalecte  Check-in [59eec1ef7b]

Overview
Comment:[fr] conversion: regex rules -> graph rules
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | fr | rg
Files: files | file ages | folders
SHA3-256: 59eec1ef7bab5fcbd4ce59993e05ebe244a68b0c960c07905b75209afb1a9aec
User & Date: olr on 2018-07-26 08:13:36
Other Links: branch diff | manifest | tags
Context
2018-07-26
08:31
[core] gc engine: use stored morphologies in tokens if they exist check-in: eecbc6012a user: olr tags: core, rg
08:13
[fr] conversion: regex rules -> graph rules check-in: 59eec1ef7b user: olr tags: fr, rg
08:13
[core] gc engine: define_from() update check-in: 86ac7fe88a user: olr tags: core, rg
Changes

Modified gc_lang/fr/rules.grx from [95ebaaa4fc] to [7d831c71bf].

7897
7898
7899
7900
7901
7902
7903

7904
7905
7906

7907
7908
7909
7910

7911
7912
7913
7914
7915
7916
7917
7918
7919
7920
7921
7922
7923
7924
7925
7926
7927
7897
7898
7899
7900
7901
7902
7903
7904
7905
7906
7907
7908
7909
7910
7911
7912
7913
7914
7915
7916
7917
7918
7919
7920
7921
7922

7923
7924
7925
7926
7927
7928
7929







+



+




+









-







TEST: cette femme-là {{étaient}} partout.


__simplification_des_nombres__
    [vingt|trente|quarante|cinquante|soixante|soixante-dix|septante|quatre-vingt|octante|huitante|quatre-vingt-dix|nonante|mille] et [un|une|onze]
        <<- ~>> \1-et-\3||
        <<- ~2:3>> *
        <<- =>> define(\1, [":B:e:p"])

    [deux|trois|quatre|cinq|six|sept|huit|neuf|onze|douze|treize|quatorze|quinze|seize|dix-sept|dix-huit|dix-neuf]  cents  @:[NAQ].*:[pi]¬:(?:G|3p)
        <<- ~1:2>> ␣
        <<- =>> define(\1, [":B:e:p"])

    [deux|trois|quatre|cinq|six|sept|huit|neuf] ?cent¿ mille
    cent mille
        <<- ~>> ␣
        <<- =>> define(\1, [":B:e:p"])


__purge_des_nombres__
    [les|des|ces|mes|tes|ses|nos|vos|leurs]  quelque  @:B   @:[NA].*:[pi]¬:(?:G|3p)
    [les|des|ces|mes|tes|ses|nos|vos|leurs]  quelque  ~\d+  @:[NA].*:[pi]¬:(?:G|3p)
        <<- ~2:3>> *

    [à|de|d’]  @:B  pour  cent
        <<- ~>> *


    [à|de|d’]  une  heure  ?[deux|trois|quatre|cinq|six|sept|huit|neuf|dix|onze|douze|treize|quatorze|quinze|seize|dix-sept|dix-huit|dix-neuf|vingt|vingt-et-un|vingt-et-une|vingt-deux|vingt-trois|vingt-quatre|vingt-cinq|vingt-six|vingt-sept|vingt-huit|vingt-neuf|trente|trente-et-un|trente-et-une|trente-deux|trente-trois|trente-quatre|trente-cinq|trente-six|trente-sept|trente-huit|trente-neuf|quarante|quarante-et-un|quarante-et-une|quarante-deux|quarante-trois|quarante-quatre|quarante-cinq|quarante-six|quarante-sept|quarante-huit|quarante-neuf|cinquante|cinquante-et-un|cinquante-et-une|cinquante-deux|cinquante-trois|cinquante-quatre|cinquante-cinq|cinquante-six|cinquante-sept|cinquante-huit|cinquante-neuf]¿
    [à|de|d’]  [deux|trois|quatre|cinq|six|sept|huit|neuf|dix|onze|douze|treize|quatorze|quinze|seize|dix-sept|dix-huit|dix-neuf|vingt|vingt-et-une|vingt-deux|vingt-trois|vingt-quatre]  heures  ?[deux|trois|quatre|cinq|six|sept|huit|neuf|dix|onze|douze|treize|quatorze|quinze|seize|dix-sept|dix-huit|dix-neuf|vingt|vingt-et-un|vingt-et-une|vingt-deux|vingt-trois|vingt-quatre|vingt-cinq|vingt-six|vingt-sept|vingt-huit|vingt-neuf|trente|trente-et-un|trente-et-une|trente-deux|trente-trois|trente-quatre|trente-cinq|trente-six|trente-sept|trente-huit|trente-neuf|quarante|quarante-et-un|quarante-et-une|quarante-deux|quarante-trois|quarante-quatre|quarante-cinq|quarante-six|quarante-sept|quarante-huit|quarante-neuf|cinquante|cinquante-et-un|cinquante-et-une|cinquante-deux|cinquante-trois|cinquante-quatre|cinquante-cinq|cinquante-six|cinquante-sept|cinquante-huit|cinquante-neuf]¿
        <<- ~>> *


__purge_conditionnelle__
8845
8846
8847
8848
8849
8850
8851
8852

8853
8854
8855
8856
8857
8858
8859
8847
8848
8849
8850
8851
8852
8853

8854
8855
8856
8857
8858
8859
8860
8861







-
+







TEST: __redon2__ Les mêmes causes produisent/produisant les mêmes effets. (répétition)


@@@@
@@@@
@@@@
@@@@
@@@@GRAPH: après_purge_locutions                                                                   _
@@@@GRAPH: groupes_nominaux                                                                        _
@@@@
@@@@
@@@@
@@@@

!!
!!
9091
9092
9093
9094
9095
9096
9097







































































9098
9099
9100
9101
9102
9103
9104
9093
9094
9095
9096
9097
9098
9099
9100
9101
9102
9103
9104
9105
9106
9107
9108
9109
9110
9111
9112
9113
9114
9115
9116
9117
9118
9119
9120
9121
9122
9123
9124
9125
9126
9127
9128
9129
9130
9131
9132
9133
9134
9135
9136
9137
9138
9139
9140
9141
9142
9143
9144
9145
9146
9147
9148
9149
9150
9151
9152
9153
9154
9155
9156
9157
9158
9159
9160
9161
9162
9163
9164
9165
9166
9167
9168
9169
9170
9171
9172
9173
9174
9175
9176
9177







+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+







        -1>> quelques                                                                       # Il manque un “s” à « quelque » ou « \2 » doit être au singulier.

TEST: {{Quelque}} amis


## Pluriels épicènes

__gn_les_accord__
    ,  les  *WORD
        <<- /gn/ ( morph(\3, ":[NAQ].*:s", "*") and not (value(>1, "|et|ou|") and morph(>2, ":[NAQ]")) )
            or \3 in aREGULARPLURAL
        -3>> =suggPlur(\3)                                                                  # Accord de nombre erroné : « \3 » devrait être au pluriel.

    *WORD  les  *WORD
        <<- /gn/ morph(\2, ":D")
            and ( morph(\3, ":[NAQ].*:s", "*") or (morph(\3, ":[NAQ].*:s", ":[pi]|>avoir") and morph(\1, ":[RC]", ">(?:e[tn]|ou)/") and not (morph(\1, ":Rv") and morph(\3, ":Y"))) )
            and not (value(>1, "|et|ou|") and morph(>2, ":[NAQ]"))
        -3>> =suggPlur(\3)                                                                  # Accord de nombre erroné : « \3 » devrait être au pluriel.

    <start>  les  *WORD
        <<- /gn/ ( morph(\3, ":[NAQ].*:s", ":[ipYPGW]") and not (value(>1, "|et|ou|") and morph(>2, ":[NAQ]")) )
            or \3 in aREGULARPLURAL
        -3>> =suggPlur(\3)                                                                  # Accord de nombre erroné : « \3 » devrait être au pluriel.

TEST: ils viennent, les {{petit}}
TEST: Les {{tiret}}                                           ->> tirets
TEST: Les plus {{grand}} hommes.                              ->> grands
TEST: les {{véhicule}}                                        ->> véhicules
TEST: Les {{démoralisation}}.                                 ->> démoralisations
TEST: dans les {{usine}}                                      ->> usines


__gn_leurs_accord__
    leurs  *WORD
        <<- /gn/ (morph(\2, ":[NAQ].*:s", ":(?:[ipGW]|[123][sp])") and not (value(>1, "|et|ou|") and morph(>2, ":[NAQ]")))
            or \2 in aREGULARPLURAL
        -2>> =suggPlur(\2)                                                                  # Accord de nombre erroné avec « \1 » : « \2 » devrait être au pluriel.
        <<- /gn/ __also__ -1>> leur                                                         # Accord de nombre erroné avec « \2 ».

TEST: {{leurs}} {{action}}
TEST: {{leur}} {{données}}


__gn_det_pluriel_accord__
    [des|mes|tes|ses|nos|vos|quelques|lesdits|moult]  *WORD
        <<- (morph(\2, ":[NAQ].*:s", ":[ipGW]") and not (value(>1, "|et|ou|") and morph(>2, ":[NAQ]")))
            or \2 in aREGULARPLURAL
        -2>> =suggPlur(\2)                                                                  # Accord de nombre erroné : « \2 » devrait être au pluriel.

TEST: des {{pain}}                                            ->> pains
TEST: Quelques {{homme}}.                                     ->> hommes
TEST: plusieurs {{femme}} sont venues.
TEST: une personne ou plusieurs ayant décidé de façon déterminée et coordonnée de faire cuire la grenouille


__gn_ces_aux_pluriel_accord__
    [ces|aux]  *WORD
        <<- (morph(\2, ":[NAQ].*:s", ":[ipGW]") and not (value(>1, "|et|ou|") and morph(>2, ":[NAQ]")))
            or \2 in aREGULARPLURAL
        -2>> =suggPlur(\2)                                                                  # Accord de nombre erroné : « \2 » devrait être au pluriel.
        <<- __also__ and morph(\2, ">[bcdfglklmnpqrstvwxz].*:m", ":f") >>>
        <<- \1.endswith("x") or \1.endswith("X") -1>> au                                    # Accord de nombre erroné : « \2 » est au pluriel.
        <<- __else__ -1>> ce                                                                # Accord de nombre erroné : « \2 » est au pluriel.

TEST: {{ces}} {{détournement}} de fonds et ces vols
TEST: ces {{étudiant}} sont légion.
TEST: je vais {{aux}} {{cinéma}}
TEST: il l’a donné aux {{étudiant}}


__gn_plusieurs_accord__
    plusieurs  *WORD
        <<- (morph(\2, ":[NAQ].*:s", ":[ipGWP]") and not (value(>1, "|et|ou|") and morph(>2, ":[NAQ]")))
            or \2 in aREGULARPLURAL
        -2>> =suggPlur(\2)                                                                  # Accord de nombre erroné : « \2 » devrait être au pluriel.

TEST: plusieurs {{foi}} par jour.


## Autres pluriels

__gn_certains_accord__
    certains  *WORD
        <<- /gn/ morph(\2, ":[NAQ].*:f", ":[emGWP]") -1>> certaines                         # Accord de genre erroné : « \2 » est féminin.
        <<- /gn/ __also__ and hasMasForm(\2) -2>> =suggMasPlur(\2, True)                    # Accord de genre erroné : « \1 » est un déterminant masculin.
9126
9127
9128
9129
9130
9131
9132
9133
9134
9135
9136
9137
9138
9139
9140
9141
9142
9143
9144
9145
9146
9147
9148
9149
9150
9151
9152
9153
9154
9155
9156
9157
9158
9159
9160
9161
9162
9163
9164
9165
9166
9167
9168
9169
9170
9171
9172
9173
9174
9175
9176
9177
9178
9179
9180
9181
9182
9183
9184
9185
9186
9187
9188
9189
9190
9191
9192
9193
9194
9195
9196
9197
9198
9199
9200
9201
9202
9203
9204
9205
9206
9207
9208
9209
9210
9211
9212
9213
9214
9215
9216
9217
9218
9219
9220
9221
9222
9223
9224



9225
9226
9227
9228
9229
9230
9231
9232
9233
9234
9235
9236





9237
9238
9239
9240
9241
9242
9243
9244




9245
9246

9247
9248
9249
9250
9251
9252
9253
9254

9255
9256
9257
9258
9259
9260
9261
9262
9263






9264
9265
9266
9267
9268
9269
9270







9271
9272
9273
9274
9275
9276
9277
9199
9200
9201
9202
9203
9204
9205
9206























































































9207
9208


9209
9210
9211
9212
9213
9214
9215
9216
9217
9218





9219
9220
9221
9222
9223
9224
9225
9226
9227




9228
9229
9230
9231
9232

9233








9234
9235
9236
9237
9238





9239
9240
9241
9242
9243
9244
9245
9246
9247
9248
9249
9250
9251
9252
9253
9254
9255
9256
9257
9258
9259
9260
9261
9262
9263
9264
9265








-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-


-
-
+
+
+







-
-
-
-
-
+
+
+
+
+




-
-
-
-
+
+
+
+

-
+
-
-
-
-
-
-
-
-
+




-
-
-
-
-
+
+
+
+
+
+







+
+
+
+
+
+
+








TEST: Certaines {{danse}}
TEST: Certains {{chien}}
TEST: {{certains}} des {{nouvelles}} sont à côté de la plaque.
TEST: {{certaines}} des hommes
TEST: Un problème rapporté par certains est l’incapacité à trouver un partenaire


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






## Pluriels épicènes

__<i]/gn(gn_les_accord1)__
    , (les) +({w_2})  @@w,$
    <<- ( morph(\2, ":[NAQ].*:s") and not (after("^ +(?:et|ou) ") and morph(word(2), ":[NAQ]", True, False)) )
        or \2 in aREGULARPLURAL
    -2>> =suggPlur(@)                                                                               # Accord de nombre erroné : « \2 » devrait être au pluriel.
__[i]/gn(gn_les_accord2)__
    ({w_1}) +(les) +({w_2})  @@0,w,$
    <<- morph(\2, ":D", False) >>>
    <<- ( morph(\3, ":[NAQ].*:s")
        or (morphex(\3, ":[NAQ].*:s", ":[pi]|>avoir") and morphex(\1, ":[RC]", ">(?:e[tn]|ou)/") and not (morph(\1, ":Rv", False) and morph(\3, ":Y", False))) )
        and not (after("^ +(?:et|ou) ") and morph(word(2), ":[NAQ]", True, False))
    -3>> =suggPlur(@)                                                                               # Accord de nombre erroné : « \3 » devrait être au pluriel.
__[i]/gn(gn_les_accord3)__
    ^ *(les) +({w_2})  @@w,$
    <<- (morphex(\2, ":[NAQ].*:s", ":[ipYPGW]")
        and not (after("^ +(?:et|ou) ") and morph(word(2), ":[NAQ]", True, False)))
        or \2 in aREGULARPLURAL
    -2>> =suggPlur(@)                                                                               # Accord de nombre erroné : « \2 » devrait être au pluriel.

TEST: ils viennent, les {{petit}}
TEST: Les {{tiret}}                                           ->> tirets
TEST: Les plus {{grand}} hommes.                              ->> grands
TEST: les {{véhicule}}                                        ->> véhicules
TEST: Les {{démoralisation}}.                                 ->> démoralisations
TEST: dans les {{usine}}                                      ->> usines


__[i]/gn(gn_leurs_accord)__
    (leurs) +({w_2})  @@0,$
    <<- (morphex(\2, ":[NAQ].*:s", ":(?:[ipGW]|[123][sp])")
        and not (after("^ +(?:et|ou) ") and morph(word(2), ":[NAQ]", True, False)))
        or \2 in aREGULARPLURAL
    -2>> =suggPlur(@)                                                                               # Accord de nombre erroné avec « \1 » : « \2 » devrait être au pluriel.
    <<- __also__ -1>> leur                                                                          # Accord de nombre erroné avec « \2 ».

TEST: {{leurs}} {{action}}
TEST: {{leur}} {{données}}


__[i]/gn(gn_det_pluriel_accord)__
    (?:[dmts]es|[nv]os|quelques|lesdits|moult) +({w_2})  @@$
    <<- (morphex(\1, ":[NAQ].*:s", ":[ipGW]")
        and not (after("^ +(?:et|ou) ") and morph(word(2), ":[NAQ]", True, False))) or \1 in aREGULARPLURAL
    -1>> =suggPlur(@)                                                                               # Accord de nombre erroné : « \1 » devrait être au pluriel.

TEST: des {{pain}}                                            ->> pains
TEST: Quelques {{homme}}.                                     ->> hommes
TEST: plusieurs {{femme}} sont venues.
TEST: une personne ou plusieurs ayant décidé de façon déterminée et coordonnée de faire cuire la grenouille


__[i]/gn(gn_ces_aux_pluriel_accord)__
    (ces|aux) +({w_2})  @@0,$
    <<- (morphex(\2, ":[NAQ].*:s", ":[ipGW]")
        and not (after("^ +(?:et|ou) ") and morph(word(2), ":[NAQ]", True, False))) or \2 in aREGULARPLURAL
    -2>> =suggPlur(@)                                                                               # Accord de nombre erroné : « \1 » devrait être au pluriel.
    <<- __also__ and morphex(\2, ">[bcdfglklmnpqrstvwxz].*:m", ":f") >>>
    <<- \1.endswith("x") or \1.endswith("X") -1>> au                                                # Accord de nombre erroné : « \2 » est au pluriel.
    <<- __else__ -1>> ce                                                                            # Accord de nombre erroné : « \2 » est au pluriel.

TEST: {{ces}} {{détournement}} de fonds et ces vols
TEST: ces {{étudiant}} sont légion.
TEST: je vais {{aux}} {{cinéma}}
TEST: il l’a donné aux {{étudiant}}


__[i]/gn(gn_plusieurs_accord)__
    plusieurs +({w_2})  @@$
    <<- (morphex(\1, ":[NAQ].*:s", ":[ipGWP]")
        and not (after("^ +(?:et|ou) ") and morph(word(2), ":[NAQ]", True, False)))
        or \1 in aREGULARPLURAL
    -1>> =suggPlur(@)                                                                               # Accord de nombre erroné : « \1 » devrait être au pluriel.

TEST: plusieurs {{foi}} par jour.


## Cas particuliers

__[i]/gn(gn_det_plur_cas_particuliers)__
    (?:[cdmts]es|[nv]os|leurs) (même|point|son|ton) @@$ <<- -1>> \1s                                # Accord de nombre erroné : mettez au pluriel.
__gn_det_plur_cas_particuliers__
    [ces|des|mes|tes|ses|nos|vos|leurs|quelques] [même|point|son|ton]
        <<- /gn/ -2>> \1s                                                                   # Accord de nombre erroné : mettez au pluriel.

TEST: des {{son}} que nous entendons jour et nuit.
TEST: j’entends ces {{même}} âneries tous les jours


## Pluriel des groupes

__[i]/gn(gn_nombre_de_accord)__
    nombre d(?:e +|)({w_2})  @@$
    <<- (morphex(\1, ":[NAQ].*:s", ":[ip]|>o(?:nde|xydation|or)\\b") and morphex(word(-1), ":(?:G|[123][sp])", ":[AD]", True))
        or \1 in aREGULARPLURAL
    -1>> =suggPlur(@)                                                                               # Ici, « nombre de » devrait probablement être suivi d’un pluriel.
__gn_nombre_de_accord__
    nombre  [de|d]  *WORD
        <<- /gn/ (morph(\3, ":[NAQ].*:s", ":[ip]|>o(?:nde|xydation|r)/") and morph(<1, ":(?:G|[123][sp])|<start>", ":[AD]"))
            or \3 in aREGULARPLURAL
        -3>> =suggPlur(\3)                                                                  # Ici, « nombre de » devrait probablement être suivi d’un pluriel.

TEST: Je connais nombre d’{{emmerdeur}} et aucun n’est pire que lui.


__[i]/gn(gn_det_plur_groupe_de_accord)__
    (?:[ldcsmt]es|leurs|nos|vos|quelques) (?:centaine|milli(?:er|ion|iard)|d(?:ix|ouz)aine|multitude|horde)s? +d(?:e +|’)({w_2})  @@$
    <<- morphex(\1, ":[NAQ].*:s", ":[ip]") or \1 in aREGULARPLURAL
    -1>> =suggPlur(@)                                                                               # Mettre au pluriel.
__gn_det_groupe_de_accord__
    [un|une|le|la|ce|cette|mon|ton|son|ma|ta|sa|les|ces|des|mes|tes|ses|nos|vos|leurs|quelques]  [>centaine|>millier|>million|>milliard|>dixaine|>douzaine|>multitude|>horde]  [de|d’]  *WORD
        <<- /gn/ morph(\4, ":[NAQ].*:s", ":[ip]") or \4 in aREGULARPLURAL
        -4>> =suggPlur(\4)                                                                  # Avec des « \2 \3 \4 », mettre au pluriel.

TEST: des centaines de {{bête}} à cornes passèrent devant nous.
TEST: des centaines de {{bête}} à cornes passèrent devant nous.     ->> bêtes


__[i]/gn(gn_det_sing_groupe_de_accord)__
    (?:une?|l[ea]|ce(?:tte|)|s(?:on|a)|m(?:on|a)|t(?:on|a)) (?:centaine|milli(?:er|ion|iard)|d(?:ix|ouz)aine|multitude|horde) d(?:e +|’)({w_2}) @@$
    <<- morphex(\1, ":[NAQ].*:s", ":[ip]") or \1 in aREGULARPLURAL
    -1>> =suggPlur(@)                                                                               # Mettre au pluriel.

TEST: une multitude d’{{homme}}                               ->> hommes
TEST: une multitude d’{{homme}}                                     ->> hommes


## quelque adverbe

__[i]/gn(gn_quelque_adverbe1)__
    quelques(?= \d+) <<- ->> quelque                                                                # Devant un nombre, « quelque » est un adverbe, donc invariable.
__[i]/gn(gn_quelque_adverbe2)__
    (quelques) +({w1}) @@0,$
    <<- morph(\2, ":B.*:p", False) and \2 != "cents" -1>> quelque                                   # Devant un nombre, « quelque » est un adverbe, donc invariable.
__gn_quelque_adverbe__
    quelques  ~^\d+$
        <<- /gn/ -1>> quelque                                                               # Devant un nombre, « quelque » est un adverbe, donc invariable.

    quelques  @:B
        <<- /gn/ \2 != "cents" -1>> quelque                                                 # Devant un nombre, « quelque » est un adverbe, donc invariable.

TEST: Elle a eu {{quelques}} 300 réponses à sa petite-annonce.
TEST: Il commande {{quelques}} trois cents hommes.
TEST: {{Quelques}} 120 hommes                                 ->> Quelque
TEST: {{Quelques}} deux cents hommes.                         ->> Quelque
TEST: les quelque 2,5 millions d’habitants
TEST: les quelque 12 000 stations-service



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



## Nombres

__[i]/gn(gn_nombre_lettres_accord)__
    (d(?:eux|ix|ouze)|tr(?:ois|eize)|qua(?:tre(?:-vingt(?:s|-dix)|)|torze|rante)|cinq(?:uante|)|six|sept(?:ante|)|huit(?:ante|)|onze|quinze|seize|vingt|trente|soixante(?:-dix|)|cents?|octante|nonante) +({w_2})  @@0,$
    <<- (morph(\2, ":[NAQ].*:s")
15245
15246
15247
15248
15249
15250
15251
15252

15253
15254
15255
15256

15257
15258
15259
15260
15261
15262
15263
15233
15234
15235
15236
15237
15238
15239

15240
15241
15242
15243
15244
15245
15246
15247
15248
15249
15250
15251
15252







-
+




+










@@@@
@@@@
@@@@
@@@@
@@@@GRAPH: last_graph
@@@@GRAPH: last_graph                                                                              _
@@@@
@@@@
@@@@
@@@@



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