Files
2026-07-13 12:48:55 +08:00

258 lines
6.6 KiB
JavaScript

import test from 'tape'
import nlp from '../_lib.js'
const here = '[three/number-value] '
test('value-lumper-splitter:', function (t) {
let r = nlp('202 199')
t.equal(r.values().length, 2, here + 'two-numbers')
r = nlp('two hundred and fifty times six')
t.equal(r.values().length, 2, here + 'two-numbers2')
r = nlp('one two')
t.equal(r.values().length, 2, here + 'two-numbers3')
r = nlp('fifth ninth')
t.equal(r.values().length, 2, here + 'two-numbers4')
t.end()
})
test('value-basic:', function (t) {
const r = nlp('third month of 2019')
r.values().toNumber()
t.equal(r.out(), '3rd month of 2019', here + 'toNumber')
r.values().toText()
t.equal(r.out(), 'third month of two thousand and nineteen', here + 'toText')
// r = nlp('third month of two thousand and nineteen')
// r.values().toCardinal()
// t.equal(r.out(), 'three months of two thousand and nineteen', here + 'toCardinal')
// r = nlp('three months of two thousand nineteen')
// r.values().toOrdinal()
// t.equal(r.out(), 'third month of two thousand and nineteenth', here + 'toOrdinal')
// r.values()
// .toNumber()
// .all()
// t.equal(r.out(), '3rd month of 2019th', here + 'toNumber2')
t.end()
})
test('value-to_ordinal:', function (t) {
const arr = [
[11, '11th'],
[5, '5th'],
[22, '22nd'],
]
arr.forEach(function (a) {
const str = nlp(a[0])
.values()
.toOrdinal()
.out('normal')
t.equal(str, a[1], here + a[0])
})
t.end()
})
test('value-number:', function (t) {
const arr = [
['five hundred feet', 500],
['fifty square feet', 50],
['90 hertz', 90],
// ['5 six-ounce containers', 5],
['twelve 2-gram containers', 12],
['thirty-seven forever-21 stores', 37],
]
arr.forEach(function (a) {
const str = nlp(a[0])
.values()
.toNumber()
.terms(0)
.first()
.out('normal')
a[1] = String(a[1])
t.equal(str, a[1], here + a[0])
})
t.end()
})
test('add/subtract:', function (t) {
let r = nlp('beginning of 2019')
.values()
.add(2)
.all()
t.equal(r.out(), 'beginning of 2021', here + 'add-2-cardinal')
r = nlp('beginning of the 2019th')
.values()
.add(2)
.all()
t.equal(r.out(), 'beginning of the 2021st', here + 'add-2-ordinal')
r = nlp('beginning of the 2019th')
.values()
.add(-2)
.all()
t.equal(r.out(), 'beginning of the 2017th', here + 'add-minus-2-ordinal')
r = nlp('beginning of 2019')
.values()
.subtract(2)
.all()
t.equal(r.out(), 'beginning of 2017', here + 'subtract-2-cardinal')
r = nlp('beginning of the 2019th')
.values()
.subtract(2)
.all()
t.equal(r.out(), 'beginning of the 2017th', here + 'subtract-2-ordinal')
r = nlp('seventeen years old')
.values()
.add(2)
.all()
t.equal(r.out(), 'nineteen years old', here + 'text-add-2-ordinal')
r = nlp('seventeenth birthday')
.values()
.add(2)
.all()
t.equal(r.out(), 'nineteenth birthday', here + 'text-add-2-ordinal')
r = nlp('seventeen years old')
.values()
.subtract(2)
.all()
t.equal(r.out(), 'fifteen years old', here + 'text-subtract-2-cardinal')
r = nlp('seventeenth birthday')
.values()
.subtract(2)
.all()
t.equal(r.out(), 'fifteenth birthday', here + 'text-subtract-2-cardinal')
r = nlp('seven apples and 1,231 peaches')
.values()
.add(50)
.all()
t.equal(r.out(), 'fifty seven apples and 1,281 peaches', here + 'two-add-50s')
t.end()
})
test('increment:', function (t) {
let r = nlp('seven apples and 231 peaches')
r.values().increment()
t.equal(r.out(), 'eight apples and 232 peaches', here + 'increment-cardinal')
r.values().decrement()
t.equal(r.out(), 'seven apples and 231 peaches', here + 'decrement-cardinal')
r = nlp('seventh place and 12th place')
r.values()
.increment()
.increment()
t.equal(r.out(), 'ninth place and 14th place', here + 'increment-ordinal')
r.values()
.decrement()
.decrement()
t.equal(r.out(), 'seventh place and 12th place', here + 'decrement-ordinal')
t.end()
})
test('number splits', function (t) {
const arr = ['12, 34, 56', '12 34 56', '12, 34, 56', '1 2 4']
arr.forEach(str => {
const tokens = nlp(str)
.values()
.out('array')
t.equal(tokens.length, 3, here + str)
})
t.end()
})
// test('nounit:', function(t) {
// let r = nlp('seven apples and 231 peaches')
// let arr = r.values().out('array')
// t.deepEqual(arr, ['seven apples', '231 peaches'])
// arr = r
// .values()
// .noUnits()
// .out('array')
// t.deepEqual(arr, ['seven', '231'])
// t.end()
// })
// test('value-unit:', function(t) {
// let arr = [
// ['five hundred feet', 'feet'],
// ['fifty hertz', 'hertz'],
// ['100 dollars', 'dollars'],
// // ['$100', 'dollar'],
// // ['¥2.5', 'yen'],
// // ['€3,000,100', 'euro'],
// // ['EUR 9.99', 'eur'],
// // ['5 g', 'g'],
// // ['2 in', 'in'],
// // ['5 g sugar', 'g'],
// ['3 grams', 'grams'],
// ['2 inches', 'inches'],
// ['10 grams of sugar', 'grams'],
// ['fifty inches of snow', 'inches'],
// ['7 years', 'years'],
// ['7.5 days', 'days'],
// ['7th year', 'year'],
// ['7th years', ''],
// ['1 day', 'day'],
// ['one book', 'book'],
// ['first book', 'book'],
// ['7 day', ''],
// ]
// arr.forEach(function(a) {
// const r = nlp(a[0])
// .values()
// .units()
// t.equal(r.out('normal'), a[1], a[0])
// })
// t.end()
// })
// test('value-measurement:', function(t) {
// [
// ['five hundred feet', 'Distance'],
// ['100 kilometers', 'Distance'],
// ['fifty hertz', 'Frequency'],
// ['59 thousand $', 'Money'],
// ['100 mb', 'Data'],
// ['50 руб', 'Money'],
// ['EUR 9.99', 'Money'],
// ['100 dollars', 'Money'],
// ['256 bitcoins', 'Money'],
// ].forEach(function (a) {
// const str = nlp.value(a[0]).measurement;
// str_test(str, a[0], a[1], t);
// });
// t.end();
// });
//
// test('value-of_what:', function(t) {
// [
// ['nine kg', 'kg'],
// ['5 kg of copper', 'copper'],
// ['many of these stories', 'many of these stories'],
// ['room full of beautiful creatures', 'full of beautiful creatures'],
// ['boxes of bags of food', 'boxes of bags of food'],
// ['5 boxes of water', 'boxes of water'],
// ['6 of kids', 'kids'],
// ['10 kids', 'kids'],
// ['just nothing', 'just nothing'],
// ['EUR 77', 'eur'],
// ['kg', 'kg']
// ].forEach(function (a) {
// const str = nlp.value(a[0]).of_what;
// str_test(str, a[0], a[1], t);
// });
// t.end();
// });