Index: gc_lang/fr/modules-js/gce_analyseur.js ================================================================== --- gc_lang/fr/modules-js/gce_analyseur.js +++ gc_lang/fr/modules-js/gce_analyseur.js @@ -49,47 +49,22 @@ function apposition (sWord1, sWord2) { // returns true if nom + nom (no agreement required) return sWord2.length < 2 || (cregex.mbNomNotAdj(_oSpellChecker.getMorph(sWord2)) && cregex.mbPpasNomNotAdj(_oSpellChecker.getMorph(sWord1))); } -function isVeryAmbiguousAndWrong (sWord1, sWord2, sReqMorphNA, sReqMorphConj, bLastHopeCond) { - //// use it if sWord1 can be also a verb; word2 is assumed to be true via isAmbiguousNAV - let lMorph2 = _oSpellChecker.getMorph(sWord2); - if (lMorph2.length === 0) { - return false; - } - if (cregex.checkConjVerb(lMorph2, sReqMorphConj)) { - // verb word2 is ok - return false; - } - let lMorph1 = _oSpellChecker.getMorph(sWord1); - if (lMorph1.length === 0) { - return false; - } - if (cregex.checkAgreement(lMorph1, lMorph2) && (cregex.mbAdj(lMorph2) || cregex.mbAdjNb(lMorph1))) { - return false; - } - // now, we know there no agreement, and conjugation is also wrong - if (cregex.isNomAdj(lMorph1)) { - return true; - } - //if cregex.isNomAdjVerb(lMorph1): # considered true - if (bLastHopeCond) { - return true; - } - return false; -} - -function g_checkAgreement (oToken1, oToken2) { +function g_checkAgreement (oToken1, oToken2, bNotOnlyNames=true) { // check agreement between and let lMorph1 = oToken1.hasOwnProperty("lMorph") ? oToken1["lMorph"] : _oSpellChecker.getMorph(oToken1["sValue"]); if (lMorph1.length === 0) { return true; } let lMorph2 = oToken2.hasOwnProperty("lMorph") ? oToken2["lMorph"] : _oSpellChecker.getMorph(oToken2["sValue"]); if (lMorph2.length === 0) { return true; + } + if (bNotOnlyNames && not (cregex.mbAdj(lMorph2) || cregex.mbAdjNb(lMorph1))) { + return false; } return cregex.checkAgreement(lMorph1, lMorph2); } function checkAgreement (sWord1, sWord2) { @@ -118,6 +93,5 @@ // Exceptions const aREGULARPLURAL = new Set(["abricot", "amarante", "aubergine", "acajou", "anthracite", "brique", "caca", "café", "carotte", "cerise", "chataigne", "corail", "citron", "crème", "grave", "groseille", "jonquille", "marron", "olive", "pervenche", "prune", "sable"]); -const aSHOULDBEVERB = new Set(["aller", "manger"]); Index: gc_lang/fr/modules/gce_analyseur.py ================================================================== --- gc_lang/fr/modules/gce_analyseur.py +++ gc_lang/fr/modules/gce_analyseur.py @@ -39,40 +39,20 @@ def apposition (sWord1, sWord2): "returns True if nom + nom (no agreement required)" return len(sWord2) < 2 or (cr.mbNomNotAdj(_oSpellChecker.getMorph(sWord2)) and cr.mbPpasNomNotAdj(_oSpellChecker.getMorph(sWord1))) -def isVeryAmbiguousAndWrong (sWord1, sWord2, sReqMorphNA, sReqMorphConj, bLastHopeCond): - "use it if can be also a verb; is assumed to be True via isAmbiguousNAV" - lMorph2 = _oSpellChecker.getMorph(sWord2) - if not lMorph2: - return False - if cr.checkConjVerb(lMorph2, sReqMorphConj): - # verb word2 is ok - return False - lMorph1 = _oSpellChecker.getMorph(sWord1) - if not lMorph1: - return False - if cr.checkAgreement(lMorph1, lMorph2) and (cr.mbAdj(lMorph2) or cr.mbAdjNb(lMorph1)): - return False - # now, we know there no agreement, and conjugation is also wrong - if cr.isNomAdj(lMorph1): - return True - #if cr.isNomAdjVerb(lMorph1): # considered True - if bLastHopeCond: - return True - return False - - -def g_checkAgreement (dToken1, dToken2): +def g_checkAgreement (dToken1, dToken2, bNotOnlyNames=True): "check agreement between and " lMorph1 = dToken1["lMorph"] if "lMorph" in dToken1 else _oSpellChecker.getMorph(dToken1["sValue"]) if not lMorph1: return True lMorph2 = dToken2["lMorph"] if "lMorph" in dToken2 else _oSpellChecker.getMorph(dToken2["sValue"]) if not lMorph2: return True + if bNotOnlyNames and not (cr.mbAdj(lMorph2) or cr.mbAdjNb(lMorph1)): + return False return cr.checkAgreement(lMorph1, lMorph2) def checkAgreement (sWord1, sWord2): "check agreement between and " @@ -100,6 +80,5 @@ #### Exceptions aREGULARPLURAL = frozenset(["abricot", "amarante", "aubergine", "acajou", "anthracite", "brique", "caca", "café", \ "carotte", "cerise", "chataigne", "corail", "citron", "crème", "grave", "groseille", \ "jonquille", "marron", "olive", "pervenche", "prune", "sable"]) -aSHOULDBEVERB = frozenset(["aller", "manger"]) Index: gc_lang/fr/rules.grx ================================================================== --- gc_lang/fr/rules.grx +++ gc_lang/fr/rules.grx @@ -25497,11 +25497,11 @@ avoir [pu|cru|pensé|imaginé] être @:(?:V(?:1.*:Y|2.*:Ip.*:3s|3.*:Is.*:3s)|2p) <<- /ppas/ not value(<1, "|l’|") and not tag_before(\1, "_que_") --1>> =suggVerbPpas(\-1) && Après le verbe “être”, il faut un participe passé. >être ~..er$ - <<- /ppas/ not tag(\2, "_upron_") and morph(\1, ":V", ":Q|>soit/") and (morph(\2, ":Y", ":[NAQ]") or \2 in aSHOULDBEVERB) + <<- /ppas/ not tag(\2, "_upron_") and morph(\1, ":V", ":Q|>soit/") and (morph(\2, ":Y", ":[NAQ]") or morph(\2, ">(?:aller|manger)/")) and not morph(<1, ":Y|>ce/") and not value(<1, "|c’|") and not value(<2, "|ce|") and not tag_before(\1, "_ceque_") and not tag_before(\1, "_sujinfi_") -2>> =suggVerbPpas(\2) && Après “être”, le verbe ne devrait pas être à l’infinitif. >être ~..ez$ @@ -26641,69 +26641,98 @@ 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_det_sing_nom__ - [le|la|l’|un|une|ce|cet|cette|mon|ton|son|ma|ta|sa|notre|votre|leur] *WORD @:V¬:(?:3s|P|Q|Y|3p!|G|M) +__conj_le_la_leur_nom__ + [le|la|l’|leur] *WORD @:V¬:(?:3s|P|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 tag_before(\1, "_ni_") or value(<1, "|et|ou|")) and morph(\3, ":3?p") ) >>> - <<- /conj/ not checkAgreement(\2, \3) - -3>> =suggVerb(\3, ":3s") && Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du singulier. - <<- /conj/ __else__ and isVeryAmbiguousAndWrong(\2, \3, ":s", ":3s", value(<1, "||,|")) - -3>> =suggVerb(\3, ":3s", suggSing) && Accord avec “\1 \2…” incorrect. Conjugaison erronée ou accord nom/adjectif incorrect. + or tag_before(\1, "_ni_") or value(<1, "|et|ou|")) and morph(\3, ":3?p") ) and not checkAgreement(\2, \3) + and not ( morph(\2, "(?:[123][sp]|P)") and not value(<1, "||,|") ) >>> + <<- /conj/ morph(\3, ":A.*:p") or (morph(\3, ":N.*:p") and morph(\2, ":A")) -3>> =suggVerb(\3, ":3s", suggSing) && Accord avec “\1 \2…” incorrect. Conjugaison erronée ou accord nom/adjectif incorrect. + <<- /conj/ __else__ -3>> =suggVerb(\3, ":3s") && Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du singulier. - [le|la|l’|un|une|ce|cet|cette|mon|ton|son|ma|ta|sa|notre|votre|leur] *WORD qui @:V¬:(?:3s|P|3p!|G|M) + [le|la|l’|leur] *WORD qui @:V¬:(?:3s|P|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 tag_before(\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. + -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 TEST: La suspicion envers les élus {{accroissaient}}… ->> accroissait TEST: Le chien n’{{es}} pas mort. -TEST: Ce roman-là de Jean-Paul Sartre {{es}} passionnant. TEST: Le damné {{donnes}} -TEST: Cette confusion qui {{donnent}} le tournis. TEST: La Corée {{peux}} gagner. TEST: La Corée ne {{pourras}} pas gagner. -TEST: une hausse de 2 % {{satisfais}} tout le monde ->> satisfait TEST: L’homme y {{donnes}} +TEST: la femme {{pensent}} à ses filles +TEST: Le carré {{reviens}} à la mode TEST: Le chien y {{viens}} ->> vient TEST: L’homme le {{deviens}} ->> devient TEST: La femme la {{prends}} ->> prend TEST: Le feu nous {{donnes}} chaud. -TEST: une petite {{donnes}} -TEST: tu vois, leur donne {{donnes}} du fil à retordre TEST: tout le monde {{prends}} ses aises ->> prend -TEST: J’aimerais aussi que mon problème {{sois}} réglé. ->> soit TEST: La proscription de nager {{pourraient}} nous porter préjudice à long terme ->> pourrait -TEST: mon chat {{sautes}} -TEST: cette fille {{bouffes}} comme mille -TEST: cette marchande {{marchandes}} TEST: la marchande {{marchandes}} TEST: la chatte {{finis}} TEST: le chat {{finis}} -TEST: une crise {{violent}} -TEST: un cri {{violes}} +TEST: leur chat qui {{torturent}} une souris +TEST: leur homme à tout faire {{oublient}} toujours tout +TEST: tu vois, leur donne {{donnes}} du fil à retordre TEST: L’homme sur le bateau de Patrick {{viens}} de temps en temps {{mangé}} chez moi. TEST: L’hypothétique nouveau président -TEST: une majorité de garçons voient mal comment faire -TEST: un tas de choses pouvaient aller de travers. -TEST: un paquet de gens futés n’y ont vu que du feu. TEST: La moitié d’entre elles voient leurs loyers diminuer depuis le début de l’année -TEST: Une partie de ces propositions étaient naïves -TEST: tu n’acceptais jamais de danser avec quelqu’un si tu avais refusé à quelqu’un d’autre au début 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. +TEST: Le sentiment d’humiliation, la colère nous indiquent que… +TEST: la majorité survenaient sous la contrainte + + +__conj_det_sing_nom__ + [un|ce|cet|mon|ton|son|notre|votre] *WORD @:V¬:(?:3s|P|Y|3p!|G|M) + <<- /conj/ not tag(\2, "_enum_") and morph(<1, ":C||>,", ":[YP]") and morph(\2, ":[NA].*:[me]:[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 tag_before(\1, "_ni_") or value(<1, "|et|ou|")) and morph(\3, ":3?p") ) and not checkAgreement(\2, \3) >>> + <<- /conj/ morph(\3, ":A.*:p") or (morph(\3, ":N.*:p") and morph(\2, ":A")) -3>> =suggVerb(\3, ":3s", suggSing) && Accord avec “\1 \2…” incorrect. Conjugaison erronée ou accord nom/adjectif incorrect. + <<- /conj/ __else__ -3>> =suggVerb(\3, ":3s") && Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du singulier. + + [une|cette|mon|ton|son|ma|ta|sa|notre|votre] *WORD @:V¬:(?:3s|P|Y|3p!|G|M) + <<- /conj/ not tag(\2, "_enum_") and morph(<1, ":C||>,", ":[YP]") and morph(\2, ":[NA].*:[fe]:[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 tag_before(\1, "_ni_") or value(<1, "|et|ou|")) and morph(\3, ":3?p") ) and not checkAgreement(\2, \3) >>> + <<- /conj/ morph(\3, ":A.*:p") or (morph(\3, ":N.*:p") and morph(\2, ":A")) -3>> =suggVerb(\3, ":3s", suggSing) && Accord avec “\1 \2…” incorrect. Conjugaison erronée ou accord nom/adjectif incorrect. + <<- /conj/ __else__ -3>> =suggVerb(\3, ":3s") && Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du singulier. + + [un|une|ce|cet|cette|mon|ton|son|ma|ta|sa|notre|votre] *WORD qui @:V¬:(?:3s|P|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 tag_before(\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: Tu devrais le savoir, ce roman-là de Jean-Paul Sartre {{es}} passionnant. +TEST: Cette confusion qui {{donnent}} le tournis. +TEST: tu sais, une hausse de 2 % {{satisfais}} tout le monde ->> satisfait +TEST: tu sais, une petite {{donnes}} satisfaction +TEST: tu penses mal, cet homme {{mens}} +TEST: J’aimerais aussi que mon problème {{sois}} réglé. ->> soit +TEST: un grand {{ravis}} tous les prix +TEST: mon chat {{sautes}} +TEST: cette fille {{bouffes}} comme mille +TEST: cette marchande {{marchandes}} +TEST: une crise {{violent}} +TEST: un cri {{violes}} +TEST: ton chien {{bouffent}} sans arrêt +TEST: une majorité de garçons voient mal comment faire +TEST: un tas de choses pouvaient aller de travers. +TEST: un paquet de gens futés n’y ont vu que du feu. +TEST: Une partie de ces propositions étaient naïves +TEST: tu n’acceptais jamais de danser avec quelqu’un si tu avais refusé à quelqu’un d’autre au début TEST: des ruisselets, des arbres, une tonnelle qui rappelaient le temps. TEST: son assurance, sa grâce, son sex-appeal nous permettent de passer sans encombre liquides et rasoirs. TEST: Son courage, son ardeur étaient immenses, -TEST: Le sentiment d’humiliation, la colère nous indiquent que… -TEST: la majorité survenaient sous la contrainte __conj_un_une__ [un|une] @:V¬:(?:3s|P|G|Q|M|[NA].*:[si]) <<- /conj/ morph(<1, ":C||>(?:,|dont)", ":(?:Y|P|Q|[123][sp]|R)̉|>(?:sauf|excepté|et|ou)/") @@ -26946,11 +26975,11 @@ __conj_det_plur_nom__ [ces|mes|tes|ses|nos|vos|leurs|quelques|maints] @:[NA].*:[pi]¬:V0 @:V¬:(?:3p|P|Y|G|M|A.*:[pi]) <<- /conj/ morph(<1, ":Cs||>,") and not( morph(\3, ":3s") and before("(?i)\\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") ) >>> - <<- /conj/ morph(\3, ":A.*:s") or (morph(\3, ":N") and morph(\2, ":A")) -3>> =suggVerb(\3, ":3p", suggPlur) && Accord avec « \1 \2… » incorrect. Conjugaison erronée ou accord nom/adjectif incorrect. + <<- /conj/ morph(\3, ":A.*:s") or (morph(\3, ":N.*:s") and morph(\2, ":A")) -3>> =suggVerb(\3, ":3p", suggPlur) && Accord avec « \1 \2… » incorrect. Conjugaison erronée ou accord nom/adjectif incorrect. <<- /conj/ __else__ -3>> =suggVerb(\3, ":3p") && Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du pluriel. [ces|mes|tes|ses|nos|vos|leurs|quelques|maints] @:[NA].*:[pi]¬:V0 qui @:V¬:(?:3p|P|Y|G|M|A.*:e:[pi]) <<- /conj/ morph(<1, ":Cs||>,") and not( morph(\4, ":3s") and before("(?i)\\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") ) @@ -26968,36 +26997,20 @@ TEST: le lien entre les agences de renseignement et ces mêmes entreprises pouvait reposer sur des activités de surveillance à proprement parler. TEST: trier les cons et les connes expose à un violent coup de boomerang TEST: Tu penses que quelqu’un qui frappe sa femme et ses enfants est un bon père ? -__conj_det_plur_nom_confusion__ - les @:[NA].*:[pi]¬:V0 @:V¬:(?:3p|P|Y|G|M|A.*:e:[pi]) - <<- /conj/ morph(<1, ":Cs||>,") - and not( morph(\3, ":3s") and before("(?i)\\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") ) >>> - <<- /conj/ not checkAgreement(\2, \3) - -3>> =suggVerb(\3, ":3p") && Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du pluriel. - <<- /conj/ __else__ and isVeryAmbiguousAndWrong(\2, \3, ":p", ":3p", value(<1, "||,|")) - -3>> =suggVerb(\3, ":3p", suggPlur) && Accord avec “\1 \2…” incorrect. Conjugaison erronée ou accord nom/adjectif incorrect. - - [certains|certaines] @:[NA].*:[pi] @:V¬:(?:3p|P|Y|G|M|A.*:e:[pi]) - <<- /conj/ morph(<1, ":Cs||>,") - and not( morph(\3, ":3s") and before("(?i)\\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") ) >>> - <<- /conj/ not checkAgreement(\2, \3) - -3>> =suggVerb(\3, ":3p") && Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du pluriel. - <<- /conj/ __else__ and isVeryAmbiguousAndWrong(\2, \3, ":m:p", ":3p", value(<1, "||,|")) - -3>> =suggVerb(\3, ":3p", suggMasPlur) && Accord avec “\1 \2…” incorrect. Conjugaison erronée ou accord nom/adjectif incorrect. - <<- /conj/ __else__ and isVeryAmbiguousAndWrong(\2, \3, ":f:p", ":3p", value(<1, "||,|")) - -3>> =suggVerb(\3, ":3p", suggFemPlur) && Accord avec “\1 \2…” incorrect. Conjugaison erronée ou accord nom/adjectif incorrect. - - plusieurs @:[NA].*:[pi] @:V¬:(?:3p|P|Y|G|M|A.*:e:[pi]) - <<- /conj/ morph(<1, ":Cs||>,") - and not( morph(\3, ":3s") and before("(?i)\\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") ) +__conj_les_nom__ + les @:[NA].*:[pi]¬:V0 @:V¬:(?:3p|P|Y|G|M) + <<- /conj/ morph(<1, ":Cs||>,") + and not ( morph(\3, ":3s") and before("(?i)\\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") ) and not checkAgreement(\2, \3) - -3>> =suggVerb(\3, ":3p") && Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du pluriel. + and not ( morph(\2, "(?:[123][sp]|P)") and not value(<1, "||,|") ) >>> + <<- /conj/ morph(\3, ":A.*:s") or (morph(\3, ":N.*:s") and morph(\2, ":A")) -3>> =suggVerb(\3, ":3p", suggPlur) && Accord avec “\1 \2…” incorrect. Conjugaison erronée ou accord nom/adjectif incorrect. + <<- /conj/ __else__ -3>> =suggVerb(\3, ":3p") && Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du pluriel. - [les|certains|certaines|plusieurs] @:[NA].*:[pi] qui @:V¬:(?:[13]p|P|Y|G|M) + les @:[NA].*:[pi] qui @:V¬:(?:3p|P|Y|G|M) <<- /conj/ morph(<1, ":Cs||>,") and not( morph(\4, ":3s") and before("(?i)\\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") ) -4>> =suggVerb(\4, ":3p") && Conjugaison erronée. Accord avec “\1 \2 \3…”. Le verbe devrait être à la 3ᵉ personne du pluriel. TEST: Les abstentions {{est}} présumée manifester un défaut d’opinion marquée @@ -27020,19 +27033,12 @@ TEST: les marchands {{marchande}} TEST: les marchandes {{paie}} TEST: les marchandes {{marchande}} TEST: les chattes {{finis}} TEST: les chattes {{manges}} -TEST: Les tests grand public de Jean-Paul {{montre}} des résultats surprenants. -TEST: les chattes {{danse}} -TEST: certains hommes {{marchande}} sans cesse -TEST: tu sais, certains filtres {{donnes}} de mauvais résultats -TEST: certaines femmes {{danse}} beaucoup -TEST: tu sais, certaines danses {{dérive}} d’autres -TEST: certaines demandes qui {{donne}} le tournis. -TEST: plusieurs personnes {{devienne}} des robots -TEST: plusieurs pressions qui ne {{donne}} pas les résultats attendus. +TEST: les religieux qui n’en {{finisse}} pas de mentir. +TEST: Les tests grand public de Jean-Paul {{montre}} des résultats surprenants.I TEST: les malades que tu as servis {{outrepasse}} leur droit TEST: l’écart entre les riches et les pauvres n’était pas si grand. TEST: Les grands hommes politiques TEST: les charmantes petites mines de toutes les jeunes filles TEST: Les pauvres petites dames sont folles @@ -27041,10 +27047,56 @@ TEST: Les écrivaines Marie Darrieussecq et Annie Ernaux TEST: Les femmes candidates à ce poste doivent se présenter cet après-midi. TEST: Toutes les personnes candidates seront évaluées plusieurs fois. TEST: il les a sélectionnés, les a améliorées pour accroître leur rendement + +__conj_certains_certaines_plusieurs_nom__ + certains @:[NA].*:[pi] @:V¬:(?:3p|P|Y|G|M) + <<- /conj/ morph(<1, ":Cs||>,") + and not( morph(\3, ":3s") and before("(?i)\\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") ) + and not checkAgreement(\2, \3) + and not ( morph(\2, "(?:[123][sp]|P)") and not value(<1, "||,|") ) >>> + <<- /conj/ morph(\3, ":A.*:s") or (morph(\3, ":N.*:s") and morph(\2, ":A")) -3>> =suggVerb(\3, ":3p", suggMasPlur) && Accord avec “\1 \2…” incorrect. Conjugaison erronée ou accord nom/adjectif incorrect. + <<- /conj/ __else__ -3>> =suggVerb(\3, ":3p") && Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du pluriel. + + certaines @:[NA].*:[pi] @:V¬:(?:3p|P|Y|G|M) + <<- /conj/ morph(<1, ":Cs||>,") + and not( morph(\3, ":3s") and before("(?i)\\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") ) + and not checkAgreement(\2, \3) + and not ( morph(\2, "(?:[123][sp]|P)") and not value(<1, "||,|") ) >>> + <<- /conj/ morph(\3, ":A.*:s") or (morph(\3, ":N.*:s") and morph(\2, ":A")) -3>> =suggVerb(\3, ":3p", suggFemPlur) && Accord avec “\1 \2…” incorrect. Conjugaison erronée ou accord nom/adjectif incorrect. + <<- /conj/ __else__ -3>> =suggVerb(\3, ":3p") && Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du pluriel. + + plusieurs @:[NA].*:[pi] @:V¬:(?:3p|P|Y|G|M) + <<- /conj/ morph(<1, ":Cs||>,") + and not( morph(\3, ":3s") and before("(?i)\\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") ) + and not checkAgreement(\2, \3) + and not ( morph(\2, "(?:[123][sp]|P)") and not value(<1, "||,|") ) >>> + <<- /conj/ morph(\3, ":A.*:s") or (morph(\3, ":N.*:s") and morph(\2, ":A")) -3>> =suggVerb(\3, ":3p", suggPlur) && Accord avec “\1 \2…” incorrect. Conjugaison erronée ou accord nom/adjectif incorrect. + <<- /conj/ __else__ -3>> =suggVerb(\3, ":3p") && Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du pluriel. + + [certains|certaines|plusieurs] @:[NA].*:[pi] qui @:V¬:(?:3p|P|Y|G|M) + <<- /conj/ morph(<1, ":Cs||>,") + and not( morph(\4, ":3s") and before("(?i)\\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") ) + -4>> =suggVerb(\4, ":3p") && Conjugaison erronée. Accord avec “\1 \2 \3…”. Le verbe devrait être à la 3ᵉ personne du pluriel. + +TEST: les chattes {{danse}} +TEST: certains hommes {{marchande}} sans cesse +TEST: tu sais, certains filtres {{donnes}} de mauvais résultats +TEST: certaines femmes {{danse}} beaucoup +TEST: tu sais, certaines danses {{dérive}} d’autres +TEST: certaines demandes qui {{donne}} le tournis. +TEST: certaines petites {{fatigue}} +TEST: plusieurs personnes {{devienne}} des robots +TEST: plusieurs pressions qui ne {{donne}} pas les résultats attendus. +TEST: plusieurs petites {{actionne}} le levier ensemble. +TEST: plusieurs femmes {{marchande}} +TEST: j’en connais plusieurs soumises à de très fortes pressions +TEST: certaines femmes prises par leur travail n’ont plus le temps pour rien d’autre. +TEST: certains imbéciles passés à l’ennemi feraient mieux de se taire. + __conj_des_nom__ [|,|(] des @:[NA].*:[pi] @:V¬:(?:3p|P|G|Q|Y|A.*:[pi]|V[23].*:Y) <<- /conj/ morph(>1, ":(?:R|D.*:p)|>au/||>,") >>> <<- /conj/ not morph(\4, ":[NA]") -4>> =suggVerb(\4, ":3p") && Conjugaison erronée. Accord avec “\2 \3…”. Le verbe devrait être à la 3ᵉ personne du pluriel.