Grammalecte  Check-in [b85ddf9604]

Overview
Comment:[fr] ajustements [core] remove legacy code
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk | fr | core
Files: files | file ages | folders
SHA3-256: b85ddf960446ee77eda08c2e64cc5e4db3102f2c47e2ee9f97c170f6b7b66efa
User & Date: olr on 2020-05-09 11:50:28
Other Links: manifest | tags
Context
2020-05-09
12:21
[fr] faux positifs check-in: 5dbf99c441 user: olr tags: fr, trunk
11:50
[fr] ajustements [core] remove legacy code check-in: b85ddf9604 user: olr tags: core, fr, trunk
11:22
[core][fr] untested rules: display update check-in: ff05e3b47e user: olr tags: core, fr, trunk
Changes

Modified gc_lang/fr/modules-js/gce_analyseur.js from [ecd175c995] to [39d2630e9f].

    84     84           return true;
    85     85       }
    86     86       if (s.length > 1 && s.length < 16 && s.slice(0, 1).gl_isLowerCase() && (!s.slice(1).gl_isLowerCase() || /[0-9]/.test(s))) {
    87     87           return true;
    88     88       }
    89     89       return false;
    90     90   }
    91         -
    92         -
    93         -// Exceptions
    94         -
    95         -const aREGULARPLURAL = new Set(["abricot", "amarante", "aubergine", "acajou", "anthracite", "brique", "caca", "café",
    96         -                                "carotte", "cerise", "chataigne", "corail", "citron", "crème", "grave", "groseille",
    97         -                                "jonquille", "marron", "olive", "pervenche", "prune", "sable"]);

Modified gc_lang/fr/modules/gce_analyseur.py from [8b59546a79] to [e1e5c27c19].

    71     71   def mbUnit (s):
    72     72       "returns True it can be a measurement unit"
    73     73       if _zUnitSpecial.search(s):
    74     74           return True
    75     75       if 1 < len(s) < 16 and s[0:1].islower() and (not s[1:].islower() or _zUnitNumbers.search(s)):
    76     76           return True
    77     77       return False
    78         -
    79         -
    80         -#### Exceptions
    81         -
    82         -aREGULARPLURAL = frozenset(["abricot", "amarante", "aubergine", "acajou", "anthracite", "brique", "caca", "café", \
    83         -                            "carotte", "cerise", "chataigne", "corail", "citron", "crème", "grave", "groseille", \
    84         -                            "jonquille", "marron", "olive", "pervenche", "prune", "sable"])

Modified gc_lang/fr/rules.grx from [0c017307e3] to [98a90d18a9].

  2052   2052   TEST: Elle était tout feu, tout flamme.
  2053   2053   TEST: Ses rencards finissent par devenir lassants
  2054   2054   TEST: trois espèces de chauve-souris dont une est éteinte
  2055   2055   TEST: Ils sont source de conflits
  2056   2056   TEST: Votre question fait référence à un fait divers déroutant
  2057   2057   
  2058   2058   
         2059  +__da_couleurs_invariables__
         2060  +    *WORD [abricot|acajou|amarante|anthracite|aubergine|brique|caca|café|cannelle|caramel|carmin|carotte|cerise|châtaigne|chocolat|citron|corail|crème|fuchsia|groseille|havane|jonquille|marron|mastic|nacarat|ocre|olive|paille|parme|pastel|pervenche|pie|prune|sable|tabac|vermillon]
         2061  +        <<- morph(\1, ":(D.*:p|B)") =>> exclude(\2, ":A:e:i")
         2062  +
         2063  +
  2059   2064   
  2060   2065   !!!
  2061   2066   !!!
  2062   2067   !!! Étiquettes                                                                                    !!
  2063   2068   !!!
  2064   2069   !!!
  2065   2070   
