Index: gc_lang/fr/data/phonet_simil.txt ================================================================== --- gc_lang/fr/data/phonet_simil.txt +++ gc_lang/fr/data/phonet_simil.txt @@ -746,10 +746,11 @@ suspens suspends suspend syndic syndics syndique syndiques syndiquent syndicat syndicats syndiqua syndiquas ta tas tache taches tâche tâches tâchent +taf tafs taffe taffes taffent taie taies tes thé thés tais tait tain teint teints thym thyms tin tins tint teins taira tairas terra terras taire ter terre terres terrent taise taises taisent thèse thèses Index: gc_lang/fr/rules.grx ================================================================== --- gc_lang/fr/rules.grx +++ gc_lang/fr/rules.grx @@ -1208,17 +1208,10 @@ ->> =formatNF(\0) # Norme française. Utilisez les espaces et tirets insécables.|http://fr.wikipedia.org/wiki/Liste_de_normes_NF TEST: __nf__ Norme française : {{Nf-EN ISO 3892-23}} -## Chimie -__[s]/chim(chim_molécules)__ - (?:Ca(?:CO3|SO4)|CO2|(?:H2|Na2)(?:CO3|O|SO4)|[HNO]2|HNO3|Fe2O3|KMnO4|NO2|SiO2|SO[23]) - <<- ->> =\0.replace("2", "₂").replace("3", "₃").replace("4", "₄") # Typographie des composés chimiques. [!] - -TEST: __chim__ les molécules {{CaCO3}} et {{H2O}}… - !! !! !!!! Cohérence des guillemets !! !! @@ -1708,32 +1701,10 @@ TEST: prend-elle l’avantage ? TEST: saura-t-on jamais la vérité ? TEST: arrive-t-elle ce matin ? TEST: y aura-t-il du poulet au dîner ? - -!!!! Élisions !! - -# presque : élision -__[i>/typo(typo_presque)__ - (presqu[’'])(?![îi]le) @@0 - <<- -1>> "presque " # Pas d’élision autorisée sur “presque”, sauf avec “presqu’île”.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=1745 - -TEST: {{Presqu’}}exclusivement bâtie en pierre. -TEST: C’est une presqu’île. -TEST: Cette presqu’ile est particulièrement venteuse. - - -# quelque : élision -__[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… - @@@@ @@@@ @@@@ @@ -1915,18 +1886,18 @@ <<- =>> select(\2, ":(?:[123][sp]|P|Y)") $:M @:[123]s¬:[QW] <<- \2.islower() and morph(<1, ":Cs|") =>> select(\2, ":[123][sp]") - $:M @:(?:[123]s|Oo)|>ne/¬:A + $:M @:(?:[123]s|Ov)¬:A <<- =>> =select(\2, ":M") [que|qu’|combien|pourquoi|qui|quand|où] ?[en|y]¿ *WORD <<- =>> exclude(\-1, ":E") - [|,] quelqu’un *WORD - <<- =>> exclude(\3, ":N") + [|,] quelqu’ un *WORD + <<- =>> exclude(\4, ":N") >falloir [>pouvoir|>savoir|>vouloir|>manger|>conseiller] <<- =>> exclude(\2, ":N") @@ -1980,11 +1951,11 @@ [des|chaque|quelque|quelques|cet|cette|ces|mon|ma|ta|sa|mes|tes|ses|au|aux|notre|votre|nos|vos|leurs|aucun|aucune] *WORD <<- =>> exclude(\2, ":V") [un|une] *WORD - <<- not value(<1, "|l’|") and not value(\2, "|a|fut|fût|est|") and not morph(\2, ":P") =>> exclude(\2, ":V") + <<- not value(<1, "|l’|quelqu’|quelqu|") and not value(\2, "|a|fut|fût|est|") and not morph(\2, ":P") =>> exclude(\2, ":V") [une|le|la|les|des|chaque|quelque|quelques|cet|cette|ces|ma|ta|sa|mes|tes|ses|au|aux|notre|votre|nos|vos|leurs] personne <<- =>> select(\-1, ":N") de [la|l’] $:¬:Y @@ -2129,10 +2100,14 @@ alors [que|qu’] dès lors [que|qu’] <<- ~>> ␣ <<- =>> define(\1, [":Cs"]) + quelqu’ [un|une] + <<- ~>> ␣ + <<- =>> change_meta(\1, "WORD") + __fusions_noms_communs__ au revoir <<- ~>> ␣ <<- =>> define(\1, [":N:m:i"]) @@ -2149,10 +2124,14 @@ nec plus ultra standing >ovation star [system+s] <<- ~>> ␣ + presqu’ [>ile|>île] + <<- ~>> ␣ + <<- =>> change_meta(\1, "WORD") + *NUM : *NUM <<- space_after(\1, 0, 0) and space_after(\1, 0, 0) ~>> ␣ *NUM ~^h[0-9][0-9]$ <<- space_after(\1, 0, 0) ~>> ␣ @@ -2236,10 +2215,32 @@ __tag_noms__ ~\w-là$ <<- />> -là <<- =>> =define_from(\1, 0, -3) + +!!!! Élisions !! + +# presque : élision +__typo_presque__ + presqu’ *WORD + <<- /typo/ not morph(\2, ">[iî]le/") -1>> "presque " # Pas d’élision autorisée sur “presque”, sauf avec “presqu’île”.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=1745 + +TEST: {{Presqu’}}exclusivement bâtie en pierre. +TEST: C’est une presqu’île. +TEST: Cette presqu’ile est particulièrement venteuse. + + +# quelque : élision +__typo_quelque__ + quelqu’ *WORD + <<- /typo/ not value(\2, "|un|une|") -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… + !! !! !!!! Verbes composés !! @@ -3615,10 +3616,30 @@ TEST: Le {{XXIème}} siècle. ->> XXIᵉ TEST: le {{XXè}} siècle. ->> XXᵉ TEST: les {{CXIèmes}} ->> CXIᵉˢ +!!!! Chimie !! + +__chim_molécules__ + [CaCO3|CaSO4] + CO2 + [H2CO3|H2O|H2SO4] + [Na2CO3|Na2O|Na2SO4] + H2 + HNO3 + Fe2O3 + KMnO4 + NO2 + N2 + O2 + SiO2 + [SO2|SO3] + <<- /chim/ ->> =\1.replace("2", "₂").replace("3", "₃").replace("4", "₄") # Typographie des composés chimiques. [!] + +TEST: __chim__ les molécules {{CaCO3}} et {{H2O}}… + !!!! Dates !! __fusion_date__ *NUM - ~^\d\d?$ - ~^\d{2,5}$ @@ -3668,11 +3689,11 @@ !! ### ce / cet / cette / ces + nom + là __tu_ce_cette_ces_nom_là_ci__ [ce|cet|cette|ces] *WORD [là|ci] - <<- /tu/ morph(\2, ":[NB]") and not value(>1, "|où|") -2:3>> \2-là # Il manque probablement un trait d’union. + <<- /tu/ morph(\2, ":[NB]", ":V0e") and not value(>1, "|où|") -2:3>> \2-là # Il manque probablement un trait d’union. [ce|cet|cette|ces] *WORD la [|,] <<- /tu/ morph(\2, ":[NB]") -2:3>> \2-là # Il manque probablement un trait d’union. [ce|cet|cette|ces] *WORD si [|,] @@ -3683,10 +3704,11 @@ TEST: Ces {{trois là}} sont incollables. TEST: Je connais bien cette {{sensation là}}. TEST: Cette {{voiture si}}, c’est celle-là que je veux. TEST: ce que je veux c’est ce {{véhicule ci}} TEST: Laisse ce chiot là où il est ! +TEST: Ce fut là en fait une appellation fautive ### Préfixes __tu_préfixe_ex__ ex $:N¬* @@ -5883,18 +5905,10 @@ TEST: d’une {{habille}} de femme TEST: plus d’un ont été traumatisés TEST: Plus d’une sont parties aussi vite qu’elles étaient venues - -__conf_dès_vconj__ - dès ?[le|la|l’|les]¿ @:[123][sp]¬:[GNA] - <<- /conf/ not \-1.istitle() --1>> =suggSimil(\-1, ":[NA]", True) # Incohérence avec “\1” : “\-1” est une forme verbale conjuguée. - -TEST: dès le {{commencent}}, j’ai vu le problème. - - __conf_par_vconj__ par ?[le|la|l’|les]¿ @:[123][sp]¬:[GNA] <<- /conf/ not \-1.istitle() --1>> =suggSimil(\-1, ":[NA]", True) # Incohérence avec “\1” : “\-1” est une forme verbale conjuguée. @@ -5917,13 +5931,14 @@ TEST: Le mari répète à l’envi qu’il a découvert la France à travers les mots de sa femme. TEST: Il reste de nombreux militants sincères à la FI. [malgré|dès] [le|la|l’|les|leur|leurs] @:V¬:[GNAWMB] - <<- /conf/ -3>> =suggSimil(\3, ":[NA]", True) # Incohérence : après “\1”, on devrait trouver un groupe nominal. + <<- /conf/ not \-1.istitle() -3>> =suggSimil(\3, ":[NA]", True) # Incohérence : après “\1 \2”, on devrait trouver un groupe nominal. TEST: malgré l’{{arrête}} qui interdisait le port +TEST: dès le {{commencent}}, j’ai vu le problème. TEST: malgré les deux précédentes erreurs __conf_préverbes__ ne n’ @@ -9177,11 +9192,11 @@ __conf_quelle_qu_elle__ quelle [ne|n’|me|m’|te|t’|se|s’|nous|vous|le|la|l’|les|lui|leur|en|y] <<- /conf/ not (value(\2, "|en|ne|") and morph(>1, ":V0e")) -1>> qu’elle # Confusion. Le sujet “elle” doit être séparée de la conjonction “que”. - quelle @:V¬:[NA].*:[fe]|>(?:être|plus)/ + quelle @:V¬:[NA].*:[fe]|>(?:être|plus|point)/ <<- /conf/ \2.islower() and not (morph(\2, ">(?:pouvoir|devoir|aller)/") and (morph(>1, ":V0e") or morph(>2, ":V0e"))) and not (morph(\2, ":V0a") and value(>1, "|été|")) -1>> qu’elle # Confusion. Le sujet “elle” doit être séparée de la conjonction “que”. TEST: {{Quelle}} y vienne, on verra ce qu’elle vaut. TEST: {{Quelle}} a du répondant, cette gamine ! @@ -9192,11 +9207,11 @@ quelles [ne|n’|me|m’|te|t’|se|s’|nous|vous|le|la|l’|les|lui|leur|en|y] <<- /conf/ not (value(\2, "|en|ne|") and morph(>1, ":V0e")) -1>> qu’elles # Confusion. Le sujet “elles” doit être séparée de la conjonction “que”. - quelles @:V¬:[NA].*:[fe]|>(?:être|plus)/ + quelles @:V¬:[NA].*:[fe]|>(?:être|plus|point)/ <<- /conf/ \2.islower() and not (morph(\2, ">(?:pouvoir|devoir|aller)/") and (morph(>1, ":V0e") or morph(>2, ":V0e"))) and not (morph(\2, ":V0a") and value(>1, "|été|")) -1>> qu’elles # Confusion. Le sujet “elles” doit être séparée de la conjonction “que”. TEST: Je veux {{quelles}} s’efforcent à y parvenir. TEST: {{Quelles}} t’arrivent seulement à la cheville, voilà qui serait étonnant. @@ -10834,10 +10849,11 @@ à l’ un d’ entre eux à l’ unanimité à l’ unisson à l’ une d’ entre elles à l’ échelle [nationale|mondiale|régionale|départementale|cantonale|locale|galactique|universelle] + à l’ étouffée à l’ évidence à l’ œil nu à l’ [un|une] des leurs à la [bourre|con|coule|dérobée|diable|fois|leur|manque|mords-moi-le-nœud|papa|ramasse|renverse|redresse|rescousse|sauvette|volée] à la bonne franquette @@ -11100,10 +11116,11 @@ comme cul et chemise comme [frappé|frappée|frappés|frappées] par la foudre comme n’ importe où ?ailleurs¿ comme par [enchantement|magie] comme par un fait exprès + comme pas deux comme peau de chagrin comme promis comme qui dirait comme si [de|d’] rien n’ était contrairement aux apparences @@ -12397,10 +12414,11 @@ >chasseuse [de|d’] primes >chemin [de|d’] [traverse|fer] >chemise sans >manche >chèque sans provision >chili con carne + >chou à la crème ?[fouettée|diplomate|mousseline|patissière|pralinée]¿ >claire comme [de|d’] l’ eau [de|d’] [boudin|roche|source] >claire comme du cristal >claire comme jus [de|d’] [boudin|>chaussette|chique] [>clé|>clef] à molette >clin d’ œil @@ -12703,11 +12721,11 @@ jaune [canari|citron|doré|maïs|paille|sable] noir [de|d’] [encre|jais] noir et blanc noir sur blanc rose [bonbon|chair|corail] - rouge [anglais|brique|cardinal|carmin|cerise|coquelicot|écarlate|feu|fraise|grenat|groseille|incarnat|indien|rubis|sang|sanguin|tomate|vermeille|vermillon] + rouge [anglais|brique|cardinal|carmin|cerise|cochenille|coquelicot|écarlate|feu|fraise|grenat|groseille|incarnat|indien|rubis|sang|sanguin|tomate|vermeille|vermillon] vert [bouteille|céladon|émeraude|épinard|impérial|lichen|olive|perroquet|pistache|poireau|pomme|prairie|printemps|sapin|sauge|tilleul] couleur sable <<- morph(<1, ":[NA]", ":D") ~>> * <<- __else__ and morph(<1, ":D|>(?:être|devenir|redevenir|rester|sembler|demeurer|para[îi]tre)") ~>> ␣ <<- __also__ =>> define(\1, [":A:e:i"]) @@ -13393,10 +13411,11 @@ >faire bon accueil >faire bonne figure >faire chou blanc >faire copain copain >faire de [mon|ton|son|notre|votre|leur] mieux + >faire figure d’ exception >faire front commun >faire grise mine >faire grand [bruit|cas] >faire ?[bonne|excellente|grande|mauvaise]¿ impression >faire long feu @@ -13430,10 +13449,11 @@ [>mettre|>remettre] en [avant|branle|bouche|demeure|garde|jeu|lumière|mouvement|œuvre|place|scène|terre] [>mettre|>remettre] de côté >mourir jeune [>naître|>naitre] de la dernière pluie [>naître|>naitre] sous x + >parler affaires >partir en vrille >percer à jour >perdre [connaissance|conscience|patience|raison] >perdre d’ avance >piquer au vif @@ -13697,10 +13717,13 @@ TEST: La poïesis, en grec, est ce qui permet de faire passer n’importe quoi du non-être à l’être TEST: un moteur nouvelle génération TEST: La première est la critique dite artiste TEST: la critique conduit nombre de protestataires à se replier sur des modalités de défense efficaces dans le passé mais désormais largement inadaptées TEST: Tu crois que Microsoft peut contraindre les projets libres à quoi que ce soit ? +TEST: « L’école produit la norme en matière de langage » +TEST: Parler affaires. + @@@@ @@@@ @@@@ @@ -14631,11 +14654,11 @@ TEST: {{Quelle}} homme. ->> Quel TEST: {{Quelle}} {{folles}} TEST: {{Quelle}} {{chien}} TEST: {{Quelle}} {{chats}} TEST: Quelle sale journée… - +TEST: On pourrait également rappeler à quel point l’Église catholique fut hostile à la laïcité et la combattit violemment. __gn_quelles_1m!8__ quelles *WORD <<- /gn/ morph(\2, ":[NA].*:m:s", ":(?:V0|Oo|[NA].*:[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. @@ -14825,21 +14848,21 @@ ## Nombres __gn_nombre_lettres_1m__ $:B:e:p *WORD - <<- /gn/ not value(\1, "|neuf|mille|") and ( (morph(\2, ":[NA].*: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|") ) + <<- /gn/ not value(\1, "|neuf|mille|") and ( (morph(\2, ":[NA].*:s", "*") and not value(\2, "|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|") ) or \2 in aREGULARPLURAL) and not re.search("^[IVXLDM]+$", \1) -2>> =suggPlur(\2) # Accord de nombre erroné avec « \1 » : « \2 » devrait être au pluriel. neuf *WORD - <<- /gn/ ( morph(\2, ":[NA].*: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|") ) + <<- /gn/ ( morph(\2, ":[NA].*:s", "*") and not morph(<1, ":N.*:m:[is]") and not value(\2, "|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|") ) or \2 in aREGULARPLURAL -2>> =suggPlur(\2) # Accord de nombre erroné avec « \1 » : « \2 » devrait être au pluriel. mille *WORD - <<- /gn/ (morph(\2, ":[NA].*:s", "*") or \1 in aREGULARPLURAL) and not value(<1, "|le|un|ce|du|") + <<- /gn/ not value(\2, "|multiplié|divisé|") and (morph(\2, ":[NA].*:s", "*") or \1 in aREGULARPLURAL) and not value(<1, "|le|un|ce|du|") -2>> =suggPlur(\2) # Accord de nombre erroné avec « \1 » : « \2 » devrait être au pluriel. TEST: ce sont trois {{idiot}} pas foutus de trouver leur chemin avec un GPS. ->> idiots TEST: Il a abandonné neuf {{enfant}}. ->> enfants TEST: On peut trouver mille {{travailleur}} d’un claquement de doigts. ->> travailleurs @@ -14849,10 +14872,11 @@ TEST: mille cinquante {{mot}} ->> mots TEST: deux {{tête}} ->> têtes TEST: un logement neuf bâti par des professionnels. TEST: un mille marin. TEST: L’article VII mentionné dans la revue +TEST: Le produit de cinq multiplié par trois. __gn_nombre_chiffres_1m__ [0|1|01] @:[NAQ].*:p¬* <<- /gn/ space_after(\1, 1, 1) and not value(\2, "|Rois|Corinthiens|Thessaloniciens|") @@ -17922,10 +17946,11 @@ TEST: ça va d’autonome à hautement dépendant TEST: à lui donner trop d’importance, on façonne notre ennemi TEST: la pression entre les membres à un moment devient trop importante TEST: Macron saisit la discorde avec le Brésil pour s’opposer à l’embarrassant accord TEST: Je vous renvoie pour cela à l’excellent documentaire +TEST: cuisiner à l’étouffée __infi_loc_à_verbe__ de manière à ~..(?:ée?s?|ez)$ du mal à ~..(?:ée?s?|ez)$ @@ -17950,34 +17975,43 @@ TEST: L’accès au cannabis thérapeutique où à ses dérivés permettrait de plus aux autorités de santé d’apporter aux malades les garanties nécessaires quant à la qualité, aux concentrations, ainsi qu’aux modalités d’obtention et d’utilisation optimale. TEST: l’industrie est également touchée, avec « des pertes de commandes de véhicules chez Renault et chez Peugeot » __infi_qqch_de__ - [afin|avant] [de|d’] ~..ée?s?$ - à même [de|d’] ~..ée?s?$ - avant ?même¿ [de|d’] ~..ée?s?$ - en train [de|d’] ~..ée?s?$ - en vue [de|d’] ~..ée?s?$ - il [est|était|fut|fût|sera|serait] temps [de|d’] ~..ée?s?$ - impossible [de|d’] ~..ée?s?$ - marre [de|d’] ~..ée?s?$ - [>façon|>manière] [de|d’] ~..ée?s?$ - [>intention|>volonté] [de|d’] ~..ée?s?$ - <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) # Le verbe devrait être à l’infinitif. - - force est [de|d’] ~..ée?s?$ + [afin|avant] [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$ + avant ?même¿ [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$ + marre [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$ + <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) # Après “\1 de”, le verbe devrait être à l’infinitif. + + à même [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$ + en train [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$ + en vue [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$ + <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) # Après “\1 \2 de”, le verbe devrait être à l’infinitif. + + [>façon|>manière] [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$ + [>intention|>volonté] [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$ + <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) # Après “\1 de”, le verbe devrait être à l’infinitif s’il s’agit bien de décrire une action. + + il >être [temps|impossible|indispensable|nécessaire|utile] [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$ + <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) # Après “il est \3 de”, le verbe devrait être à l’infinitif. + + [|,] impossible [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$ + <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) # Après “impossible de”, le verbe devrait être à l’infinitif. + + force [est|était] [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$ <<- /infi/ not value(<1, "|une|la|cette|ma|ta|sa|notre|votre|leur|quelle|de|d’|") and analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) # Après “force est de”, le verbe devrait être à l’infinitif. -TEST: Nous étions en train de {{trouvé}} une solution à ces soucis récurrents. +TEST: afin de leur {{percée}} une ouverture TEST: en train de {{percées}} TEST: ils sont à même de {{trouvé}} la bonne réponse +TEST: Nous étions en train de {{trouvé}} une solution à ces soucis récurrents. TEST: elle est en train de {{mangée}} -TEST: impossible d’{{échappée}} à cette horreur. +TEST: je déteste sa manière de la {{rabaissée}} en permanence. TEST: il serait temps de {{poussée}} la logique jusqu’au bout +TEST: impossible d’{{échappée}} à cette horreur. TEST: Force est d’{{pensée}} que nous allons y arriver avec seulement nos bonnes intentions. - __infi_de_verbe__ [de|d’] [le|l’|leur|les] @:V¬:[YNAM]|>(?:lui|plus)/ [|,] [de|d’] [nous|vous|lui] @:V¬:[YE]|>(?:lui|plus)/ @@ -17999,11 +18033,11 @@ >faire ?[pas|jamais|guère]¿ semblant [de|d’] ?[nous|vous|le|la|l’|les|leur]¿ @:V1.*:Q <<- /infi/ --1>> =suggVerbInfi(\-1) # Après “faire semblant de”, le verbe devrait être à l’infinitif. [de|d’] @:V1.*:Q¬:N <<- /infi/ not \2[0:1].isupper() and not morph(<1, ">(?:en|passer)/") - and not before("(?i)\\b(?:quelqu(?:e chose|’une?)|qu’y a-t-il |(?:l(es?|a)|nous|vous|me|te|se) trait|personne|points? +$|autant +$|rien d(?:e |’)|rien(?: +[a-zéèêâîûù]+|) +$)") + and not before("(?i)\\b(?:quelqu(?:e chose|’une?)|qu’y a-t-il |(?:l(es?|a)|nous|vous|me|te|se) trait|personne|points? +$|autant +$|ça +|rien d(?:e |’)|rien(?: +[a-zéèêâîûù]+|) +$)") and not tag_before(\1, "ce_que") -2>> =suggVerbInfi(\2) # Le verbe devrait être à l’infinitif. TEST: d’en {{parlé}} sans cesse TEST: cela suffit de les {{aimait}} @@ -18037,10 +18071,11 @@ TEST: Il se moque de nous en fournissant de pareilles marchandises frelatées. TEST: qu’y a-t-il de changé, de perturbé, de modifié ? TEST: ce qu’ils ont d’obscur, d’exagéré et parfois de sec et de figé TEST: ce qu’il y a de compliqué dans ces affaires. TEST: Un patient peut avoir autant de satanées maladies qui lui chante. +TEST: C’est toujours ça de gagné. __infi_y_verbe!3__ y ~ée?s?$ <<- /infi/ morph(\2, ":V", ":[123][sp]") -2>> _ # Le verbe ne devrait pas être un participe passé. @@ -18950,11 +18985,11 @@ __ppas_se_être__ [me|m’|te|se|s’] ?[y|en]¿ >être *WORD <<- /ppas/ morph(\-1, ":(?:Y|[123][sp])", ":[QA]") --1>> =suggVerbPpas(\-1) # Incohérence. Après « s’être », le verbe doit être un participe passé. - <<- /ppas/ __else__ and morph(\-2, ":[123]s") and morph(\-1, ":Q.*:p") and not before("(?i)\\bqu[e’][, ]|\\bon (?:ne |)$") + <<- /ppas/ __else__ and morph(\-2, ":[123]s") and morph(\-1, ":Q.*:p") and not tag_before(\1, "que") and not before("(?i)\\bon (?:ne |)$") --1>> =suggSing(\-1) # Le participe passé devrait être au singulier. tu t’ ?[y|en]¿ [es|étais|seras|serais|fus|fusses] *WORD <<- /ppas/ morph(\-1, ":(?:Y|[123][sp])", ":[QA]") --1>> =suggVerbPpas(\-1) # Incohérence. Après « s’être », le verbe doit être un participe passé. @@ -18971,10 +19006,11 @@ TEST: On s’est rencontrées lorsqu’on travaillait là-bas. TEST: des soins que je m’étais donnés. TEST: Si t’es pas contente, t’achètes pas. TEST: t’étais vraiment cinglé à cette époque. TEST: il m’était évident que cette mission était à durée déterminée +TEST: Cela fait un petit temps qu’on ne s’est plus vus. ## se rendre compte __ppas_s_être_rendu_compte__ >être rendu compte @@ -19598,11 +19634,11 @@ || ([>adorer|>affirmer|>aimer|>croire|>déclarer|>désirer|>détester|>devoir|>dire|>estimer|>imaginer|>paraître|>paraitre|>penser|>pouvoir|>préférer|>risquer|>savoir|>sembler|>souhaiter|>vouloir]) || être [devenu+e|redevenu+e|resté+e|demeuré+e] *WORD [|,|$:Cs] [un|le|ce|cet] (*WORD) ?qui¿ ?[ne|n’]¿ || ([>adorer|>affirmer|>aimer|>croire|>déclarer|>désirer|>détester|>devoir|>dire|>estimer|>imaginer|>paraître|>paraitre|>penser|>pouvoir|>préférer|>risquer|>savoir|>sembler|>souhaiter|>vouloir]) || avoir [été|semblé|paru] *WORD - <<- /ppas/ morph(\1, ":[NA].*:[me]", ":[GWf]") and morph(\-1, ":A.*:f", ":[GWme]") and (morph(\2, ":[123]s") or (not tag(\1, "enum") and morph(\2, ":P"))) + <<- /ppas/ morph(\1, ":[NA].*:[me]", ":[GWf]") and morph(\-1, ":A.*:f", ":[GWMme]") and (morph(\2, ":[123]s") or (not tag(\1, "enum") and morph(\2, ":P"))) --1>> =switchGender(\-1) # Accord erroné : “\1” et “\-1” ne sont pas accordés en genre. [|,|$:Cs] [une|la|ma|ta|sa|cette] (*WORD) ?qui¿ ?[ne|n’]¿ ([>être|>sembler|>devenir|>rester|>demeurer|>redevenir|>paraître|>paraitre]) *WORD [|,|$:Cs] [une|la|ma|ta|sa|cette] (*WORD) ?qui¿ ?[ne|n’]¿ (>avoir) [été|semblé|paru] *WORD [|,|$:Cs] [une|la|ma|ta|sa|cette] (*WORD) ?qui¿ ?[ne|n’]¿ ([>être|>sembler]) [devenu+e|redevenu+e|resté+e|demeuré+e] *WORD @@ -19613,11 +19649,11 @@ || ([>adorer|>affirmer|>aimer|>croire|>déclarer|>désirer|>détester|>devoir|>dire|>estimer|>imaginer|>paraître|>paraitre|>penser|>pouvoir|>préférer|>risquer|>savoir|>sembler|>souhaiter|>vouloir]) || être [devenu+e|redevenu+e|resté+e|demeuré+e] *WORD [|,|$:Cs] [une|la|ma|ta|sa|cette] (*WORD) ?qui¿ ?[ne|n’]¿ || ([>adorer|>affirmer|>aimer|>croire|>déclarer|>désirer|>détester|>devoir|>dire|>estimer|>imaginer|>paraître|>paraitre|>penser|>pouvoir|>préférer|>risquer|>savoir|>sembler|>souhaiter|>vouloir]) || avoir [été|semblé|paru] *WORD - <<- /ppas/ morph(\1, ":[NA].*:[fe]", ":[GWm]") and morph(\-1, ":A.*:m", ":[GWfe]") and (morph(\2, ":[123]s") or (not tag(\1, "enum") and morph(\2, ":P"))) + <<- /ppas/ morph(\1, ":[NA].*:[fe]", ":[GWm]") and morph(\-1, ":A.*:m", ":[GWMfe]") and (morph(\2, ":[123]s") or (not tag(\1, "enum") and morph(\2, ":P"))) --1>> =switchGender(\-1) # Accord erroné : “\1” et “\-1” ne sont pas accordés en genre. [|,|$:Cs] [l’|mon|ton|son|notre|votre|leur] (*WORD) ?qui¿ ?[ne|n’]¿ ([>être|>sembler|>devenir|>rester|>demeurer|>redevenir|>paraître|>paraitre]) *WORD [|,|$:Cs] [l’|mon|ton|son|notre|votre|leur] (*WORD) ?qui¿ ?[ne|n’]¿ (>avoir) [été|semblé|paru] *WORD [|,|$:Cs] [l’|mon|ton|son|notre|votre|leur] (*WORD) ?qui¿ ?[ne|n’]¿ ([>être|>sembler]) [devenu+e|redevenu+e|resté+e|demeuré+e] *WORD @@ -19628,11 +19664,11 @@ || ([>adorer|>affirmer|>aimer|>croire|>déclarer|>désirer|>détester|>devoir|>dire|>estimer|>imaginer|>paraître|>paraitre|>penser|>pouvoir|>préférer|>risquer|>savoir|>sembler|>souhaiter|>vouloir]) || être [devenu+e|redevenu+e|resté+e|demeuré+e] *WORD [|,|$:Cs] [l’|mon|ton|son|notre|votre|leur] (*WORD) ?qui¿ ?[ne|n’]¿ || ([>adorer|>affirmer|>aimer|>croire|>déclarer|>désirer|>détester|>devoir|>dire|>estimer|>imaginer|>paraître|>paraitre|>penser|>pouvoir|>préférer|>risquer|>savoir|>sembler|>souhaiter|>vouloir]) || avoir [été|semblé|paru] *WORD - <<- /ppas/ ((morph(\1, ":[NA].*:f", ":[GWme]") and morph(\-1, ":A.*:m", ":[GWfe]")) or (morph(\1, ":[NA].*:m", ":[GWfe]") and morph(\-1, ":A.*:f", ":[GWme]"))) + <<- /ppas/ ((morph(\1, ":[NA].*:f", ":[GWme]") and morph(\-1, ":A.*:m", ":[GWMfe]")) or (morph(\1, ":[NA].*:m", ":[GWfe]") and morph(\-1, ":A.*:f", ":[GWme]"))) and (morph(\2, ":[123]s") or (not tag(\1, "enum") and morph(\2, ":P"))) --1>> =switchGender(\-1) # Accord erroné : “\1” et “\-1” ne sont pas accordés en genre. [|,|$:Cs] [les|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs] (*WORD) ?qui¿ ?[ne|n’]¿ ([>être|>sembler|>devenir|>rester|>demeurer|>redevenir|>paraître|>paraitre]) *WORD [|,|$:Cs] [les|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs] (*WORD) ?qui¿ ?[ne|n’]¿ (>avoir) [été|semblé|paru] *WORD @@ -19644,11 +19680,11 @@ || ([>adorer|>affirmer|>aimer|>croire|>déclarer|>désirer|>détester|>devoir|>dire|>estimer|>imaginer|>paraître|>paraitre|>penser|>pouvoir|>préférer|>risquer|>savoir|>sembler|>souhaiter|>vouloir]) || être [devenus|redevenus|restés|demeurés|devenues|redevenues|restées|demeurées] *WORD [|,|$:Cs] [les|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs] (*WORD) ?qui¿ ?[ne|n’]¿ || ([>adorer|>affirmer|>aimer|>croire|>déclarer|>désirer|>détester|>devoir|>dire|>estimer|>imaginer|>paraître|>paraitre|>penser|>pouvoir|>préférer|>risquer|>savoir|>sembler|>souhaiter|>vouloir]) || avoir [été|semblé|paru] *WORD - <<- /ppas/ ((morph(\1, ":[NA].*:f", ":[GWme]") and morph(\-1, ":A.*:m", ":[GWfe]")) or (morph(\1, ":[NA].*:m", ":[GWfe]") and morph(\-1, ":A.*:f", ":[GWme]"))) and morph(\2, ":(?:[123]p|P)") + <<- /ppas/ ((morph(\1, ":[NA].*:f", ":[GWme]") and morph(\-1, ":A.*:m", ":[GWMfe]")) or (morph(\1, ":[NA].*:m", ":[GWfe]") and morph(\-1, ":A.*:f", ":[GWme]"))) and morph(\2, ":(?:[123]p|P)") --1>> =switchGender(\-1) # Accord erroné : “\1” et “\-1” ne sont pas accordés en genre. *WORD [que|qu’] [un|le|ce|cet|une|la|ma|ta|sa|cette|l’|mon|ton|son|notre|votre|leur|les|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs] *WORD ?[ne|n’]¿ || ([>affirmer|>croire|>déclarer|>désirer|>détester|>dire|>estimer|>imaginer|>penser|>préférer|>savoir|>souhaiter|>vouloir]) || [être|devenir|redevenir|rester|paraître|paraitre|sembler] *WORD @@ -19678,10 +19714,11 @@ TEST: les hommes ne sont pas tout à fait {{fâchées}} ->> fâchés TEST: plusieurs invités qui ne sont pas {{contentes}} TEST: les réunions sans cesse reportées qui sont {{annulés}} TEST: les hommes croyant être {{instruites}} TEST: Les tortures que ce journaliste pense être “normales”. +TEST: La première était René, le parfumeur, qui s’approcha de Catherine __ppas_nom_propre_être_accord_genre__ [|,|$:Cs] ($:M) ?qui¿ ?[ne|n’]¿ ([>être|>sembler|>devenir|>rester|>demeurer|>redevenir|>paraître|>paraitre]) *WORD [|,|$:Cs] ($:M) ?qui¿ ?[ne|n’]¿ (>avoir) [été|semblé|paru] *WORD @@ -23402,10 +23439,11 @@ TEST: Quoi de neuf, mec ? TEST: T’as enfin trouvé des gens avec qui t’entendre ? TEST: ça fait du bien de se l’entendre dire TEST: Laisse tomber, mec ! Pour qui tu te prends ? TEST: il y avait souvent foule +TEST: Cette fille a plus d’un tour dans son sac. !!! Tests historiques !! Index: graphspell-js/char_player.js ================================================================== --- graphspell-js/char_player.js +++ graphspell-js/char_player.js @@ -378,11 +378,11 @@ cut: function (sWord) { // returns an arry of strings (prefix, trimed_word, suffix) let sPrefix = ""; let sSuffix = ""; - let m = /^([ldmtsnjcç]|lorsqu|presqu|jusqu|puisqu|quoiqu|quelqu|qu)[’'‘`]([a-zA-Zà-öÀ-Ö0-9_ø-ÿØ-ßĀ-ʯfi-st-]+)/i.exec(sWord); + let m = /^([ldmtsnjcç]|lorsqu|presqu|jusqu|puisqu|quoiqu|quelqu|qu)[’'‘`ʼ]([a-zA-Zà-öÀ-Ö0-9_ø-ÿØ-ßĀ-ʯfi-st-]+)/i.exec(sWord); if (m) { sPrefix = m[1] + "’"; sWord = m[2]; } m = /^([a-zA-Zà-öÀ-Ö0-9_ø-ÿØ-ßĀ-ʯfi-st]+)(-(?:t-|)(?:ils?|elles?|on|je|tu|nous|vous|ce)$)/i.exec(sWord); Index: graphspell-js/tokenizer.js ================================================================== --- graphspell-js/tokenizer.js +++ graphspell-js/tokenizer.js @@ -37,11 +37,11 @@ [/^(?:https?:\/\/|www[.]|[a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯff-st_-]+[@.][a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯff-st_-]{2,}[@.])[a-zA-Z0-9][a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯff-st_.\/?&!%=+*"'@$#-]+/, 'LINK'], [/^[#@][a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯff-st_-]+/, 'TAG'], [/^<[a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯff-st]+.*?>|<\/[a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯff-st]+ *>/, 'HTML'], [/^\[\/?[a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯff-st]+\]/, 'PSEUDOHTML'], [/^&\w+;(?:\w+;|)/, 'HTMLENTITY'], - [/^(?:l|d|n|m|t|s|j|c|ç|lorsqu|puisqu|jusqu|quoiqu|qu)['’`]/i, 'WORD_ELIDED'], + [/^(?:l|d|n|m|t|s|j|c|ç|lorsqu|puisqu|jusqu|quoiqu|qu|presqu|quelqu)['’´‘′`ʼ]/i, 'WORD_ELIDED'], [/^\d\d?[h:]\d\d(?:[m:]\d\ds?|)\b/, 'HOUR'], [/^\d+(?:ers?\b|res?\b|è[rm]es?\b|i[èe][mr]es?\b|de?s?\b|nde?s?\b|ès?\b|es?\b|ᵉʳˢ?|ʳᵉˢ?|ᵈᵉ?ˢ?|ⁿᵈᵉ?ˢ?|ᵉˢ?)/, 'WORD_ORDINAL'], [/^\d+(?:[.,]\d+|)/, 'NUM'], [/^[&%‰€$+±=*/<>⩾⩽#|×¥£§¢¬÷@-]/, 'SIGN'], [/^[a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯff-stᴀ-ᶿᵉʳˢⁿᵈ_]+(?:[’'`-][a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯff-stᴀ-ᶿᵉʳˢⁿᵈ_]+)*/, 'WORD'] Index: graphspell/char_player.py ================================================================== --- graphspell/char_player.py +++ graphspell/char_player.py @@ -364,11 +364,11 @@ aPfx2 = frozenset([ "belgo", "franco", "génito", "gynéco", "médico", "russo" ]) -_zWordPrefixes = re.compile("(?i)^([ldmtsnjcç]|lorsqu|presqu|jusqu|puisqu|quoiqu|quelqu|qu)[’'‘`]([\\w-]+)") +_zWordPrefixes = re.compile("(?i)^([ldmtsnjcç]|lorsqu|presqu|jusqu|puisqu|quoiqu|quelqu|qu)[’'‘`ʼ]([\\w-]+)") _zWordSuffixes = re.compile("(?i)^(\\w+)(-(?:t-|)(?:ils?|elles?|on|je|tu|nous|vous|ce))$") def cut (sWord): "returns a tuple of strings (prefix, trimed_word, suffix)" sPrefix = "" Index: graphspell/tokenizer.py ================================================================== --- graphspell/tokenizer.py +++ graphspell/tokenizer.py @@ -29,11 +29,11 @@ r'(?P[A-Z][.][A-Z][.](?:[A-Z][.])*)', r'(?P(?:https?://|www[.]|\w+[@.]\w\w+[@.])\w[\w./?&!%=+*"\'@$#-]+)', r'(?P[#@][\w-]+)', r'(?P<\w+.*?>|)', r'(?P\[/?\w+\])', - r"(?P(?:l|d|n|m|t|s|j|c|ç|lorsqu|puisqu|jusqu|quoiqu|qu)['’`])", + r"(?P(?:l|d|n|m|t|s|j|c|ç|lorsqu|puisqu|jusqu|quoiqu|qu|presqu|quelqu)['’´‘′`ʼ])", r'(?P\d+(?:ers?|res?|è[rm]es?|i[èe][mr]es?|de?s?|nde?s?|ès?|es?|ᵉʳˢ?|ʳᵉˢ?|ᵈᵉ?ˢ?|ⁿᵈᵉ?ˢ?|ᵉˢ?)\b)', r'(?P\d\d?[h:]\d\d(?:[m:]\d\ds?|)\b)', r'(?P\d+(?:[.,]\d+|))', r'(?P[&%‰€$+±=*/<>⩾⩽#|×¥£¢§¬÷@-])', r"(?P\w+(?:[’'`-]\w+)*)"