Grammalecte  Check-in [49dbba531c]

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:[fr] faux positifs (OCR) et casse
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk | fr
Files: files | file ages | folders
SHA3-256:49dbba531c3ddd48f4fc5e739a3206cb0423711a247fb80cf513165f42405500
User & Date: olr 2019-04-15 20:00:09
Context
2019-04-16
14:16
[fx] grammar checking: autorefresh after edition check-in: 6bd3d5409b user: olr tags: fx, trunk
2019-04-15
20:00
[fr] faux positifs (OCR) et casse check-in: 49dbba531c user: olr tags: fr, trunk
2019-04-14
20:24
[fr] faux positif check-in: 30f8e2f6b3 user: olr tags: fr, trunk
Changes

Changes to gc_lang/fr/rules.grx.

105
106
107
108
109
110
111

112
113
114
115
116
117
118
119
120

121
122
123
124
125
126
127
...
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
....
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
....
1643
1644
1645
1646
1647
1648
1649


1650
1651
1652
1653
1654
1655
1656
....
2210
2211
2212
2213
2214
2215
2216

























2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
....
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
....
3911
3912
3913
3914
3915
3916
3917
3918

3919
3920
3921
3922
3923
3924
3925
....
8739
8740
8741
8742
8743
8744
8745
8746
8747
8748
8749
8750
8751
8752
8753
8754
....
8769
8770
8771
8772
8773
8774
8775
8776
8777
8778
8779
8780
8781
8782
8783
8784
8785
8786
8787
8788
8789
8790
8791
8792
OPTPRIORITY/ocr:    3

# COLORS are must be described with the HSL format (0-360, 0-100 %, 0-100 %) [don’t write the sign %]
COLOR/orange:       30,70,50
COLOR/orange2:      40,90,50
COLOR/violet:       270,45,35
COLOR/bleu:         210,50,50

COLOR/fuschia:      300,30,40
COLOR/cyan:         180,50,40
COLOR/grey:         0,50,50
COLOR/orange_vif:   30,100,40
COLOR/orange2_vif:  50,100,40
COLOR/violet_vif:   270,100,40
COLOR/bleu_vif:     210,100,30
COLOR/vert_vif:     120,100,30
COLOR/cyan_vif:     180,100,40


OPTCOLORTHEME:      Default     Writer
OPTCOLOR/typo:      orange      orange_vif
OPTCOLOR/apos:      orange2     orange2_vif
OPTCOLOR/eepi:      orange2     orange2_vif
OPTCOLOR/esp:       orange      orange_vif
OPTCOLOR/tab:       orange      orange_vif
................................................................................
OPTCOLOR/virg:      orange      orange_vif
OPTCOLOR/poncfin:   orange      orange_vif
OPTCOLOR/unit:      orange      orange_vif
OPTCOLOR/nf:        orange      orange_vif
OPTCOLOR/liga:      orange      orange_vif
OPTCOLOR/mapos:     orange      orange_vif
OPTCOLOR/chim:      orange      orange_vif
OPTCOLOR/ocr:       violet      violet_vif
OPTCOLOR/conf:      violet      violet_vif
OPTCOLOR/sgpl:      bleu        bleu_vif
OPTCOLOR/gn:        bleu        bleu_vif
OPTCOLOR/infi:      fuschia     vert_vif
OPTCOLOR/conj:      fuschia     vert_vif
OPTCOLOR/ppas:      fuschia     vert_vif
OPTCOLOR/imp:       fuschia     vert_vif
................................................................................
        <<- __else__ and not \0.isdigit() ->> =\0.replace("O", "0").replace("I", "1")               # Erreur de numérisation ?

TEST: __ocr__ {{II}} pleut tout le temps.
TEST: __ocr__ En l’an {{2OO1}}, tout commença.


## Casse
__[s]/ocr(ocr_casse1)__
    [A-ZÉÈÂÊÎÔ]{w_1}
    <<- \0.istitle() and before("\\w") >>>
    <<- morph(\0, ":G", ":M") ->> =\0.lower()                                                       # Erreur de numérisation ? Casse improbable.
    <<- __else__ and morph(\0, ":[123][sp]", ":[MNA]|>Est/") ->> =\0.lower()                        # Erreur de numérisation ? Casse improbable.