................................................................................
 19509  19514   TEST: servi pas un style et une exigence historique remarquables
 19510  19515   
 19511  19516   
 19512  19517   ## Pluriels
 19513  19518   
 19514  19519   __gn_les_1m__
 19515  19520       ,  les  *WORD
 19516         -        <<- /gn/ ( morph(\3, ":[NA].*:s", "*") and not (value(>1, "|et|ou|") and morph(>2, ":[NA]")) )
 19517         -            or \3 in aREGULARPLURAL
        19521  +        <<- /gn/ morph(\3, ":[NA].*:s", "*") and not (value(>1, "|et|ou|") and morph(>2, ":[NA]"))
 19518  19522           -3>> =suggPlur(\3)                                                                  && Accord de nombre erroné : « \3 » devrait être au pluriel.
 19519  19523   
 19520  19524       *WORD  les  *WORD
 19521  19525           <<- /gn/ morph(\2, ":D")
 19522  19526               and ( morph(\3, ":[NA].*:s", "*") or (morph(\3, ":[NA].*:s", ":[pi]|>avoir/") and morph(\1, ":[RC]", ">(?:e[tn]|ou)/") and not (morph(\1, ":Rv") and morph(\3, ":Y"))) )
 19523  19527               and not (value(>1, "|et|ou|") and morph(>2, ":[NA]"))
 19524  19528               and not (value(\1, "|que|") and morph(<1, ">tel/") and morph(\3, ":3[sp]"))
 19525  19529           -3>> =suggPlur(\3)                                                                  && Accord de nombre erroné : « \3 » devrait être au pluriel.
 19526  19530   
 19527  19531       <start>  les  *WORD
 19528         -        <<- /gn/ ( morph(\3, ":[NA].*:s", ":[ipYPGW]") and not (value(>1, "|et|ou|") and morph(>2, ":[NA]")) )
 19529         -            or \3 in aREGULARPLURAL
        19532  +        <<- /gn/ morph(\3, ":[NA].*:s", ":[ipYPGW]") and not (value(>1, "|et|ou|") and morph(>2, ":[NA]"))
 19530  19533           -3>> =suggPlur(\3)                                                                  && Accord de nombre erroné : « \3 » devrait être au pluriel.
 19531  19534   
 19532  19535   TEST: ils viennent, les {{petit}}
 19533  19536   TEST: Les {{tiret}}                                           ->> tirets
 19534  19537   TEST: Les plus {{grand}} hommes.                              ->> grands
 19535  19538   TEST: les {{véhicule}}                                        ->> véhicules
 19536  19539   TEST: Les {{démoralisation}}.                                 ->> démoralisations
 19537  19540   TEST: dans les {{usine}}                                      ->> usines
        19541  +TEST: les {{abricot}}                                         ->> abricots
 19538  19542   TEST: tels que les décrit Macron
 19539  19543   
 19540  19544   
 19541  19545   __gn_les_2m__
 19542  19546       les  *WORD  *WORD
 19543  19547           <<- /gn/ morph(\1, ":D") and not value(<1, "|et|ou|de|d’|") and not \3.startswith("seul") >>>
 19544  19548           <<- /gn/ ((morph(\2, ":[NA].*:m", ":(?:B|e|G|V0|f)") and morph(\3, ":[NA].*:f", "*")) or (morph(\2, ":[NA].*:f", ":(?:B|e|G|V0|m)") and morph(\3, ":[NA].*:m", "*")))
