@@ -349,11 +349,11 @@ } //////// Disambiguator for regex rules -function select (dTokenPos, nPos, sWord, sPattern) { +function select (dTokenPos, nPos, sWord, sPattern, sNegPattern="") { if (!sWord) { return true; } if (!dTokenPos.has(nPos)) { console.log("Error. There should be a token at this position: ", nPos); @@ -361,30 +361,26 @@ } let lMorph = gc_engine.oSpellChecker.getMorph(sWord); if (lMorph.length === 0 || lMorph.length === 1) { return true; } - let lSelect = lMorph.filter( sMorph => sMorph.search(sPattern) !== -1 ); - if (lSelect.length > 0 && lSelect.length != lMorph.length) { - dTokenPos.get(nPos)["lMorph"] = lSelect; - } - return true; -} - -function exclude (dTokenPos, nPos, sWord, sPattern) { - if (!sWord) { - return true; - } - if (!dTokenPos.has(nPos)) { - console.log("Error. There should be a token at this position: ", nPos); - return true; - } - let lMorph = gc_engine.oSpellChecker.getMorph(sWord); - if (lMorph.length === 0 || lMorph.length === 1) { - return true; - } - let lSelect = lMorph.filter( sMorph => sMorph.search(sPattern) === -1 ); + let lSelect; + if (sPattern) { + if (sNegPattern) { + lSelect = lMorph.filter( sMorph => sMorph.search(sPattern) !== -1 && sMorph.search(sNegPattern) === -1 ); + } + else { + lSelect = lMorph.filter( sMorph => sMorph.search(sPattern) !== -1 ); + } + } + else if (sNegPattern) { + lSelect = lMorph.filter( sMorph => sMorph.search(sNegPattern) === -1 ); + } + else { + console.log("[Grammalecte] Error: missing pattern for disambiguation selection..."); + return true; + } if (lSelect.length > 0 && lSelect.length != lMorph.length) { dTokenPos.get(nPos)["lMorph"] = lSelect; } return true; } @@ -395,30 +391,32 @@ } //// Disambiguation for graph rules -function g_select (oToken, sPattern) { +function g_select (oToken, sPattern, sNegPattern="") { // select morphologies for according to , always return true let lMorph = (oToken.hasOwnProperty("lMorph")) ? oToken["lMorph"] : gc_engine.oSpellChecker.getMorph(oToken["sValue"]); if (lMorph.length === 0 || lMorph.length === 1) { return true; } - let lSelect = lMorph.filter( sMorph => sMorph.search(sPattern) !== -1 ); - if (lSelect.length > 0 && lSelect.length != lMorph.length) { - oToken["lMorph"] = lSelect; - } - return true; -} - -function g_exclude (oToken, sPattern) { - // select morphologies for according to , always return true - let lMorph = (oToken.hasOwnProperty("lMorph")) ? oToken["lMorph"] : gc_engine.oSpellChecker.getMorph(oToken["sValue"]); - if (lMorph.length === 0 || lMorph.length === 1) { + let lSelect; + if (sPattern) { + if (sNegPattern) { + lSelect = lMorph.filter( sMorph => sMorph.search(sPattern) !== -1 && sMorph.search(sNegPattern) === -1 ); + } + else { + lSelect = lMorph.filter( sMorph => sMorph.search(sPattern) !== -1 ); + } + } + else if (sNegPattern) { + lSelect = lMorph.filter( sMorph => sMorph.search(sNegPattern) === -1 ); + } + else { + console.log("[Grammalecte] Error: missing pattern for disambiguation selection..."); return true; } - let lSelect = lMorph.filter( sMorph => sMorph.search(sPattern) === -1 ); if (lSelect.length > 0 && lSelect.length != lMorph.length) { oToken["lMorph"] = lSelect; } return true; }