TEST: __ocr__ votre ami la regarde, {{Vous}} ne l’avez pas achetée
TEST: __ocr__ pour accommoder son regard, {{La}} lourde forme demeure
TEST: __ocr__ parler de Nicole, {{Le}} sommeil ne vient pas.
TEST: __ocr__ a fait de toi, Charles, {{Tu}} étais beau quand
TEST: __ocr__ s’habituer à se faire servir, {{Au}} début ça
TEST: __ocr__ Tu as tué ce petit garçon, Henri, {{Et}} tu le sais.
TEST: __ocr__ d’un fil de plastique transparent, {{Il}} l’agite
TEST: __ocr__ sur une glace noire {{Les}} lumières du port
TEST: __ocr__ le roulis du bateau {{Le}} faisant heurter
TEST: __ocr__ si vous {{La}} désirez
TEST: __ocr__ sa main se referme sur {{Je}} livre


__[s]/ocr(ocr_casse2)__
    {w2}-(On|Ils?|Elles?|Tu|Je|Nous|Vous|Mêmes?|Ci|Là|Une?s) @@$
    <<- -1>> =\1.lower()                                                                            # Erreur de numérisation ? Casse douteuse.

TEST: __ocr__ Part-{{On}} demain ?
TEST: __ocr__ À ce compte-{{Ci}}, on n’en viendra jamais à bout.
TEST: __ocr__ Quelques-{{Uns}} sont incapables d’y parvenir.