................................................................................
 19567  19571   TEST: les moins éloignées possible
 19568  19572   TEST: Les besoins minimums en matière de sommeil sont-ils les mêmes d’un individu à l’autre ?
 19569  19573   TEST: cette attention de tous les instants portée à la boussole.
 19570  19574   
 19571  19575   
 19572  19576   __gn_leurs_1m__
 19573  19577       leurs  *WORD
 19574         -        <<- /gn/ (morph(\2, ":[NA].*:s", ":(?:[ipGW]|[123][sp])") and not (value(>1, "|et|ou|") and morph(>2, ":[NA]")))
 19575         -            or \2 in aREGULARPLURAL
        19578  +        <<- /gn/ morph(\2, ":[NA].*:s", ":(?:[ipGW]|[123][sp])") and not (value(>1, "|et|ou|") and morph(>2, ":[NA]"))
 19576  19579           -2>> =suggPlur(\2)                                                                  && Accord de nombre erroné avec « \1 » : « \2 » devrait être au pluriel.
 19577  19580           <<- /gn/ __also__ -1>> leur                                                         && Accord de nombre erroné avec « \2 ».
 19578  19581   
 19579  19582   TEST: {{leurs}} {{action}}
 19580  19583   TEST: {{leur}} {{données}}
        19584  +TEST: {{leurs}} {{abricot}}
 19581  19585   
 19582  19586   
 19583  19587   __gn_det_pluriel_1m__
 19584  19588       [des|mes|tes|ses|nos|vos|quelques|lesdits|lesdites|desdits|desdites|auxdits|auxdites|moult]  *WORD
 19585         -        <<- /gn/ (morph(\2, ":[NA].*:s", ":[ipGW]") and not (value(>1, "|et|ou|") and morph(>2, ":[NA]")))
 19586         -            or \2 in aREGULARPLURAL
        19589  +        <<- /gn/ morph(\2, ":[NA].*:s", ":[ipGW]") and not (value(>1, "|et|ou|") and morph(>2, ":[NA]"))
 19587  19590           -2>> =suggPlur(\2)                                                                  && Accord de nombre erroné : « \2 » devrait être au pluriel.
 19588  19591   
 19589  19592   TEST: des {{pain}}                                            ->> pains
 19590  19593   TEST: Quelques {{homme}}.                                     ->> hommes
 19591  19594   TEST: plusieurs {{femme}} sont venues.
        19595  +TEST: des {{abricot}}
 19592  19596   TEST: une personne ou plusieurs ayant décidé de façon déterminée et coordonnée de faire cuire la grenouille
 19593  19597   
 19594  19598   
 19595  19599   __gn_ces_aux_pluriel_1m__
 19596  19600       [ces|aux]  *WORD
 19597         -        <<- /gn/ (morph(\2, ":[NA].*:s", ":[ipGW]") and not (value(>1, "|et|ou|") and morph(>2, ":[NA]")))
 19598         -            or \2 in aREGULARPLURAL
        19601  +        <<- /gn/ morph(\2, ":[NA].*:s", ":[ipGW]") and not (value(>1, "|et|ou|") and morph(>2, ":[NA]"))
 19599  19602           -2>> =suggPlur(\2)                                                                  && Accord de nombre erroné : « \2 » devrait être au pluriel.
 19600  19603           <<- /gn/ __also__ and morph(\2, ">[bcdfglklmnpqrstvwxz].*:m", ":f") >>>
 19601  19604           <<- /gn/ \1.endswith("x") or \1.endswith("X") -1>> au                               && Accord de nombre erroné : « \2 » est au singulier.
 19602  19605           <<- /gn/ __else__ -1>> ce                                                           && Accord de nombre erroné : « \2 » est au singulier.
 19603  19606   
 19604  19607   TEST: {{ces}} {{détournement}} de fonds et ces vols
 19605  19608   TEST: ces {{étudiant}} sont légion.
 19606  19609   TEST: je vais {{aux}} {{cinéma}}
 19607  19610   TEST: il l’a donné aux {{étudiant}}
 19608  19611   TEST: aux {{personne}}
        19612  +TEST: clafoutis aux {{abricot}}
 19609  19613   
 19610  19614   
 19611  19615   __gn_det_epi_plur_2m__
 19612  19616       [ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs|aux|moult]  *WORD  *WORD
 19613  19617           <<- /gn/ not value(<1, "|et|ou|de|d’|au|aux|") and not \3.startswith("seul") >>>
 19614  19618           <<- /gn/ ((morph(\2, ":[NA].*:m", ":(?:B|e|G|V0|f)") and morph(\3, ":[NA].*:f", "*")) or (morph(\2, ":[NA].*:f", ":(?:B|e|G|V0|m)") and morph(\3, ":[NA].*:m", "*")))
 19615  19619               and not apposition(\2, \3)
