186 lines
5.9 KiB
JavaScript
186 lines
5.9 KiB
JavaScript
import test from 'tape'
|
||
import nlp from '../_lib.js'
|
||
const here = '[two/contraction] '
|
||
|
||
test('tricky contractions', function (t) {
|
||
let doc = nlp(`I’m `)
|
||
doc.contractions().expand()
|
||
t.equal(doc.text(), 'I am ', here + "i'm")
|
||
|
||
doc = nlp(` i can’t `)
|
||
doc.contractions().expand()
|
||
t.equal(doc.text(), ' i can not ', here + "i can't")
|
||
|
||
doc = nlp(`spencer’s clean`)
|
||
doc.contractions().expand()
|
||
t.equal(doc.text(), 'spencer is clean', here + "spencer's")
|
||
|
||
doc = nlp(`wouldn’t be good`)
|
||
doc.contractions().expand()
|
||
t.equal(doc.text(), 'would not be good', here + 'wouldnt')
|
||
|
||
doc = nlp(`what’d you see`)
|
||
doc.contractions().expand()
|
||
t.equal(doc.text(), 'what did you see', here + 'whatd')
|
||
|
||
doc = nlp(`spencer’d go see`)
|
||
doc.contractions().expand()
|
||
t.equal(doc.text(), 'spencer would go see', here + 'spencerd')
|
||
|
||
doc = nlp(`I ain't gettin' picked last`)
|
||
doc.contractions().expand()
|
||
t.equal(doc.text(), 'I am not gettin\' picked last', here + 'aint')
|
||
|
||
t.end()
|
||
})
|
||
|
||
test('contractions v possessive', function (t) {
|
||
let doc = nlp("spencer's not cool")
|
||
doc.contractions().expand()
|
||
t.equal(doc.text(), 'spencer is not cool', 'adj contraction')
|
||
|
||
doc = nlp("spencer's walk")
|
||
doc.contractions().expand()
|
||
t.equal(doc.text(), "spencer's walk", 'noun not contraction')
|
||
|
||
doc = nlp("spencer's runs")
|
||
doc.contractions().expand()
|
||
t.equal(doc.text(), "spencer's runs", 'present-tense not contraction')
|
||
t.end()
|
||
})
|
||
|
||
test('match contractions/possessives', function (t) {
|
||
const doc = nlp(`i think it's spencer's`)
|
||
t.equal(doc.has('it'), true, here + 'has it')
|
||
t.equal(doc.has('spencer'), true, here + 'has spencer')
|
||
t.equal(doc.has(`spencer's`), true, here + "has spencer's")
|
||
t.equal(doc.has(`i'm`), false, here + 'not false-positive')
|
||
t.equal(doc.has(`it'll`), false, here + 'not false-positive-2')
|
||
t.end()
|
||
})
|
||
|
||
test('contraction whitespace', function (t) {
|
||
let doc = nlp(`i didn't know.`)
|
||
t.equal(doc.text(), `i didn't know.`, here + 'init-whitespace')
|
||
|
||
doc.contractions().expand()
|
||
t.equal(doc.text(), `i did not know.`, here + 'expanded-whitespace')
|
||
|
||
doc = nlp(`i didn't.`)
|
||
t.equal(doc.text(), `i didn't.`, here + 'init-period')
|
||
|
||
doc.contractions().expand()
|
||
t.equal(doc.text(), `i did not.`, here + 'expanded-period')
|
||
|
||
t.end()
|
||
})
|
||
|
||
test('number-range', function (t) {
|
||
let doc = nlp(`between 5-7.`)
|
||
t.equal(doc.has('5 to 7'), true, here + 'range-preposition-match')
|
||
t.equal(doc.has('#NumberRange'), true, here + 'has NumberRange tag')
|
||
t.equal(doc.has('#Value'), true, here + 'has Value tag')
|
||
|
||
let arr = nlp('1-2').contractions().expand().match('#Value').out('array')
|
||
t.equal(arr.length, 2, here + 'found numbers')
|
||
|
||
doc = nlp('20th-21st')
|
||
t.equal(doc.has('#NumberRange'), true, 'ordinal has NumberRange tag')
|
||
t.equal(doc.has('#Ordinal'), true, 'has Ordinal tag')
|
||
arr = doc.contractions().expand().terms().out('array')
|
||
t.deepEqual(arr, ['20th', 'to', '21st'], here + 'num-range expand')
|
||
|
||
doc = nlp('4-5pm')
|
||
t.equal(doc.has('#NumberRange'), true, 'time has NumberRange tag')
|
||
t.equal(doc.has('#Ordinal'), false, 'time is not an Ordinal tag')
|
||
arr = doc.contractions().expand().terms().out('array')
|
||
t.deepEqual(arr, ['4', 'to', '5pm'], here + 'time-range expand')
|
||
|
||
doc = nlp('3:45-11pm')
|
||
t.equal(doc.has('#NumberRange'), true, 'time has NumberRange tag')
|
||
t.equal(doc.has('#Time'), true, 'time tag')
|
||
arr = doc.contractions().expand().terms().out('array')
|
||
t.deepEqual(arr, ['3:45', 'to', '11pm'], here + 'time-range expand2')
|
||
t.end()
|
||
})
|
||
|
||
test('number-range with spaces', function (t) {
|
||
let doc = nlp('12 - 14')
|
||
t.equal(doc.has('#Value to #NumberRange'), true, here + 'has NumberRange tags')
|
||
t.equal(doc.text(), '12 - 14', here + 'text is normal')
|
||
t.equal(doc.contractions().expand().text(), '12 to 14', here + 'contraction expands')
|
||
|
||
doc = nlp('4 - 5pm')
|
||
t.equal(doc.has('#Value to #NumberRange'), true, here + 'has NumberRange tags #2')
|
||
t.equal(doc.text(), '4 - 5pm', here + 'text is proper #2')
|
||
t.equal(doc.contractions().expand().text(), '4 to 5pm', here + 'contraction expands #2')
|
||
|
||
t.end()
|
||
})
|
||
|
||
test('french-contraction', function (t) {
|
||
const doc = nlp(`oh j'aime ca`)
|
||
t.equal(doc.has('aime'), true, here + 'has verb')
|
||
t.equal(doc.has('je'), true, here + 'has je')
|
||
t.end()
|
||
})
|
||
|
||
test('replace-contraction', function (t) {
|
||
const doc = nlp(`i'd walked`)
|
||
doc.replace('had', 'foo')
|
||
t.equal(doc.text(), `i foo walked`, here + 'replace-contraction')
|
||
t.end()
|
||
})
|
||
|
||
test('remove-contraction', function (t) {
|
||
const doc = nlp(`i'd walked`)
|
||
doc.remove('had')
|
||
t.equal(doc.text(), `i walked`, here + 'remove-contraction')
|
||
t.end()
|
||
})
|
||
|
||
test('insert-contraction', function (t) {
|
||
let doc = nlp(`i'd walked`)
|
||
let m = doc.match('had')
|
||
m.insertBefore('really')
|
||
t.equal(doc.text(), `i really had walked`, here + 'insertBefore-contraction')
|
||
|
||
doc = nlp(`i'd walked`)
|
||
m = doc.match('i')
|
||
m.insertAfter('really')
|
||
t.equal(doc.text(), `i really had walked`, here + 'insertAfter-contraction')
|
||
t.end()
|
||
})
|
||
|
||
test('insert does not trigger contractions', function (t) {
|
||
const doc = nlp(`we've walked`)
|
||
doc.insertAfter('cool')
|
||
t.equal(doc.text(), `we've walked cool`, here + 'insert-no-contraction')
|
||
t.end()
|
||
})
|
||
|
||
test('split-contraction', function (t) {
|
||
// let doc = nlp(`i'd walked`)
|
||
// let m = doc.splitOn('had')
|
||
// t.deepEqual(m.out('array'), ['i', 'had', 'walked'], here + 'splitOn-contraction')
|
||
|
||
// doc = nlp(`i'd walked`)
|
||
// m = doc.splitAfter('i')
|
||
// t.deepEqual(m.out('array'), ['i', 'had walked'], here + 'splitAfter-contraction')
|
||
|
||
// doc = nlp(`i'd walked`)
|
||
// m = doc.splitBefore('had')
|
||
// t.deepEqual(m.out('array'), ['i', 'had walked'], here + 'splitBefore-contraction')
|
||
|
||
const doc = nlp(`i've walked`)
|
||
const m = doc.splitAfter('walked')
|
||
t.deepEqual(m.out('array'), [`i've walked`], here + 'split-contraction-miss-1')
|
||
|
||
// doc = nlp(`i'd walked`)
|
||
// m = doc.splitAfter('had')
|
||
// t.deepEqual(m.out('array'), [`i've`, 'walked'], here + 'split-contraction-miss')
|
||
|
||
t.end()
|
||
})
|
||
|