Index: gc_core/js/lang_core/gc_functions.js ================================================================== --- gc_core/js/lang_core/gc_functions.js +++ gc_core/js/lang_core/gc_functions.js @@ -427,14 +427,19 @@ lMorph.push(...sNewMorph.split("|")); oToken["lMorph"] = lMorph; return true; } -function g_rewrite (oToken, sToReplace, sReplace) { +function g_rewrite (oToken, sToReplace, sReplace, bRegEx=false) { // Disambiguation: rewrite morphologies let lMorph = (oToken.hasOwnProperty("lMorph")) ? oToken["lMorph"] : gc_engine.oSpellChecker.getMorph(oToken["sValue"]); - oToken["lMorph"] = lMorph.map(s => s.replace(sToReplace, sReplace)); + if (bRegEx) { + oToken["lMorph"] = lMorph.map(sMorph => sMorph.replace(new RegExp(sToReplace), sReplace)); + } + else { + oToken["lMorph"] = lMorph.map(sMorph => sMorph.replace(sToReplace, sReplace)); + } return true; } function g_define (oToken, sMorphs) { // set morphologies of , always return true Index: gc_core/py/lang_core/gc_functions.py ================================================================== --- gc_core/py/lang_core/gc_functions.py +++ gc_core/py/lang_core/gc_functions.py @@ -375,14 +375,17 @@ lMorph.extend(sNewMorph.split("|")) dToken["lMorph"] = lMorph return True -def g_rewrite (dToken, sToReplace, sReplace): +def g_rewrite (dToken, sToReplace, sReplace, bRegEx=False): "Disambiguation: rewrite morphologies" lMorph = dToken["lMorph"] if "lMorph" in dToken else _oSpellChecker.getMorph(dToken["sValue"]) - dToken["lMorph"] = [ sMorph.replace(sToReplace, sReplace) for sMorph in lMorph ] + if bRegEx: + dToken["lMorph"] = [ re.sub(sToReplace, sReplace, sMorph) for sMorph in lMorph ] + else: + dToken["lMorph"] = [ sMorph.replace(sToReplace, sReplace) for sMorph in lMorph ] return True def g_define (dToken, sMorphs): "Disambiguation: set morphologies of , always return True" Index: gc_lang/fr/rules.grx ================================================================== --- gc_lang/fr/rules.grx +++ gc_lang/fr/rules.grx @@ -19186,10 +19186,11 @@ [bien|mal|fort] @:[AQW] <<- not value(<1, "|un|le|ce|du|mon|ton|son|notre|votre|leur|") ~1>> * si @:[AQW]¬:G <<- not (value(\2, "|bien|") and value(>1, "|que|qu’|")) and not value(\2, "|tant|") ~1>> * + <<- __also__ and morph(\2, ":Q:A") =>> rewrite(\2, ":V[^:]+:Q", "", True) un [chouia|chouïa|rien|tantinet] ?[trop|plus|moins]¿ <<- morph(>1, ":A", ":G") ~>> * un [brin|minimum|poil|soupçon] ?[trop|plus|moins]¿ @@ -19208,11 +19209,11 @@ __purge_adverbes__ [assez|trop] ~ment$ <<- morph(\2, ":W", ":3p") ~>> * @:[NAQ] [le|la] [plus|moins] ~.ment$ $:A - <<- morph(\4, ":W", ":A") ~2:4>> * + <<- morph(\-2, ":W", ":A") ~2:-2>> * complètement <<- not morph(<1, ":D.*:m") ~>> * ~.ment$ ?[parlant|pas]¿ @@ -23538,10 +23539,11 @@ <<- /gn/ morph(\3, ":[NA].*:[si]", ":G") and morph(\4, ":[NA].*:p", ":[GWsi]") and not apposition(\3, \4) -4>> =suggFemSing(\4) && Accord de nombre erroné avec « \2 \3 » : « \4 » devrait être au singulier. TEST: La plus grande {{cinglé}}. ->> cinglée TEST: il imaginait de la pluie {{noir}} tombant sur une terre dévastée. ->> noire +TEST: la place {{balayées}} par le vent ->> balayée TEST: je voyais de la pluie {{noires}} ->> noire TEST: Il faut donc examiner ensemble le panneau et la paroi latérale. TEST: Il faut donc examiner ensemble le panneau et la paroi latéraux. TEST: Il faut donc examiner ensemble les panneaux et la paroi latéraux. TEST: Il faut donc examiner ensemble les panneaux et la paroi latérale. @@ -32883,11 +32885,11 @@ TEST: Venir vaincue ne lui épargna aucune indignité. TEST: Mais migrer un site et ses contenus prend du temps… TEST: y être sans ma femme ni les enfants fait monter en moi une certaine nervosité. -__conj_le_la_leur_nom__ +__conj_le_la_leur_nom!5__ le *WORD @:V¬:(?:3s|P|Q|Y|3p!|G|M) <<- /conj/ not tag(\2, "_enum_") and morph(<1, ":C||>,", ":[YP]") and morph(\2, ":[NA].*:[si]", ":G") and not ( (value(\2, "|dizaine|douzaine|quinzaine|vingtaine|trentaine|quarantaine|cinquantaine|soixantaine|centaine|majorité|minorité|millier|partie|poignée|tas|paquet|moitié|") or tagbefore(\1, "_ni_") or value(<1, "|et|ou|")) and morph(\3, ":3?p") ) and not agreement(\2, \3) and not ( morph(\2, "(?:[123][sp]|P)") and not value(<1, "||,|") ) >>> @@ -32917,37 +32919,37 @@ <<- /conj/ not tag(\2, "_enum_") and morph(<1, ":C||>,", ":[YP]") and morph(\2, ":[NA].*:[si]", ":G") and not ( (value(\2, "|dizaine|douzaine|quinzaine|vingtaine|trentaine|quarantaine|cinquantaine|soixantaine|centaine|majorité|minorité|millier|partie|poignée|tas|paquet|moitié|") or tagbefore(\1, "_ni_") or value(<1, "|et|ou|")) and morph(\4, ":3p") ) -4>> =suggVerb(\4, ":3s") && Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du singulier. -TEST: La {{N.S.A.}} {{espionneras}} toujours tout le monde ->> NSA|||espionnera -TEST: La suspicion envers les élus {{accroissaient}}… ->> accroissait TEST: Le chien n’{{es}} pas mort. ->> est +TEST: le chat {{finissent}} ->> finit TEST: Le damné {{donnes}} ->> donne|donné +TEST: Le carré {{reviens}} à la mode ->> revient +TEST: Le chien y {{viens}} ->> vient +TEST: Le feu nous {{donnes}} chaud. ->> donne +TEST: tout le monde {{prends}} ses aises ->> prend TEST: La Corée {{peux}} gagner. ->> peut TEST: La Corée ne {{pourras}} pas gagner. ->> pourra -TEST: L’homme y {{donnes}} ->> donne TEST: la femme {{donnes}} ->> donne TEST: la petite {{arrives}} ->> arrive -TEST: leur petite {{donnes}} ->> donne +TEST: La proscription de nager {{pourraient}} nous porter préjudice à long terme ->> pourrait +TEST: la marchande {{marchandes}} ->> marchande|marchande|marchandée +TEST: la grande se {{pensaient}} invincible ->> pensait +TEST: tu sais, la chatte {{passes}} par ce trou ->> passe TEST: la femme {{pensent}} à ses filles ->> pense -TEST: Le carré {{reviens}} à la mode ->> revient -TEST: Le chien y {{viens}} ->> vient -TEST: L’homme le {{deviens}} ->> devient +TEST: La {{N.S.A.}} {{espionneras}} toujours tout le monde ->> NSA|||espionnera TEST: La femme la {{prends}} ->> prend -TEST: Le feu nous {{donnes}} chaud. ->> donne -TEST: tout le monde {{prends}} ses aises ->> prend -TEST: La proscription de nager {{pourraient}} nous porter préjudice à long terme ->> pourrait -TEST: la marchande {{marchandes}} ->> marchande|marchandée -TEST: la chatte {{finis}} -TEST: le chat {{finis}} +TEST: La suspicion envers les élus {{accroissaient}}… ->> accroissait TEST: leur chat qui {{torturent}} une souris ->> torture TEST: leur homme à tout faire {{oublient}} toujours tout ->> oublie TEST: leur fils ne {{parlez}} jamais ->> parle -TEST: la grande se {{pensaient}} invincible ->> pensait +TEST: leur petite {{donnes}} ->> donne TEST: tu vois, leur donne {{donnes}} du fil à retordre ->> donne -TEST: L’homme sur le bateau de Patrick {{viens}} de temps en temps {{mangé}} chez moi. ->> vient|||manger +TEST: L’homme sur le bateau de Patrick {{viens}} de temps en temps manger chez moi. ->> vient +TEST: L’homme y {{donnes}} ->> donne +TEST: L’homme le {{deviens}} ->> devient TEST: L’hypothétique nouveau président TEST: La moitié d’entre elles voient leurs loyers diminuer depuis le début de l’année TEST: le loquet d’une des petites portes. TEST: L’électricité, l’hydrogène, l’air comprimé n’existent pas… TEST: la Syrie, l’Irak, la Mésopotamie tombaient.