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: |
ebc7b7f3427b045162205c28851dc310 |
User & Date: | olr on 2018-07-27 18:11:45 |
Other Links: | branch diff | manifest | tags |
Context
2018-07-28
| ||
00:14 | [build] DARG: shorten building result display check-in: ffd3e274fa user: olr tags: build, rg | |
2018-07-27
| ||
18:11 | [fr] conversion: regex rules -> graph rules check-in: ebc7b7f342 user: olr tags: fr, rg | |
09:37 | [fr] conversion: regex rules -> graph rules check-in: 99d73d5fde user: olr tags: fr, rg | |
Changes
Modified gc_lang/fr/rules.grx from [7c180bd845] to [049bff94f6].
︙ | ︙ | |||
2869 2870 2871 2872 2873 2874 2875 | <<- /tu/ ->> Rhône-Alpes # Il manque les traits d’union. Saône et Loire <<- /tu/ ->> Saône-et-Loire # Il manque un trait d’union. [St|Ste] ~^[A-ZÉÈÎ] <<- /tu/ ->> \1-\2 | | | 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 | <<- /tu/ ->> Rhône-Alpes # Il manque les traits d’union. Saône et Loire <<- /tu/ ->> Saône-et-Loire # Il manque un trait d’union. [St|Ste] ~^[A-ZÉÈÎ] <<- /tu/ ->> \1-\2 # Il manque un trait d’union s’il s’agit d’une église, d’une cité, d’une communauté… S’il s’agit d’une personne, écrivez “saint” ou “sainte” sans majuscule, sans trait d’union. TEST: Émigrer au {{Royaume Uni}} TEST: Étudier en {{Grande Bretagne}} TEST: Vivre aux {{Pays Bas}} TEST: Il passe par {{Aix en Provence}} TEST: Qui se souvient de la {{Bosnie Herzégovine}} ? TEST: en {{Charente Maritime}} |
︙ | ︙ | |||
4815 4816 4817 4818 4819 4820 4821 | <<- /conf/ not \1.isupper() -1>> c’est # Confusion probable. Écrivez « c’est » pour dire « ceci est… ». c’ est @:N.*:p¬:(?:G|W|M|A.*:[si]) <<- /conf/ -1:2>> ces|ses # Confusion. Exemples : c’est facile ; ces chats (désignation) ; ses chats (possession)… TEST: {{ses}} au-dessus de ses forces. TEST: {{ces}} comme la peste | | | 4815 4816 4817 4818 4819 4820 4821 4822 4823 4824 4825 4826 4827 4828 4829 | <<- /conf/ not \1.isupper() -1>> c’est # Confusion probable. Écrivez « c’est » pour dire « ceci est… ». c’ est @:N.*:p¬:(?:G|W|M|A.*:[si]) <<- /conf/ -1:2>> ces|ses # Confusion. Exemples : c’est facile ; ces chats (désignation) ; ses chats (possession)… TEST: {{ses}} au-dessus de ses forces. TEST: {{ces}} comme la peste TEST: car {{ses}} d’autre part TEST: {{ces}} qu’il y a tant de pertes TEST: {{ces}} jamais une bonne idée. TEST: {{c’est}} {{délires}} nous ennuient TEST: En 2015, c’est Paris et son agglomération qui… TEST: Ses pas de danse. |
︙ | ︙ | |||
5707 5708 5709 5710 5711 5712 5713 | # statue / statut / statu __conf_statu_statue_statut__ [statut|statue|status] quo <<- /conf/ ->> statu quo # Confusion. Écrivez “statu quo”.|https://fr.wiktionary.org/wiki/statu_quo | | | 5707 5708 5709 5710 5711 5712 5713 5714 5715 5716 5717 5718 5719 5720 5721 | # statue / statut / statu __conf_statu_statue_statut__ [statut|statue|status] quo <<- /conf/ ->> statu quo # Confusion. Écrivez “statu quo”.|https://fr.wiktionary.org/wiki/statu_quo statu ~¬^[qQ][uU][oO]$ <<- /conf/ -1>> statut|statue # Confusion : “statu” ne s’emploie que dans l’expression “statu quo”. TEST: Ça n’en finit pas, c’est le {{statut quo}}. TEST: Quelle splendide {{statu}}. # sur / sûr |
︙ | ︙ | |||
8573 8574 8575 8576 8577 8578 8579 | chaque [année|semaine|journée|décennie] @¬:(?:A.*:[fe]:[si]|Oo|[123][sp]) <<- ~1:2>> * chaque [an|jour|mois] @¬:(?:A.*:[me]:[si]|Oo|[123][sp]) <<- ~1:2>> * | | | 8573 8574 8575 8576 8577 8578 8579 8580 8581 8582 8583 8584 8585 8586 8587 | chaque [année|semaine|journée|décennie] @¬:(?:A.*:[fe]:[si]|Oo|[123][sp]) <<- ~1:2>> * chaque [an|jour|mois] @¬:(?:A.*:[me]:[si]|Oo|[123][sp]) <<- ~1:2>> * d’ [avance|évidence] @¬:A.*:[fe]:[si] <<- ~1:2>> * dans l’ ensemble @¬:A.*:[me]:[si] <<- ~1:3>> * de ce fait @¬:A.*:[me]:[si] <<- ~1:3>> * |
︙ | ︙ | |||
8860 8861 8862 8863 8864 8865 8866 | !! !! !!!! Groupe nominal (1) !! !! !! | | < < | | > > > > > > > > > > > > > > > > > > > > > > > > | | 8860 8861 8862 8863 8864 8865 8866 8867 8868 8869 8870 8871 8872 8873 8874 8875 8876 8877 8878 8879 8880 8881 8882 8883 8884 8885 8886 8887 8888 8889 8890 8891 8892 8893 8894 8895 8896 8897 8898 8899 8900 8901 8902 8903 8904 8905 8906 8907 | !! !! !!!! Groupe nominal (1) !! !! !! ## l’ __gn_l_1m__ l’ @:[NAQ].*:p¬:[123][sp]|:[si] <<- /gn/ -2>> =suggSing(\2) # Accord de nombre erroné : “\2” devrait être au singulier. TEST: toute l’importance de l’{{accords}} musical. __gn_l_2m__ l’ @:[NA]¬* @:[NA]¬* <<- /gn/ not value(<1, "|et|ou|de|") and not value(\2, "|air|") and not morph(\3, ">seule/") >>> <<- /gn/ ( (morph(\2, ":m", "*") and morph(\3, ":f", "*")) or (morph(\2, ":f", "*") and morph(\3, ":m", "*")) ) and not apposition(\2, \3) -3>> =switchGender(\3, False) # Accord de genre erroné entre “\2” et “\3”. <<- /gn/ __also__ and hasFemForm(\2) -2>> =switchGender(\2) # Accord de genre erroné avec “\3”. <<- /gn/ morph(\2, ":[si]", "*") and morph(\3, ":p", "*") and not apposition(\2, \3) -3>> =suggSing(\3) # Accord de nombre erroné avec “\2” : “\3” devrait être au singulier. [et|ou|de] l’ @:[NA]¬* @:[NA]¬* <<- /gn/ not value(\3, "|air|") and not morph(\4, ">seule/") >>> <<- /gn/ ( (morph(\3, ":m", "*") and morph(\4, ":f", "*")) or (morph(\3, ":f", "*") and morph(\4, ":m", "*")) ) and not apposition(\3, \4) and not morph(<1, ":[NA]") -4>> =switchGender(\4, False) # Accord de genre erroné entre “\3” et “\4”. <<- /gn/ __also__ and hasFemForm(\3) -3>> =switchGender(\3) # Accord de genre erroné avec “\4”. <<- /gn/ morph(\3, ":[si]", "*") and morph(\4, ":p", "*") and not apposition(\3, \4) and not morph(<1, ":[NA]") -4>> =suggSing(\4) # Accord de nombre erroné avec “\3” : “\4” devrait être au singulier. TEST: L’{{amande}} {{amer}} TEST: l’{{amicale}} {{animal}} TEST: l’amour {{immortels}} TEST: du chien et de l’{{excellente}} {{collier}} qu’il avait autour du cou. TEST: du chien et de l’{{étonnante}} {{collier}} qu’il avait autour du cou. __gn_le_1m__ , le *WORD <<- /gn/ morph(\3, "@:[NAQ].*:f", ":(?:e|m|P|G|W|[123][sp]|Y)") -2>> =suggLesLa(\2) # Accord de genre erroné : « \3 » est féminin. <<- /gn/ __also__ and hasMasForm(\3) -3>> =suggMasSing(\3, True) # Accord de genre erroné : « \2 » est un déterminant masculin. <<- /gn/ __else__ and morph(\3, ":[NAQ].*:p") -3>> =suggMasSing(\3) # Accord de nombre erroné : « \3 » devrait être au singulier. <<- /gn/ __also__ -2>> les # Accord de nombre erroné : « \3 » est au pluriel. *WORD le *WORD |
︙ | ︙ | |||
8903 8904 8905 8906 8907 8908 8909 | TEST: {{Le}} démoralisation. ->> La TEST: {{Le}} Guyane française. ->> La TEST: avec {{le}} {{pile}} TEST: {{le}} {{publique}} TEST: {{Le}} {{pendue}} | | | | | | | | | | 8925 8926 8927 8928 8929 8930 8931 8932 8933 8934 8935 8936 8937 8938 8939 8940 8941 8942 8943 8944 8945 8946 8947 8948 8949 8950 8951 8952 8953 8954 8955 8956 8957 8958 8959 8960 8961 8962 8963 8964 8965 8966 8967 8968 8969 8970 8971 8972 8973 8974 8975 8976 8977 8978 8979 8980 8981 8982 8983 | TEST: {{Le}} démoralisation. ->> La TEST: {{Le}} Guyane française. ->> La TEST: avec {{le}} {{pile}} TEST: {{le}} {{publique}} TEST: {{Le}} {{pendue}} __gn_ledit_1m__ ledit *WORD <<- /gn/ morph(\2, ":[NAQ].*:f", ":[GWme]") -1>> ladite # Accord de genre erroné : « \2 » est féminin. <<- /gn/ __also__ and hasMasForm(\2) -2>> =suggMasSing(\2, True) # Accord de genre erroné : « \1 » est un déterminant masculin. <<- /gn/ morph(\2, ":[NAQ].*:p", ":[siGW]") -2>> =suggMasSing(\2) # Accord de nombre erroné : « \2 » devrait être au singulier. __gn_un_1m__ un *WORD <<- /gn/ morph(\2, ":[NAQ].*:f", ":(?:e|m|G|W|V0|3s|Y)") -1>> une # Accord de genre erroné : « \2 » est féminin. <<- /gn/ __also__ and hasMasForm(\2) -2>> =suggMasSing(\2, True) # Accord de genre erroné : « \1 » est un déterminant masculin. <<- /gn/ morph(\2, ":[NAQ].*:p", ":[siGW]") -2>> =suggMasSing(\2) # Accord de nombre erroné : « \2 » devrait être au singulier. __gn_un_des_1m__ un des *WORD <<- /gn/ morph(\3, ":[NAQ].*:f", ":(?:e|m|G|W|V0|3s)") -1>> une # Accord de genre erroné : « \2 » est féminin. <<- /gn/ __also__ and hasMasForm(\3) -3>> =suggMasPlur(\3, True) # Accord de genre erroné : « \1 » est un déterminant masculin. __gn_du_1m__ du *WORD <<- /gn/ morph(\2, ":[NAQ].*:f", ":[GWme]") -1>> de la # Accord de genre erroné : « \2 » est féminin. <<- /gn/ __also__ and hasMasForm(\2) -2>> =suggMasSing(\2, True) # Accord de genre erroné : « \1 » est un déterminant masculin. <<- /gn/ morph(\2, ":[NAQ].*:p", ":[siGW]") -2>> =suggMasSing(\2) # Accord de nombre erroné : « \2 » devrait être au singulier. __gn_cet_1m__ cet *WORD <<- /gn/ morph(\2, ":[NAQ].*:f", ":[GWme]") -1>> cette # Accord de genre erroné : « \2 » est féminin. <<- /gn/ __also__ and hasMasForm(\2) -2>> =suggMasSing(\2, True) # Accord de genre erroné : « \1 » est un déterminant masculin. <<- /gn/ morph(\2, ">[bcçdfgjklmnpqrstvwxz].+:[NAQ].*:m", ":[efGW]") -1>> ce # Accord de genre correct, mais euphonie non respectée.|http://fr.wikipedia.org/wiki/Euphonie <<- /gn/ morph(\2, ":[NAQ].*:p", ":[siGW]") -2>> =suggMasSing(\2) # Accord de nombre erroné : « \2 » devrait être au singulier. __gn_ce_1m__ ce *WORD <<- /gn/ morph(\2, ":[NAQ].*:f", ":(?:3s|[GWme])") -1>> cette # Accord de genre erroné : « \2 » est féminin. <<- /gn/ __also__ and hasMasForm(\2) -2>> =suggMasSing(\2, True) # Accord de genre erroné : « \1 » est un déterminant masculin. <<- /gn/ morph(\2, ":[NAQ].*:f", ":[GWme]") and morph(\2, ":3s") -1>> cette|se # Accord de genre erroné : « \2 » est féminin. Ou bien vous confondez le déterminant “ce” avec le pronom “se”. <<- /gn/ morph(\2, ":[NAQ].*:p", ":[siGW]") -2>> =suggMasSing(\2) # Accord de nombre erroné : « \2 » devrait être au singulier. __gn_mon_ton_son_1m__ [mon|ton|son] *WORD <<- /gn/ morph(\1, ":D") >>> <<- /gn/ morph(\2, ">[bcdfgjklmnpqrstvwxz].*:[NAQ].*:f", ":[GWme]") -1>> =\1.replace("on", "a") # Accord de genre erroné : « \2 » est féminin. <<- /gn/ __also__ and hasMasForm(\2) -2>> =suggMasSing(\2, True) # Accord de genre erroné : « \1 » est un déterminant masculin. <<- /gn/ morph(\2, ":[NAQ].*:p", ":[siGW]") -2>> =suggMasSing(\2) # Accord de nombre erroné : « \2 » devrait être au singulier. __gn_au_1m__ au *WORD <<- /gn/ morph(\2, ":[NAQ].*:f:s", ":[GWme]") -1>> à la # Accord de genre erroné : « \2 » est féminin. <<- /gn/ __also__ and hasMasForm(\2) -2>> =suggMasSing(\2, True) # Accord de genre erroné : « \1 » est un déterminant masculin. <<- /gn/ morph(\2, ":[NAQ].*:p", ":[siGW]") -2>> =suggMasSing(\2) # Accord de nombre erroné : « \2 » devrait être au singulier. <<- /gn/ __also__ -1>> aux # Accord de nombre erroné : « \2 » est au pluriel. TEST: ledit {{accords}} ne vaut rien. |
︙ | ︙ | |||
8973 8974 8975 8976 8977 8978 8979 | TEST: le ton monte. TEST: Ces enfants n’ont jamais vu quelqu’un lire. TEST: Trente et un hommes sur le pont. ## Singulier féminin | | | 8995 8996 8997 8998 8999 9000 9001 9002 9003 9004 9005 9006 9007 9008 9009 | TEST: le ton monte. TEST: Ces enfants n’ont jamais vu quelqu’un lire. TEST: Trente et un hommes sur le pont. ## Singulier féminin __gn_la_1m__ , la *WORD <<- /gn/ morph(\3, ":[NAQ].*:m", ":(?:e|f|P|G|W|[1-3][sp]|Y)") -2>> le # Accord de genre erroné : « \3 » est masculin. <<- /gn/ __also__ and hasFemForm(\3) -3>> =suggFemSing(\3, True) # Accord de genre erroné : « \2 » est un déterminant féminin. <<- /gn/ __else__ and morph(\3, ":[NAQ].*:p") -3>> =suggFemSing(\3) # Accord de nombre erroné : « \3 » devrait être au singulier. *WORD la *WORD <<- /gn/ morph(\2, ":D") >>> |
︙ | ︙ | |||
9005 9006 9007 9008 9009 9010 9011 | TEST: dans la {{parties}} ->> partie TEST: de {{la}} vin ->> le TEST: {{la}} {{véhicule}} TEST: {{La}} {{pris}} TEST: la force de la {{formes}} parfaite | | | | | | | | | | | 9027 9028 9029 9030 9031 9032 9033 9034 9035 9036 9037 9038 9039 9040 9041 9042 9043 9044 9045 9046 9047 9048 9049 9050 9051 9052 9053 9054 9055 9056 9057 9058 9059 9060 9061 9062 9063 9064 9065 9066 9067 9068 9069 9070 9071 9072 9073 9074 9075 9076 9077 9078 9079 9080 9081 9082 9083 9084 9085 9086 9087 9088 9089 9090 9091 9092 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 | TEST: dans la {{parties}} ->> partie TEST: de {{la}} vin ->> le TEST: {{la}} {{véhicule}} TEST: {{La}} {{pris}} TEST: la force de la {{formes}} parfaite __gn_ladite_1m__ ladite *WORD <<- /gn/ morph(\2, ":[NAQ].*:m", ":[efGW]") -1>> ledit # Accord de genre erroné : « \2 » est masculin. <<- /gn/ __also__ and hasFemForm(\2) -2>> =suggFemSing(\2, True) # Accord de genre erroné : « \1 » est un déterminant féminin. <<- /gn/ morph(\2, ":[NAQ].*:p", ":[siGW]") -2>> =suggFemSing(\2) # Accord de nombre erroné : « \2 » devrait être au singulier. TEST: ladite {{passions}} l’avait conduit à sa perte. __gn_une_1m__ une *WORD <<- /gn/ morph(\2, ":[NAQ].*:m", ":(?:e|f|G|W|V0|3s|P)") and not ( \2 == "demi" and morph(>1, ":N.*:f", "*") ) -1>> un # Accord de genre erroné : « \2 » est masculin. <<- /gn/ __also__ and hasFemForm(\2) -2>> =suggFemSing(\2, True) # Accord de genre erroné : « \1 » est un déterminant féminin. <<- /gn/ morph(\2, ":[NAQ].*:p", ":[siGW]") -2>> =suggFemSing(\2) # Accord de nombre erroné : « \2 » devrait être au singulier. __gn_une_des_1m__ une des *WORD <<- /gn/ morph(\3, ":[NAQ].*:m", ":(?:e|f|G|W|V0|3s)") -1>> un # Accord de genre erroné : « \3 » est masculin. <<- /gn/ __also__ and hasFemForm(\3) -3>> =suggFemPlur(\3, True) # Accord de genre erroné : « \1 » est un déterminant féminin. TEST: un {{slashs}} ->> slash TEST: un {{fromages}}. ->> fromage TEST: Un {{ballons}} ->> ballon TEST: Une {{cinglées}} ->> cinglée TEST: {{une}} des {{joueurs}} TEST: mille et une merveilles __gn_cette_1m__ cette *WORD <<- /gn/ morph(\2, ":[NAQ].*:m", ":[efGW]") -1>> =suggCeOrCet(\2) # Accord de genre erroné : « \2 » est masculin. <<- /gn/ __also__ and hasFemForm(\2) -2>> =suggFemSing(\2, True) # Accord de genre erroné : « \1 » est un déterminant féminin. <<- /gn/ morph(\2, ":[NAQ].*:p", ":[siGW]") -2>> =suggFemSing(\2) # Accord de nombre erroné : « \2 » devrait être au singulier. __gn_ma_ta_sa_1m__ [ma|ta|sa] *WORD <<- /gn/ morph(\2, ":[NAQ].*:m", ":[efGW]") -1>> =\1[:-1]+"on" # Accord de genre erroné : « \2 » est masculin. <<- /gn/ __also__ and not re.search("(?i)^[aâeéèêiîoôuûyœæ]", \2) and hasFemForm(\2) -2>> =suggFemSing(\2, True) # Accord de genre erroné : « \1 » est un déterminant féminin. <<- /gn/ morph(\2, ":[NAQ].*:p", ":[siGW]") -2>> =suggFemSing(\2) # Accord de nombre erroné : « \2 » devrait être au singulier. TEST: {{une}} des {{chats}} TEST: {{ma}} {{parti}} TEST: {{ma}} amour ->> mon TEST: {{une}} kyste ->> un TEST: {{Cette}} {{animal}} mort. ## Singuliers épicènes __gn_leur_1m__ , leur *WORD <<- /gn/ morph(\3, ":[NAQ].*:p", "*") -2>> leurs # Accord de nombre erroné avec « \3 ». <<- /gn/ __also__ -3>> =suggSing(\3) # Accord de nombre erroné : « \3 » devrait être au singulier. *WORD leur *WORD <<- /gn/ morph(\3, ":[NAQ].*:p", "*") or ( morph(\3, ":[NAQ].*:p", ":[si]") and morph(\1, ":[RC]|>de/", ">(?:e[tn]|ou)/") and not (morph(\1, ":Rv") and morph(\3, ":Y")) ) -2>> leurs # Accord de nombre erroné avec « \3 ». <<- /gn/ __also__ -3>> =suggSing(\3) # Accord de nombre erroné : « \3 » devrait être au singulier. <start> leur *WORD <<- /gn/ morph(\3, ":[NAQ].*:p", ":[siGW]") -2>> leurs # Accord de nombre erroné avec « \3 ». <<- /gn/ __also__ -3>> =suggSing(\3) # Accord de nombre erroné : « \3 » devrait être au singulier. TEST: Tu sais, {{leur}} {{impatiences}} est notoire. TEST: J’en ai assez de {{leur}} {{délires}} TEST: {{Leur}} {{perceptions}} des choses m’exaspère. TEST: dans {{leur}} {{usines}} __gn_notre_votre_chaque_1m__ [notre|votre|chaque] *WORD <<- /gn/ morph(\2, ":[NAQ].*:p", ":[siGW]") -2>> =suggSing(\2) # Accord de nombre erroné : « \2 » devrait être au singulier. TEST: Chaque {{chiens}}. ->> chien __gn_quelque_1m__ quelque *WORD <<- /gn/ morph(\2, ":[NAQ].*:p", ":[siG]") and not value(>1, "|que|qu’|qu|") -1>> quelques # Il manque un “s” à « quelque » ou « \2 » doit être au singulier. TEST: {{Quelque}} amis ## Pluriels épicènes __gn_les_1m__ , 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") |
︙ | ︙ | |||
9119 9120 9121 9122 9123 9124 9125 | 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 | | | | | | | | | | | | | | 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 | 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_1m__ 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_1m__ [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_1m__ [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_1m__ 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 ## certains / certaines __gn_certains_1m__ 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. <<- /gn/ ( morph(\2, ":[NAQ].*:s", ":(?:[ipGWP]|V0)") and not (value(>1, "|et|ou|") and morph(>2, ":[NAQ]")) ) or \1 in aREGULARPLURAL -2>> =suggPlur(\2) # Accord de nombre erroné : « \2 » devrait être au pluriel. __gn_certains_des_1m__ certains des *WORD <<- /gn/ morph(\3, ":[NAQ].*:f", ":[emGW]") -1>> certaines # Accord de genre erroné : « \3 » est féminin. <<- /gn/ __also__ and hasMasForm(\3) -3>> =suggMasPlur(\3, True) # Accord de genre erroné : « \1 » est un déterminant masculin. __gn_certaines_1m__ certaines *WORD <<- /gn/ morph(\2, ":[NAQ].*:m", ":[efGWP]") -1>> certains # Accord de genre erroné : « \2 » est masculin. <<- /gn/ __also__ and hasFemForm(\2) -2>> =suggFemPlur(\2, True) # Accord de genre erroné : « \1 » est un déterminant féminin. <<- /gn/ ( 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. __gn_certaines_des_1m__ certaines des *WORD <<- /gn/ morph(\3, ":[NAQ].*:m", ":[efGW]") -1>> certains # Accord de genre erroné : « \3 » est masculin. <<- /gn/ __also__ and hasFemForm(\3) -3>> =suggFemPlur(\3, True) # Accord de genre erroné : « \1 » est un déterminant féminin. 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 ## quel / quels / quelle / quelles __gn_quel_1m__ quel *WORD <<- /gn/ morph(\2, ":[NAQ].*:f:p", ":(?:V0|Oo|[NAQ].*:[me]:[si])") -1>> quelles # Accord de genre et de nombre erroné : « \2 » est féminin et au pluriel. <<- /gn/ __also__ and hasFemForm(\2) -2>> =suggMasSing(\2, True) # Accord de genre et de nombre erroné : « \1 » est masculin et au singulier. <<- /gn/ morph(\2, ":[NAQ].*:m:p", ":(?:V0|Oo|[NAQ].*:[me]:[si])") -1>> quels # Accord de nombre erroné : « \2 » est au pluriel. <<- /gn/ __also__ -2>> =suggSing(\2) # Accord de nombre erroné : « \1 » est au singulier. <<- /gn/ morph(\2, ":[NAQ].*:f:[si]", ":(?:V0|Oo|[NAQ].*:[me]:[si])") -1>> quelle # Accord de genre erroné : « \2 » est féminin. <<- /gn/ __also__ and hasFemForm(\2) -2>> =suggMasSing(\2, True) # Accord de genre erroné : « \1 » est masculin. __gn_quels_1m__ quels *WORD <<- /gn/ morph(\2, ":[NAQ].*:f:s", ":(?:V0|Oo|[NAQ].*:[me]:[pi])") -1>> quelle # Accord de genre et de nombre erroné : « \2 » est féminin et au singulier. <<- /gn/ __also__ and hasFemForm(\2) -2>> =suggMasPlur(\2, True) # Accord de genre et de nombre erroné : « \1 » est masculin et au pluriel. <<- /gn/ morph(\2, ":[NAQ].*:m:s", ":(?:V0|Oo|[NAQ].*:[me]:[pi])") -1>> quel # Accord de nombre erroné : « \2 » est au singulier. <<- /gn/ __also__ -2>> =suggPlur(\2) # Accord de nombre erroné : « \1 » est au pluriel. <<- /gn/ morph(\2, ":[NAQ].*:f:[pi]", ":(?:V0|Oo|[NAQ].*:[me]:[pi])") -1>> quelles # Accord de genre erroné : « \2 » est féminin. <<- /gn/ __also__ and hasFemForm(\2) -2>> =suggMasPlur(\2, True) # Accord de genre erroné : « \1 » est masculin. __gn_quelle_1m__ quelle *WORD <<- /gn/ morph(\2, ":[NAQ].*:m:p", ":(?:V0|Oo|[NAQ].*:[fe]:[si])") -1>> quels # Accord de genre et de nombre erroné : « \2 » est masculin et au pluriel. <<- /gn/ __also__ and hasFemForm(\2) -2>> =suggFemSing(\2, True) # Accord de genre et de nombre erroné : « \1 » est féminin et au singulier. <<- /gn/ morph(\2, ":[NAQ].*:f:p", ":(?:V0|Oo|[NAQ].*:[fe]:[si])") -1>> quelles # Accord de nombre erroné : « \2 » est au pluriel. <<- /gn/ __also__ -2>> =suggSing(\2) # Accord de nombre erroné : « \1 » est au singulier. <<- /gn/ morph(\2, ":[NAQ].*:m:[si]", ":(?:V0|Oo|[NAQ].*:[fe]:[si])") -1>> quel # Accord de genre erroné : « \2 » est masculin. <<- /gn/ __also__ and hasFemForm(\2) -2>> =suggFemSing(\2, True) # Accord de genre erroné : « \1 » est féminin. __gn_quelles_1m__ quelles *WORD <<- /gn/ morph(\2, ":[NAQ].*:m:s", ":(?:V0|Oo|[NAQ].*:[fe]:[pi])") -1>> quel # Accord de genre et de nombre erroné. « \2 » est masculin et au singulier. <<- /gn/ __also__ and hasFemForm(\2) -2>> =suggFemPlur(\2, True) # Accord de genre et de nombre erroné : « \1 » est féminin et au pluriel. <<- /gn/ morph(\2, ":[NAQ].*:f:s", ":(?:V0|Oo|[NAQ].*:[fe]:[pi])") -1>> quelle # Accord de nombre erroné : « \2 » est au singulier. <<- /gn/ __also__ -2>> =suggPlur(\2) # Accord de nombre erroné : « \1 » est au pluriel. <<- /gn/ morph(\2, ":[NAQ].*:m:[pi]", ":(?:V0|Oo|[NAQ].*:[fe]:[pi])") -1>> quels # Accord de genre erroné : « \2 » est masculin. <<- /gn/ __also__ and hasFemForm(\2) -2>> =suggFemPlur(\2, True) # Accord de genre erroné : « \1 » est féminin. |
︙ | ︙ | |||
9340 9341 9342 9343 9344 9345 9346 | <<- /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 | | | | 9362 9363 9364 9365 9366 9367 9368 9369 9370 9371 9372 9373 9374 9375 9376 9377 9378 9379 9380 9381 9382 9383 9384 9385 | <<- /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 __gn_nombre_de_1m__ 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. __gn_det_groupe_de_1m__ [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. ->> bêtes TEST: une multitude d’{{homme}} ->> hommes |
︙ | ︙ | |||
9375 9376 9377 9378 9379 9380 9381 | 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 ## Nombres | | | 9397 9398 9399 9400 9401 9402 9403 9404 9405 9406 9407 9408 9409 9410 9411 | 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 ## Nombres __gn_nombre_lettres_1m__ @:B:e:p *WORD <<- /gn/ not value(\1, "|neuf|mille|") and ( (morph(\2, ":[NAQ].*:s", "*") and not value(\2, "|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|") ) or \2 in aREGULARPLURAL) -2>> =suggPlur(\2) # Accord de nombre erroné avec « \1 » : « \2 » devrait être au pluriel. neuf *WORD <<- /gn/ ( morph(\2, ":[NAQ].*:s", "*") and not morph(<1, ":N.*:m:[is]") and not value(\2, "|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|") ) |
︙ | ︙ | |||
9397 9398 9399 9400 9401 9402 9403 | TEST: ce sont trois {{idiot}} pas foutus de trouver leur chemin avec un GPS. TEST: Il a abandonné neuf {{enfant}}. TEST: On peut trouver mille {{travailleur}} d’un claquement de doigts. TEST: un logement neuf bâti par des professionnels. TEST: un mille marin. | | | 9419 9420 9421 9422 9423 9424 9425 9426 9427 9428 9429 9430 9431 9432 9433 | TEST: ce sont trois {{idiot}} pas foutus de trouver leur chemin avec un GPS. TEST: Il a abandonné neuf {{enfant}}. TEST: On peut trouver mille {{travailleur}} d’un claquement de doigts. TEST: un logement neuf bâti par des professionnels. TEST: un mille marin. __gn_nombre_chiffres_1m__ [0|1|01] @:[NAQ].*:p¬* <<- /gn/ not value(\2, "|Rois|Corinthiens|Thessaloniciens|") -2>> =suggSing(\2) # Accord de nombre erroné : « \1 » devrait être au singulier. ~^\d+$ *WORD <<- not value(<1, "|/|") and not re.search("^0*[01]$", \1) and ( (morph(\2, ":[NAQ].*:s", "*") and not value(\2, "|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|")) or \1 in aREGULARPLURAL ) |
︙ | ︙ | |||
9428 9429 9430 9431 9432 9433 9434 | !! !! !!!! Groupe nominal (2) !! !! !! ## Sans article | | | > | | < < < | | | < < < | | | < > | | | > > > > > > > > > > > > > > > > | | | < | < < < < < < < < < < | < < < < < < < < < < < | < < < < | 9450 9451 9452 9453 9454 9455 9456 9457 9458 9459 9460 9461 9462 9463 9464 9465 9466 9467 9468 9469 9470 9471 9472 9473 9474 9475 9476 9477 9478 9479 9480 9481 9482 9483 9484 9485 9486 9487 9488 9489 9490 9491 9492 9493 9494 9495 9496 9497 9498 9499 9500 9501 9502 9503 9504 9505 9506 9507 9508 9509 9510 9511 9512 9513 9514 9515 9516 9517 9518 9519 9520 9521 9522 9523 9524 9525 9526 9527 9528 9529 9530 9531 9532 9533 9534 9535 9536 9537 9538 9539 9540 9541 9542 9543 9544 9545 9546 9547 9548 9549 9550 9551 9552 9553 | !! !! !!!! Groupe nominal (2) !! !! !! ## Sans article __gn_start_2m__ <start> @:[NA]¬* @:[NA]¬* <<- /gn/ ((morph(\2, ":m", "*") and morph(\3, ":f", "*")) or (morph(\2, ":f", "*") and morph(\3, ":m", "*"))) and not apposition(\2, \3) -3>> =switchGender(\3) # Accord de genre erroné avec « \2 ». <<- /gn/ __also__ and hasFemForm(\2) -2>> =switchGender(\2) # Accord de genre erroné avec « \3 ». <<- /gn/ ((morph(\2, ":s", "*") and morph(\3, ":p", "*")) or (morph(\2, ":p", "*") and morph(\3, ":s", "*"))) and not apposition(\2, \3) -3>> =switchPlural(\3) # Accord de nombre erroné avec « \2 ». <<- /gn/ __also__ -2>> =switchPlural(\2) # Accord de nombre erroné avec « \3 ». TEST: {{Femmes}} {{intelligente}}. TEST: {{Homme}} {{impatients}}. ## Prépositions __gn_pfx_en_2m__ en @:[NA]¬* @:[NA]¬* <<- /gn/ ( (morph(\2, ":m", "*") and morph(\3, ":f", "*")) or (morph(\2, ":f", "*") and morph(\3, ":m", "*")) ) and not apposition(\2, \3) -3>> =switchGender(\3) # Accord de genre erroné avec « \2 ». <<- /gn/ __also__ and hasFemForm(\2) -2>> =switchGender(\2) # Accord de genre erroné avec « \3 ». <<- /gn/ ( (morph(\2, ":p", "*") and morph(\3, ":s", "*")) or (morph(\2, ":s", "*") and morph(\3, ":p", "*")) ) and not apposition(\2, \3) -3>> =switchPlural(\3) # Accord de nombre erroné avec « \2 ». <<- /gn/ __also__ -2>> =switchPlural(\2) # Accord de nombre erroné avec « \3 ». TEST: en homme {{courtoise}} TEST: en {{femme}} {{cultivées}} __gn_pfx_à_par_pour_sans_2m__ [à|par|pour|sans] @:[NA]¬:Y @:[NA]¬:G <<- /gn/ ( (morph(\2, ":m", ":[fe]") and morph(\3, ":f", "*")) or (morph(\2, ":f", ":[me]") and morph(\3, ":m", "*")) ) and not apposition(\2, \3) -3>> =switchGender(\3) # Accord de genre erroné avec « \2 ». <<- /gn/ __also__ and hasFemForm(\2) -2>> =switchGender(\2) # Accord de genre erroné avec « \3 ». <<- /gn/ ( (morph(\2, ":p", ":[si]") and morph(\3, ":s", "*")) or (morph(\2, ":s", ":[pi]") and morph(\3, ":p", "*")) ) and not apposition(\2, \3) -3>> =switchPlural(\3) # Accord de nombre erroné avec « \2 ». <<- /gn/ __also__ -2>> =switchPlural(\2) # Accord de nombre erroné avec « \3 ». TEST: à {{grande}} {{enjambées}} TEST: pour {{belle}} {{appartement}} TEST: une femme sans a priori __gn_pfx_de_2m__ [de|d’] @:[NA]¬Y @:[NA]¬* <<- /gn/ ( (morph(\2, ":m", ":[fe]") and morph(\3, ":f", "*")) or (morph(\2, ":f", ":[me]") and morph(\3, ":m", "*")) ) and not apposition(\2, \3) and not morph(<1, ":[NA]|>(?:et|ou)/") -3>> =switchGender(\3) # Accord de genre erroné avec « \2 ». <<- /gn/ __also__ and hasFemForm(\2) -2>> =switchGender(\2) # Accord de genre erroné avec « \3 ». <<- /gn/ ( (morph(\2, ":p", ":[si]") and morph(\3, ":s", "*")) or (morph(\2, ":s", ":[pi]") and morph(\3, ":p", "*")) ) and not apposition(\2, \3) and not morph(<1, ":[NA]|>(?:et|ou)/") -3>> =switchPlural(\3) # Accord de nombre erroné avec « \2 ». <<- /gn/ __also__ -2>> =switchPlural(\2) # Accord de nombre erroné avec « \3 ». TEST: Ils ont de {{grandes}} {{oreille}} TEST: de {{grands}} {{homme}} TEST: de {{manière}} {{légal}} TEST: de {{petite}} {{homme}} TEST: de {{pousse}} {{actif}} TEST: De {{bon}} {{conseils}} TEST: De {{mauvaises}} {{hommes}} TEST: Ces produits sont de {{belle}} {{qualités}}. __gn_pfx_de_sur_avec_après_2m__ [sur|avec|après] @:[NA]¬V0 @:[NA]¬* <<- /gn/ ( (morph(\2, ":m", ":[fe]") and morph(\3, ":f", "*")) or (morph(\2, ":f", ":[me]") and morph(\3, ":m", "*")) ) and not apposition(\2, \3) and morph(<1, ":[VRX]|<start>") -3>> =switchGender(\3) # Accord de genre erroné avec « \2 ». <<- /gn/ __also__ and hasFemForm(\2) -2>> =switchGender(\2) # Accord de genre erroné avec « \3 ». <<- /gn/ ( (morph(\2, ":p", ":[si]") and morph(\3, ":s", "*")) or (morph(\2, ":s", ":[pi]") and morph(\3, ":p", "*")) ) and not apposition(\2, \3) and morph(<1, ":[VRX]|<start>") -3>> =switchPlural(\3) # Accord de nombre erroné avec « \2 ». <<- /gn/ __also__ -2>> =switchPlural(\2) # Accord de nombre erroné avec « \3 ». TEST: avec {{grand}} {{industrie}} TEST: sur {{petite}} {{pied}} TEST: Après être demeurée assise pendant quelque temps, elle se leva TEST: ils choisissent de devenir indépendants __gn_de_manière_façon_1m__ de [manière|façon] @:A.*:(m|f:p)¬:[GM] <<- /gn/ -3>> =suggFemSing(\3) # Accord erroné avec “\2” : l’adjectif devrait être au féminin singulier. TEST: il fit cela tans de fois et avec brio de manière {{élégant}}. TEST: elle s’y prit avec cet individu de façon {{charmant}}. @@@@ @@@@END_GRAPH _ @@@@ ## un / une __[i]/gn(gn_2m_un)__ (?<!et |ou | d’)un +({w_2}) +({w_2}) @@w,$ <<- not \2.startswith("seul") |
︙ | ︙ |