................................................................................
 19677  19681   TEST: Des {{chambres}} plus ou moins fortement {{éclairé}}.
 19678  19682   TEST: Les couleurs rouge, jaune et verte ne doivent pas être utilisées
 19679  19683   TEST: des passeports américain, canadien, néerlandais, allemand et britannique.
 19680  19684   
 19681  19685   
 19682  19686   __gn_plusieurs_1m__
 19683  19687       plusieurs  *WORD
 19684         -        <<- /gn/ (morph(\2, ":[NA].*:s", ":[ipGWP]") and not (value(>1, "|et|ou|") and morph(>2, ":[NA]")))
 19685         -            or \2 in aREGULARPLURAL
        19688  +        <<- /gn/ morph(\2, ":[NA].*:s", ":[ipGWP]") and not (value(>1, "|et|ou|") and morph(>2, ":[NA]"))
 19686  19689           -2>> =suggPlur(\2)                                                                  && Accord de nombre erroné : « \2 » devrait être au pluriel.
 19687  19690   
 19688  19691   TEST: plusieurs {{femme}}
 19689  19692   TEST: plusieurs {{foi}} par jour.
        19693  +TEST: plusieurs {{abricot}}
 19690  19694   
 19691  19695   
 19692  19696   ## Cas particuliers
 19693  19697   __gn_det_plur_cas_particuliers__
 19694  19698       [ces|des|mes|tes|ses|nos|vos|leurs|quelques|quels] [même|point|son|ton]
 19695  19699           <<- /gn/ -2>> \2s                                                                   && Accord de nombre erroné : mettez au pluriel.
 19696  19700   
................................................................................
 19725  19729   
 19726  19730   
 19727  19731   ## certains / certaines
 19728  19732   __gn_certains_1m__
 19729  19733       certains  *WORD
 19730  19734           <<- /gn/ morph(\2, ":[NA].*:f", ":[emGWP]") -1>> certaines                          && Accord de genre erroné : « \2 » est féminin.
 19731  19735           <<- /gn/ __also__ and hasMasForm(\2) -2>> =suggMasPlur(\2, True)                    && Accord de genre erroné : « \1 » est un déterminant masculin.
 19732         -        <<- /gn/ ( morph(\2, ":[NA].*:s", ":(?:[ipGWP]|V0)") and not (value(>1, "|et|ou|") and morph(>2, ":[NA]")) )
 19733         -            or \1 in aREGULARPLURAL
        19736  +        <<- /gn/ morph(\2, ":[NA].*:s", ":(?:[ipGWP]|V0)") and not (value(>1, "|et|ou|") and morph(>2, ":[NA]"))
 19734  19737           -2>> =suggPlur(\2)                                                                  && Accord de nombre erroné : « \2 » devrait être au pluriel.
 19735  19738   
 19736  19739   __gn_certains_des_1m__
 19737  19740       certains  des  *WORD
 19738  19741           <<- /gn/ morph(\3, ":[NA].*:f", ":[emGW]") -1>> certaines                           && Accord de genre erroné : « \3 » est féminin.
 19739  19742           <<- /gn/ __also__ and hasMasForm(\3) -3>> =suggMasPlur(\3, True)                    && Accord de genre erroné : « \1 » est un déterminant masculin.
 19740  19743   
 19741  19744   __gn_certaines_1m__
 19742  19745       certaines  *WORD
 19743  19746           <<- /gn/ morph(\2, ":[NA].*:m", ":[efGWP]") -1>> certains                           && Accord de genre erroné : « \2 » est masculin.
 19744  19747           <<- /gn/ __also__ and hasFemForm(\2) -2>> =suggFemPlur(\2, True)                    && Accord de genre erroné : « \1 » est un déterminant féminin.
 19745         -        <<- /gn/ ( morph(\2, ":[NA].*:s", ":[ipGWP]") and not (value(>1, "|et|ou|") and morph(>2, ":[NA]")) )
 19746         -            or \2 in aREGULARPLURAL
        19748  +        <<- /gn/ morph(\2, ":[NA].*:s", ":[ipGWP]") and not (value(>1, "|et|ou|") and morph(>2, ":[NA]"))
 19747  19749           -2>> =suggPlur(\2)                                                                  && Accord de nombre erroné : « \2 » devrait être au pluriel.
 19748  19750   
 19749  19751   __gn_certaines_des_1m__
 19750  19752       certaines  des  *WORD
 19751  19753           <<- /gn/ morph(\3, ":[NA].*:m", ":[efGW]") -1>> certains                            && Accord de genre erroné : « \3 » est masculin.
 19752  19754           <<- /gn/ __also__ and hasFemForm(\3) -3>> =suggFemPlur(\3, True)                    && Accord de genre erroné : « \1 » est un déterminant féminin.
 19753  19755   
