From 8b01e1240a2654a69142566eb5d2d1ad900caa00 Mon Sep 17 00:00:00 2001 From: dualfroz Date: Sat, 3 Oct 2026 01:28:17 +0200 Subject: [PATCH] Contract 'he is not' to he's not instead of he'sn't --- src/2-two/contraction-two/api/contract.js | 4 ++-- tests/two/contractions/contract.test.js | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/2-two/contraction-two/api/contract.js b/src/2-two/contraction-two/api/contract.js index c697bf7..0cd8976 100644 --- a/src/2-two/contraction-two/api/contract.js +++ b/src/2-two/contraction-two/api/contract.js @@ -45,8 +45,8 @@ const contract = function () { // spencer would -> spencer'd m = doc.match('#Person would') setContraction(m, `'d`) - // would not -> wouldn't - m = doc.match('(is|was|had|would|should|could|do|does|have|has|can) not') + // would not -> wouldn't (skip words already contracted above, like he's) + m = doc.match('(is|was|had|would|should|could|do|does|have|has|can) not').ifNo('@hasContraction') setContraction(m, `n't`) // i have -> i've m = doc.match('(i|we|they) have') diff --git a/tests/two/contractions/contract.test.js b/tests/two/contractions/contract.test.js index 79f153b..b2599e1 100644 --- a/tests/two/contractions/contract.test.js +++ b/tests/two/contractions/contract.test.js @@ -41,6 +41,23 @@ test('contract basic', function (t) { t.end() }) +test('contract before not', function (t) { + let doc = nlp('he is not here') + doc.contract() + t.equal(doc.text(), `he's not here`, here + 'he is not') + doc.contractions().expand() + t.equal(doc.text(), 'he is not here', here + 'he is not expand') + + doc = nlp('spencer is not here') + doc.contract() + t.equal(doc.text(), `spencer's not here`, here + 'spencer is not') + + doc = nlp('that is not true') + doc.contract() + t.equal(doc.text(), `that isn't true`, here + 'that is not') + t.end() +}) + test('avoid contraction messes', function (t) { let doc = nlp('Tony, is').contract() t.equal(doc.has('is'), true, here + 'avoid-contraction 1')