__[s>/ocr(ocr_casse3)__
    [LDNMTSCÇ]’
    <<- before("\\w") ->> =\0.lower()                                                               # Erreur de numérisation ? Casse douteuse.

TEST: __ocr__ regarde dans l’obscurité de {{L’}}entrepôt


## Lettres isolées
# Note: l’option “mapos” cherche les apostrophes manquantes après les lettres l, d, n, m, t, s, j, c, ç
__[s]/ocr(ocr_lettres_isolées)!2__
    \w(?!’)
    <<- not re.search("[0-9aàAÀyYdlnmtsjcçDLNMTSJCÇ_]", \0) and not before("\\d[   ]+$") and not (\0.isupper() and after0(r"^\."))
    ->> _           # Lettre isolée : erreur de numérisation ?
................................................................................
__[i>/typo(typo_quelque)__
    (quelqu[’'])(?!une?)  @@0
        <<- -1>> "quelque "                                             # Pas d’élision autorisée sur “quelque”, sauf avec “quelqu’un” ou “quelqu’une”.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=1745

TEST: {{Quelqu’}}absurde que ce soit, il faut y céder.
TEST: quelqu’un vient.
TEST: elle s’en est allée avec quelqu’une…





@@@@
@@@@
@@@@
@@@@
................................................................................
@@@@GRAPH: ocr                                                                                     _
@@@@
@@@@
@@@@
@@@@

# This graph is parsed only if option <ocr> is activated.


























# virgules
__ocr_virgules__
    [il|le|la|l’|les|de|d’|ne|n’|me|m’|te|t’|se|s’|à|ce|cet|cette|mon|ma|ta|sa|mes|tes|ses|nos|vos|quelque|quelques|au|aux] ,
        <<- /ocr/ space_after(\1, 0, 0) and not \1.isupper() or value(\1, "|à|") ->> \1             # Erreur de numérisation ? Virgule superflue ?

TEST: __ocr__ Pierre entre pour {{se,}} rapprocher de L
TEST: __ocr__ je voudrais faire une question ou deux sur une maison de ce village, la… comment l’appelle-t-on ?


# âge / age
__ocr_age__
................................................................................
TEST: __ocr__ {{I’arrive}} demain.


# l’ / V / P
__ocr_l__
    ~^V.
        <<- \1.istitle() and before("\\w") and morph(\1, ":", ":M") >>>
        <<- spell(\1[1:]) ->> ="v"+\1[1:] + "|l’"+\1[1:]                                            # Erreur de numérisation ?
        <<- __else__ ->> ="v"+\1[1:]                                                                # Erreur de numérisation ?

    ~^P[aâeéêèiîïoôuy]
        <<- before("\\w") and morph(\1, ":", ":M") and spell(\1) ->> ="l’"+\1[1:] + "|p"+\1[1:]     # Erreur de numérisation ?

TEST: __ocr__ beaucoup de {{Vélos}} à Versailles.
TEST: __ocr__ avec {{Vagile}} méthode de notre amie Virginie, tout est possible.
TEST: __ocr__ Viens demain.
................................................................................
!!!! Accentuation des majuscules                                                                  !!

__maj_accents__
    [Etat|Etats|Eglise|Eglises|Ecole|Ecoles|Economie|Equipe|Equipes|Electricité|Electrique|Egalité|Element|Element|Eté|Epoux|Epouse|Epouses|Ethiopie|Erythrée|Egypte|Equateur|Elysée]
        <<- /maj/ ->> ="É"+\1[1:]                                                                   # Accentuez les majuscules.
        <<- ~>> ="É"+\1[1:]

TEST: Le budget de l’{{Etat}}.




!!
!!
!!!! Incohérences de base                                                                         !!
!!
................................................................................
__maj_unités__
    *NUM  [Mètre|Watt|Gramme|Seconde|Ampère|Kelvin|Mole|Candela|Candéla|Hertz|Henry|Newton|Pascal|Joule|Coulomb|Volt|Ohm|Farad|Tesla|Weber|Wéber|Radian|Stéradian|Lumen|Lux|Becquerel|Gray|Sievert|Siemens|Katal|Mètres|Watts|Grammes|Secondes|Ampères|Kelvins|Moles|Candelas|Candélas|Hertz|Henrys|Newtons|Pascals|Joules|Coulombs|Volts|Ohms|Farads|Teslas|Webers|Wébers|Radians|Stéradians|Lumens|Becquerels|Grays|Sieverts|Katals]
    @:B   [Mètre|Watt|Gramme|Seconde|Ampère|Kelvin|Mole|Candela|Candéla|Hertz|Henry|Newton|Pascal|Joule|Coulomb|Volt|Ohm|Farad|Tesla|Weber|Wéber|Radian|Stéradian|Lumen|Lux|Becquerel|Gray|Sievert|Siemens|Katal|Mètres|Watts|Grammes|Secondes|Ampères|Kelvins|Moles|Candelas|Candélas|Hertz|Henrys|Newtons|Pascals|Joules|Coulombs|Volts|Ohms|Farads|Teslas|Webers|Wébers|Radians|Stéradians|Lumens|Becquerels|Grays|Sieverts|Katals]
    *NUM  ~(?:Exa|P[ée]ta|Téra|Giga|Méga|Kilo|Hecto|Déc[ai]|Centi|Milli|Micro|Nano|Pico|Femto|Atto|Ze(?:pto|tta)|Yo(?:cto|etta))(?:mètre|watt|gramme|seconde|ampère|kelvin|mole|cand[eé]la|hertz|henry|newton|pascal|joule|coulomb|volt|ohm|farad|tesla|w[eé]ber|radian|stéradian|lumen|lux|becquerel|gray|sievert|siemens|katal)s?$
    @:B   ~(?:Exa|P[ée]ta|Téra|Giga|Méga|Kilo|Hecto|Déc[ai]|Centi|Milli|Micro|Nano|Pico|Femto|Atto|Ze(?:pto|tta)|Yo(?:cto|etta))(?:mètre|watt|gramme|seconde|ampère|kelvin|mole|cand[eé]la|hertz|henry|newton|pascal|joule|coulomb|volt|ohm|farad|tesla|w[eé]ber|radian|stéradian|lumen|lux|becquerel|gray|sievert|siemens|katal)s?$
        <<- /maj/ not \2.isupper() -2:>> =\2.lower()                # Pas de majuscule sur les unités de mesure.|https://fr.wikipedia.org/wiki/Unit%C3%A9_de_mesure

TEST: J’en veux 3 {{Mètres}}.
TEST: Elle en prendra vingt {{Grammes}}.



!!
!!
!!!! Locutions invariables                                                                        !!
!!
................................................................................

    comme [convenus|convenue|convenues]
        <<- /sgpl/ -2>> convenu                                                                     # Invariable. Implicitement, comme ce qui était convenu.

    comme [prévue|prévus|prévues]
        <<- /sgpl/ -2>> prévu                                                                       # Invariable. Implicitement, comme ce qui était prévu.


TEST: il y en a autant que {{prévus}}.
TEST: elles sont plus nombreuses plus que {{prévues}}
TEST: il y a moins de bouffe que {{prévue}}
TEST: comme {{annoncés}}, ils sont arrivés
TEST: moins loin que {{prévus}}                               ->> prévu
TEST: plus rapide que {{prévues}}                             ->> prévu
TEST: autant d’hommes que {{prévus}}                          ->> prévu
TEST: il y en a moins que {{prévues}}                         ->> prévu
TEST: comme {{convenus}}                                      ->> convenu



!!
!!
!!!! Tout, tous, toute, toutes                                                                    !!
!!







>









>







 







|







 







|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<







<
<
<
<
<
<
<







 







>
>







 







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




|







 







|
|







 







|
>







 







|
|







 







<



|
|
|
|
|
|







105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
...
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
....
1322
1323
1324
1325
1326
1327
1328
1329



















1330
1331
1332
1333
1334
1335
1336







1337
1338
1339
1340
1341
1342
1343
....
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
....
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
....
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
....
3914
3915
3916
3917
3918
3919
3920
3921
3922
3923
3924
3925
3926
3927
3928
3929
....
8743
8744
8745
8746
8747
8748
8749
8750
8751
8752
8753
8754
8755
8756
8757
8758
....
8773
8774
8775
8776
8777
8778
8779

8780
8781
8782
8783
8784
8785
8786
8787
8788
8789
8790
8791
8792
8793
8794
8795
OPTPRIORITY/ocr:    3

# COLORS are must be described with the HSL format (0-360, 0-100 %, 0-100 %) [don’t write the sign %]
COLOR/orange:       30,70,50
COLOR/orange2:      40,90,50
COLOR/violet:       270,45,35
COLOR/bleu:         210,50,50
COLOR/bleupr:       240,40,60
COLOR/fuschia:      300,30,40
COLOR/cyan:         180,50,40
COLOR/grey:         0,50,50
COLOR/orange_vif:   30,100,40
COLOR/orange2_vif:  50,100,40
COLOR/violet_vif:   270,100,40
COLOR/bleu_vif:     210,100,30
COLOR/vert_vif:     120,100,30
COLOR/cyan_vif:     180,100,40
COLOR/bleupr_vif:   240,100,60

OPTCOLORTHEME:      Default     Writer
OPTCOLOR/typo:      orange      orange_vif
OPTCOLOR/apos:      orange2     orange2_vif
OPTCOLOR/eepi:      orange2     orange2_vif
OPTCOLOR/esp:       orange      orange_vif
OPTCOLOR/tab:       orange      orange_vif
................................................................................
OPTCOLOR/virg:      orange      orange_vif
OPTCOLOR/poncfin:   orange      orange_vif
OPTCOLOR/unit:      orange      orange_vif
OPTCOLOR/nf:        orange      orange_vif
OPTCOLOR/liga:      orange      orange_vif
OPTCOLOR/mapos:     orange      orange_vif
OPTCOLOR/chim:      orange      orange_vif
OPTCOLOR/ocr:       bleupr      bleupr_vif
OPTCOLOR/conf:      violet      violet_vif
OPTCOLOR/sgpl:      bleu        bleu_vif
OPTCOLOR/gn:        bleu        bleu_vif
OPTCOLOR/infi:      fuschia     vert_vif
OPTCOLOR/conj:      fuschia     vert_vif
OPTCOLOR/ppas:      fuschia     vert_vif
OPTCOLOR/imp:       fuschia     vert_vif
................................................................................
        <<- __else__ and not \0.isdigit() ->> =\0.replace("O", "0").replace("I", "1")               # Erreur de numérisation ?

TEST: __ocr__ {{II}} pleut tout le temps.
TEST: __ocr__ En l’an {{2OO1}}, tout commença.


## Casse
__[s]/ocr(ocr_casse_pronom_vconj)__



















    {w2}-(On|Ils?|Elles?|Tu|Je|Nous|Vous|Mêmes?|Ci|Là|Une?s) @@$
    <<- -1>> =\1.lower()                                                                            # Erreur de numérisation ? Casse douteuse.

TEST: __ocr__ Part-{{On}} demain ?
TEST: __ocr__ À ce compte-{{Ci}}, on n’en viendra jamais à bout.
TEST: __ocr__ Quelques-{{Uns}} sont incapables d’y parvenir.









## Lettres isolées
# Note: l’option “mapos” cherche les apostrophes manquantes après les lettres l, d, n, m, t, s, j, c, ç
__[s]/ocr(ocr_lettres_isolées)!2__
    \w(?!’)
    <<- not re.search("[0-9aàAÀyYdlnmtsjcçDLNMTSJCÇ_]", \0) and not before("\\d[   ]+$") and not (\0.isupper() and after0(r"^\."))
    ->> _           # Lettre isolée : erreur de numérisation ?
................................................................................
__[i>/typo(typo_quelque)__
    (quelqu[’'])(?!une?)  @@0
        <<- -1>> "quelque "                                             # Pas d’élision autorisée sur “quelque”, sauf avec “quelqu’un” ou “quelqu’une”.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=1745

TEST: {{Quelqu’}}absurde que ce soit, il faut y céder.
TEST: quelqu’un vient.
TEST: elle s’en est allée avec quelqu’une…





@@@@
@@@@
@@@@
@@@@
................................................................................
@@@@GRAPH: ocr                                                                                     _
@@@@
@@@@
@@@@
@@@@

# This graph is parsed only if option <ocr> is activated.

## Casse
__ocr_casse__
    ~^[A-ZÉÈÂÊÎÔ].
        <<- \1.istitle() and before("\\w") and (morph(\1, ":G", ":M") or morph(\1, ":[123][sp]", ":[MNA]|>Est/"))
        -:>> =\1.lower()                                                                            # Erreur de numérisation ? Casse improbable.

    [L’|D’|N’|M’|T’|S’|C’|Ç’]
        <<- before("\\w") -:>> =\1.lower()                                                          # Erreur de numérisation ? Casse douteuse.

TEST: __ocr__ regarde dans l’obscurité de {{L’}}entrepôt                        ->> l’
TEST: __ocr__ votre ami la regarde, {{Vous}} ne l’avez pas achetée              ->> vous
TEST: __ocr__ pour accommoder son regard, {{La}} lourde forme demeure           ->> la
TEST: __ocr__ parler de Nicole, {{Le}} sommeil ne vient pas.                    ->> le
TEST: __ocr__ a fait de toi, Charles, {{Tu}} étais beau quand                   ->> tu
TEST: __ocr__ s’habituer à se faire servir, {{Au}} début ça                     ->> au
TEST: __ocr__ Tu as tué ce petit garçon, Henri, {{Et}} tu le sais.              ->> et
TEST: __ocr__ d’un fil de plastique transparent, {{Il}} l’agite                 ->> il
TEST: __ocr__ sur une glace noire {{Les}} lumières du port                      ->> les
TEST: __ocr__ le roulis du bateau {{Le}} faisant heurter                        ->> le
TEST: __ocr__ si vous {{La}} désirez                                            ->> la
TEST: __ocr__ sa main se referme sur {{Je}} livre                               ->> je
TEST: __ocr__ Ils étaient portés à croire que Danton et Robespierre ne mettraient aucun obstacle. Le 8 au soir, Robespierre était allé à la section Bonne-Nouvelle, avait invectivé violemment contre la Gironde. Pendant son discours, un des siens, qui l’attendait à la porte, disait qu’on devrait massacrer non les Girondins seulement, mais tous les signataires des fameuses pétitions.
TEST: __ocr__ Prends cette pelle et creuse.


# virgules
__ocr_virgules__
    [il|le|la|l’|les|de|d’|ne|n’|me|m’|te|t’|se|s’|à|ce|cet|cette|mon|ma|ta|sa|mes|tes|ses|nos|vos|quelque|quelques|au|aux] ,
        <<- space_after(\1, 0, 0) and not \1.isupper() or value(\1, "|à|") ->> \1                   # Erreur de numérisation ? Virgule superflue ?

TEST: __ocr__ Pierre entre pour {{se,}} rapprocher de L
TEST: __ocr__ je voudrais faire une question ou deux sur une maison de ce village, la… comment l’appelle-t-on ?


# âge / age
__ocr_age__
................................................................................
TEST: __ocr__ {{I’arrive}} demain.


# l’ / V / P
__ocr_l__
    ~^V.
        <<- \1.istitle() and before("\\w") and morph(\1, ":", ":M") >>>
        <<- spell(\1[1:]) -:>> ="v"+\1[1:] + "|l’"+\1[1:]                                           # Erreur de numérisation ?
        <<- __else__ -:>> ="v"+\1[1:]                                                               # Erreur de numérisation ?

    ~^P[aâeéêèiîïoôuy]
        <<- before("\\w") and morph(\1, ":", ":M") and spell(\1) ->> ="l’"+\1[1:] + "|p"+\1[1:]     # Erreur de numérisation ?

TEST: __ocr__ beaucoup de {{Vélos}} à Versailles.
TEST: __ocr__ avec {{Vagile}} méthode de notre amie Virginie, tout est possible.
TEST: __ocr__ Viens demain.
................................................................................
!!!! Accentuation des majuscules                                                                  !!

__maj_accents__
    [Etat|Etats|Eglise|Eglises|Ecole|Ecoles|Economie|Equipe|Equipes|Electricité|Electrique|Egalité|Element|Element|Eté|Epoux|Epouse|Epouses|Ethiopie|Erythrée|Egypte|Equateur|Elysée]
        <<- /maj/ ->> ="É"+\1[1:]                                                                   # Accentuez les majuscules.
        <<- ~>> ="É"+\1[1:]

TEST: Le budget de l’{{Etat}}.                                  ->> État




!!
!!
!!!! Incohérences de base                                                                         !!
!!
................................................................................
__maj_unités__
    *NUM  [Mètre|Watt|Gramme|Seconde|Ampère|Kelvin|Mole|Candela|Candéla|Hertz|Henry|Newton|Pascal|Joule|Coulomb|Volt|Ohm|Farad|Tesla|Weber|Wéber|Radian|Stéradian|Lumen|Lux|Becquerel|Gray|Sievert|Siemens|Katal|Mètres|Watts|Grammes|Secondes|Ampères|Kelvins|Moles|Candelas|Candélas|Hertz|Henrys|Newtons|Pascals|Joules|Coulombs|Volts|Ohms|Farads|Teslas|Webers|Wébers|Radians|Stéradians|Lumens|Becquerels|Grays|Sieverts|Katals]
    @:B   [Mètre|Watt|Gramme|Seconde|Ampère|Kelvin|Mole|Candela|Candéla|Hertz|Henry|Newton|Pascal|Joule|Coulomb|Volt|Ohm|Farad|Tesla|Weber|Wéber|Radian|Stéradian|Lumen|Lux|Becquerel|Gray|Sievert|Siemens|Katal|Mètres|Watts|Grammes|Secondes|Ampères|Kelvins|Moles|Candelas|Candélas|Hertz|Henrys|Newtons|Pascals|Joules|Coulombs|Volts|Ohms|Farads|Teslas|Webers|Wébers|Radians|Stéradians|Lumens|Becquerels|Grays|Sieverts|Katals]
    *NUM  ~(?:Exa|P[ée]ta|Téra|Giga|Méga|Kilo|Hecto|Déc[ai]|Centi|Milli|Micro|Nano|Pico|Femto|Atto|Ze(?:pto|tta)|Yo(?:cto|etta))(?:mètre|watt|gramme|seconde|ampère|kelvin|mole|cand[eé]la|hertz|henry|newton|pascal|joule|coulomb|volt|ohm|farad|tesla|w[eé]ber|radian|stéradian|lumen|lux|becquerel|gray|sievert|siemens|katal)s?$
    @:B   ~(?:Exa|P[ée]ta|Téra|Giga|Méga|Kilo|Hecto|Déc[ai]|Centi|Milli|Micro|Nano|Pico|Femto|Atto|Ze(?:pto|tta)|Yo(?:cto|etta))(?:mètre|watt|gramme|seconde|ampère|kelvin|mole|cand[eé]la|hertz|henry|newton|pascal|joule|coulomb|volt|ohm|farad|tesla|w[eé]ber|radian|stéradian|lumen|lux|becquerel|gray|sievert|siemens|katal)s?$
        <<- /maj/ not \2.isupper() -2:>> =\2.lower()                # Pas de majuscule sur les unités de mesure.|https://fr.wikipedia.org/wiki/Unit%C3%A9_de_mesure

TEST: J’en veux 3 {{Mètres}}.                           ->> mètres
TEST: Elle en prendra vingt {{Grammes}}.                ->> grammes



!!
!!
!!!! Locutions invariables                                                                        !!
!!
................................................................................

    comme [convenus|convenue|convenues]
        <<- /sgpl/ -2>> convenu                                                                     # Invariable. Implicitement, comme ce qui était convenu.

    comme [prévue|prévus|prévues]
        <<- /sgpl/ -2>> prévu                                                                       # Invariable. Implicitement, comme ce qui était prévu.


TEST: il y en a autant que {{prévus}}.
TEST: elles sont plus nombreuses plus que {{prévues}}
TEST: il y a moins de bouffe que {{prévue}}
TEST: comme {{annoncés}}, ils sont arrivés                      ->> annoncé
TEST: moins loin que {{prévus}}                                 ->> prévu
TEST: plus rapide que {{prévues}}                               ->> prévu
TEST: autant d’hommes que {{prévus}}                            ->> prévu
TEST: il y en a moins que {{prévues}}                           ->> prévu
TEST: comme {{convenus}}                                        ->> convenu



!!
!!
!!!! Tout, tous, toute, toutes                                                                    !!
!!