................................................................................
 20039  20041   TEST: celles {{perdue}} aura une pénalité
 20040  20042   TEST: celles venues chanter doivent se rendre là-bas.
 20041  20043   
 20042  20044   
 20043  20045   ## Nombres
 20044  20046   __gn_nombre_lettres_1m__
 20045  20047       $:B:e:p  *WORD
 20046         -        <<- /gn/ not value(\1, "|neuf|mille|") and ( (morph(\2, ":[NA].*:s", "*") and not value(\2, "|maximum|minimum|multiplié|divisé|janvier|février|mars|avril|mai|juin|juillet|août|aout|septembre|octobre|novembre|décembre|rue|route|ruelle|place|boulevard|avenue|allée|chemin|sentier|square|impasse|cour|quai|chaussée|côte|vendémiaire|brumaire|frimaire|nivôse|pluviôse|ventôse|germinal|floréal|prairial|messidor|thermidor|fructidor|") )
 20047         -            or \2 in aREGULARPLURAL) and not re.search("^[IVXLDM]+$", \1)
        20048  +        <<- /gn/ not value(\1, "|neuf|mille|") and morph(\2, ":[NA].*:s", "*") and not value(\2, "|maximum|minimum|multiplié|divisé|janvier|février|mars|avril|mai|juin|juillet|août|aout|septembre|octobre|novembre|décembre|rue|route|ruelle|place|boulevard|avenue|allée|chemin|sentier|square|impasse|cour|quai|chaussée|côte|vendémiaire|brumaire|frimaire|nivôse|pluviôse|ventôse|germinal|floréal|prairial|messidor|thermidor|fructidor|")
        20049  +            and not re.search("^[IVXLDM]+$", \1)
 20048  20050           -2>> =suggPlur(\2)                                                                  && Accord de nombre erroné avec « \1 » : « \2 » devrait être au pluriel.
 20049  20051   
 20050  20052       neuf  *WORD
 20051         -        <<- /gn/ ( morph(\2, ":[NA].*:s", "*") and not morph(<1, ":N.*:m:[is]") and not value(\2, "|maximum|minimum|multiplié|divisé|janvier|février|mars|avril|mai|juin|juillet|août|aout|septembre|octobre|novembre|décembre|rue|route|ruelle|place|boulevard|avenue|allée|chemin|sentier|square|impasse|cour|quai|chaussée|côte|vendémiaire|brumaire|frimaire|nivôse|pluviôse|ventôse|germinal|floréal|prairial|messidor|thermidor|fructidor|") )
 20052         -            or \2 in aREGULARPLURAL
        20053  +        <<- /gn/ morph(\2, ":[NA].*:s", "*") and not morph(<1, ":N.*:m:[is]") and not value(\2, "|maximum|minimum|multiplié|divisé|janvier|février|mars|avril|mai|juin|juillet|août|aout|septembre|octobre|novembre|décembre|rue|route|ruelle|place|boulevard|avenue|allée|chemin|sentier|square|impasse|cour|quai|chaussée|côte|vendémiaire|brumaire|frimaire|nivôse|pluviôse|ventôse|germinal|floréal|prairial|messidor|thermidor|fructidor|")
 20053  20054           -2>> =suggPlur(\2)                                                                  && Accord de nombre erroné avec « \1 » : « \2 » devrait être au pluriel.
 20054  20055   
 20055  20056       mille  *WORD
 20056         -        <<- /gn/ not value(\2, "|maximum|minimum|multiplié|divisé|") and (morph(\2, ":[NA].*:s", "*") or \1 in aREGULARPLURAL) and not value(<1, "|le|un|ce|du|")
        20057  +        <<- /gn/ not value(\2, "|maximum|minimum|multiplié|divisé|") and morph(\2, ":[NA].*:s", "*") and not value(<1, "|le|un|ce|du|")
 20057  20058           -2>> =suggPlur(\2)                                                                  && Accord de nombre erroné avec « \1 » : « \2 » devrait être au pluriel.
 20058  20059   
 20059  20060   TEST: ce sont trois {{idiot}} pas foutus de trouver leur chemin avec un GPS.        ->> idiots
 20060  20061   TEST: Il a abandonné neuf {{enfant}}.                                               ->> enfants
 20061  20062   TEST: On peut trouver mille {{travailleur}} d’un claquement de doigts.              ->> travailleurs
 20062  20063   TEST: Il y a quatre cents {{mot}} dans la phrase.                                   ->> mots
 20063  20064   TEST: cent {{mot}}                                                                  ->> mots
................................................................................
 20075  20076   __gn_nombre_chiffres_1m__
 20076  20077       [0|1|01]  @:[NAQ].*:p¬*
 20077  20078           <<- /gn/ space_after(\1, 1, 1) and not value(\2, "|Rois|Corinthiens|Thessaloniciens|")
 20078  20079           -2>> =suggSing(\2)                                                                  && Accord de nombre erroné avec « \1 » : « \2 » devrait être au singulier.
 20079  20080   
 20080  20081       *NUM  *WORD
 20081  20082           <<- /gn/ space_after(\1, 1, 1) and not value(<1, "|/|") and not re.search("^0*[01](?:,[0-9]+|)$", \1) and not morph(<1, ":N")
 20082         -            and ( (morph(\2, ":[NA].*:s", "*") and not value(\2, "|maximum|minimum|multiplié|divisé|janvier|février|mars|avril|mai|juin|juillet|août|aout|septembre|octobre|novembre|décembre|rue|route|ruelle|place|boulevard|avenue|allée|chemin|sentier|square|impasse|cour|quai|chaussée|côte|vendémiaire|brumaire|frimaire|nivôse|pluviôse|ventôse|germinal|floréal|prairial|messidor|thermidor|fructidor|"))
 20083         -            or \1 in aREGULARPLURAL )
        20083  +            and morph(\2, ":[NA].*:s", "*") and not value(\2, "|maximum|minimum|multiplié|divisé|janvier|février|mars|avril|mai|juin|juillet|août|aout|septembre|octobre|novembre|décembre|rue|route|ruelle|place|boulevard|avenue|allée|chemin|sentier|square|impasse|cour|quai|chaussée|côte|vendémiaire|brumaire|frimaire|nivôse|pluviôse|ventôse|germinal|floréal|prairial|messidor|thermidor|fructidor|")
 20084  20084           -2>> =suggPlur(\2)                                                                  && Accord de nombre erroné avec « \1 » : « \2 » devrait être au pluriel.
 20085  20085   
 20086  20086       *NUM  *WORD  *WORD
 20087  20087           <<- /gn/ not value(\2, "|maximum|minimum|fois|multiplié|divisé|janvier|février|mars|avril|mai|juin|juillet|août|aout|septembre|octobre|novembre|décembre|rue|route|ruelle|place|boulevard|avenue|allée|chemin|sentier|square|impasse|cour|quai|chaussée|côte|vendémiaire|brumaire|frimaire|nivôse|pluviôse|ventôse|germinal|floréal|prairial|messidor|thermidor|fructidor|")
 20088  20088               and not re.search("^0*[01](?:,[0-9]+|)$", \1) and not value(<1, "|et|ou|de|d’|") and not morph(\3, ">(?:seule|maximum|minimum)/") >>>
 20089  20089           <<- /gn/ ((morph(\2, ":[NA].*:m", ":(?:B|e|G|V0|f)") and morph(\3, ":[NA].*:f", "*")) or (morph(\2, ":[NA].*:f", ":(?:B|e|G|V0|m)") and morph(\3, ":[NA].*:m", "*")))
 20090  20090               and not apposition(\2, \3)
................................................................................
 20705  20705   
 20706  20706   
 20707  20707   #### Groupes, regroupements, collections, etc.
 20708  20708   
 20709  20709   ## Pluriel des groupes
 20710  20710   __sgpl_nombre_de_1m__
 20711  20711       nombre  [de|d’]  *WORD
 20712         -        <<- /sgpl/ (morph(\3, ":[NA].*:s", ":[ip]|>o(?:nde|xydation|r)/") and morph(<1, ":(?:G|[123][sp])|<start>", ":[AD]"))
 20713         -            or \3 in aREGULARPLURAL
        20712  +        <<- /sgpl/ morph(\3, ":[NA].*:s", ":[ip]|>o(?:nde|xydation|r)/") and morph(<1, ":(?:G|[123][sp])|<start>|>,", ":[AD]")
 20714  20713           -3>> =suggPlur(\3)                                                                  && Ici, « nombre de » devrait probablement être suivi d’un pluriel.
 20715  20714   
 20716  20715   TEST: Je connais nombre d’{{emmerdeur}} et aucun n’est pire que lui.
 20717  20716   
 20718  20717   
 20719  20718   __sgpl_det_groupe_de_1m__
 20720  20719       [un|une|le|la|ce|cette|mon|ton|son|ma|ta|sa|les|ces|des|mes|tes|ses|nos|vos|leurs|quelques|plusieurs]
 20721  20720           || [>dizaine|>douzaine||>vingtaine|>trentaine|>quarantaine|>cinquantaine|>soixantaine|>centaine|>millier|>million|>milliard|>multitude|>horde]  [de|d’]  *WORD
 20722         -        <<- /sgpl/ morph(\4, ":[NA].*:s", ":[ip]|>fraude/") or \4 in aREGULARPLURAL
        20721  +        <<- /sgpl/ morph(\4, ":[NA].*:s", ":[ip]|>fraude/")
 20723  20722           -4>> =suggPlur(\4)                                                                  && Avec \1 « \2 \3… », mettre au pluriel “\4” s’il y en a bien plusieurs.
 20724  20723   
 20725  20724       [un|une|le|la|ce|cette|mon|ton|son|ma|ta|sa|les|ces|des|mes|tes|ses|nos|vos|leurs|quelques|plusieurs] >groupe [d’|de] [écoutes|paroles]
 20726  20725           <<- /sgpl/ -4>> =suggSing(\4)                                                       && Mettez au singulier.
 20727  20726   
 20728  20727   TEST: des centaines de {{bête}} à cornes passèrent devant nous.     ->> bêtes
 20729  20728   TEST: une multitude d’{{homme}}                                     ->> hommes