Upstream spencermountain/compromise state of the touched files before a2f78f6e79
This commit is contained in:
1 parent
1b935cb309
commit
fc63a2350d
3 files changed
+222
No files matched your search
@@ -0,0 +1,88 @@
|
|||||||
|
export default [
|
||||||
|
// ==== Ambiguous numbers ====
|
||||||
|
// one [second]
|
||||||
|
{ match: `#Cardinal [second]`, group: 0, tag: 'Unit', reason: 'one-second' },
|
||||||
|
// with [a] hundred jobs
|
||||||
|
{
|
||||||
|
match: '!once? [(a|an)] hundred',
|
||||||
|
group: 0,
|
||||||
|
tag: 'Value',
|
||||||
|
reason: 'a-hundred',
|
||||||
|
},
|
||||||
|
// with [a] thousand jobs
|
||||||
|
{
|
||||||
|
match: '!once? [(a|an)] thousand',
|
||||||
|
group: 0,
|
||||||
|
tag: 'Value',
|
||||||
|
reason: 'a-thousand',
|
||||||
|
},
|
||||||
|
// with [a] million jobs
|
||||||
|
{
|
||||||
|
match: '!once? [(a|an)] million',
|
||||||
|
group: 0,
|
||||||
|
tag: 'Value',
|
||||||
|
reason: 'a-million',
|
||||||
|
},
|
||||||
|
// with [a] billion jobs
|
||||||
|
{
|
||||||
|
match: '!once? [(a|an)] billion',
|
||||||
|
group: 0,
|
||||||
|
tag: 'Value',
|
||||||
|
reason: 'a-billion',
|
||||||
|
},
|
||||||
|
// with [a] trillion jobs
|
||||||
|
{
|
||||||
|
match: '!once? [(a|an)] trillion',
|
||||||
|
group: 0,
|
||||||
|
tag: 'Value',
|
||||||
|
reason: 'a-trillion',
|
||||||
|
},
|
||||||
|
// ==== PhoneNumber ====
|
||||||
|
// 1 800 555-1234
|
||||||
|
{ match: '(1|+1) #Value #PhoneNumber', tag: 'PhoneNumber', reason: 'country-code' },
|
||||||
|
// (454) 232-9873
|
||||||
|
{ match: '#NumericValue #PhoneNumber', tag: 'PhoneNumber', reason: 'area-code' },
|
||||||
|
|
||||||
|
// ==== Currency ====
|
||||||
|
// chinese yuan
|
||||||
|
{ match: '#Demonym #Currency', tag: 'Currency', reason: 'demonym-curr' },
|
||||||
|
// ten [bucks]
|
||||||
|
{ match: '#Value [(buck|bucks|grand)]', group: 0, tag: 'Currency', reason: 'value-bucks' },
|
||||||
|
// ==== Money ====
|
||||||
|
// [5] dollars
|
||||||
|
{ match: '[#Value+] #Currency', group: 0, tag: 'Money', reason: 'value-curr' },
|
||||||
|
|
||||||
|
// ==== Ordinal ====
|
||||||
|
// [second] dog
|
||||||
|
{ match: '[second] #Noun', group: 0, tag: 'Ordinal', reason: 'second-noun' },
|
||||||
|
|
||||||
|
// ==== Units ====
|
||||||
|
// 5 [dollars]
|
||||||
|
{ match: '#Value+ [#Currency]', group: 0, tag: 'Unit', reason: 'curr-unit' },
|
||||||
|
// 5 [feet]
|
||||||
|
{ match: '#Value [(foot|feet)]', group: 0, tag: 'Unit', reason: 'foot-unit' },
|
||||||
|
// 500 fifth [ave]
|
||||||
|
{ match: '#Value [#Abbreviation]', group: 0, tag: 'Unit', reason: 'value-abbr' },
|
||||||
|
// 5 [k]
|
||||||
|
{ match: '#Value [k]', group: 0, tag: 'Unit', reason: 'value-k' },
|
||||||
|
// kilometers an hour
|
||||||
|
{ match: '#Unit an hour', tag: 'Unit', reason: 'unit-an-hour' },
|
||||||
|
|
||||||
|
// ==== Magnitudes ====
|
||||||
|
// minus 7
|
||||||
|
{ match: '(minus|negative) #Value', tag: 'Value', reason: 'minus-value' },
|
||||||
|
// seven point five
|
||||||
|
{ match: '#Value (point|decimal) #Value', tag: 'Value', reason: 'decimal-point' },
|
||||||
|
// a [half] second
|
||||||
|
{ match: '#Determiner [(half|quarter)] #Ordinal', group: 0, tag: 'Value', reason: 'half-ord' },
|
||||||
|
// thousand and two
|
||||||
|
{ match: `#Multiple+ and #Value`, tag: 'Value', reason: 'mag-and-value' },
|
||||||
|
// 5 miles [per hour]
|
||||||
|
{ match: '#Value #Unit [(per|an) (hr|hour|sec|second|min|minute)]', group: 0, tag: 'Unit', reason: 'unit-per-dur' },
|
||||||
|
// 5 [square] miles
|
||||||
|
{ match: '#Value [(square|cubic)] #Unit', group: 0, tag: 'Unit', reason: 'square-miles' },
|
||||||
|
// twelve percent
|
||||||
|
{ match: '#Cardinal percent', tag: '#Percent #Unit', reason: 'value-percent' },
|
||||||
|
// 5 [gb]
|
||||||
|
{ match: '#Value [(gb|pa|ft|foot|feet|m)]', group: 0, tag: 'Unit', reason: 'ambig-unit' },
|
||||||
|
]
|
||||||
@@ -0,0 +1,87 @@
|
|||||||
|
export default {
|
||||||
|
ones: {
|
||||||
|
zeroth: 0,
|
||||||
|
first: 1,
|
||||||
|
second: 2,
|
||||||
|
third: 3,
|
||||||
|
fourth: 4,
|
||||||
|
fifth: 5,
|
||||||
|
sixth: 6,
|
||||||
|
seventh: 7,
|
||||||
|
eighth: 8,
|
||||||
|
ninth: 9,
|
||||||
|
zero: 0,
|
||||||
|
one: 1,
|
||||||
|
two: 2,
|
||||||
|
three: 3,
|
||||||
|
four: 4,
|
||||||
|
five: 5,
|
||||||
|
six: 6,
|
||||||
|
seven: 7,
|
||||||
|
eight: 8,
|
||||||
|
nine: 9,
|
||||||
|
},
|
||||||
|
teens: {
|
||||||
|
tenth: 10,
|
||||||
|
eleventh: 11,
|
||||||
|
twelfth: 12,
|
||||||
|
thirteenth: 13,
|
||||||
|
fourteenth: 14,
|
||||||
|
fifteenth: 15,
|
||||||
|
sixteenth: 16,
|
||||||
|
seventeenth: 17,
|
||||||
|
eighteenth: 18,
|
||||||
|
nineteenth: 19,
|
||||||
|
ten: 10,
|
||||||
|
eleven: 11,
|
||||||
|
twelve: 12,
|
||||||
|
thirteen: 13,
|
||||||
|
fourteen: 14,
|
||||||
|
fifteen: 15,
|
||||||
|
sixteen: 16,
|
||||||
|
seventeen: 17,
|
||||||
|
eighteen: 18,
|
||||||
|
nineteen: 19,
|
||||||
|
},
|
||||||
|
tens: {
|
||||||
|
twentieth: 20,
|
||||||
|
thirtieth: 30,
|
||||||
|
fortieth: 40,
|
||||||
|
fourtieth: 40,
|
||||||
|
fiftieth: 50,
|
||||||
|
sixtieth: 60,
|
||||||
|
seventieth: 70,
|
||||||
|
eightieth: 80,
|
||||||
|
ninetieth: 90,
|
||||||
|
twenty: 20,
|
||||||
|
thirty: 30,
|
||||||
|
forty: 40,
|
||||||
|
fourty: 40,
|
||||||
|
fifty: 50,
|
||||||
|
sixty: 60,
|
||||||
|
seventy: 70,
|
||||||
|
eighty: 80,
|
||||||
|
ninety: 90,
|
||||||
|
},
|
||||||
|
multiples: {
|
||||||
|
hundredth: 100,
|
||||||
|
thousandth: 1000,
|
||||||
|
millionth: 1e6,
|
||||||
|
billionth: 1e9,
|
||||||
|
trillionth: 1e12,
|
||||||
|
quadrillionth: 1e15,
|
||||||
|
quintillionth: 1e18,
|
||||||
|
sextillionth: 1e21,
|
||||||
|
septillionth: 1e24,
|
||||||
|
hundred: 100,
|
||||||
|
thousand: 1000,
|
||||||
|
million: 1e6,
|
||||||
|
billion: 1e9,
|
||||||
|
trillion: 1e12,
|
||||||
|
quadrillion: 1e15,
|
||||||
|
quintillion: 1e18,
|
||||||
|
sextillion: 1e21,
|
||||||
|
septillion: 1e24,
|
||||||
|
grand: 1000,
|
||||||
|
},
|
||||||
|
}
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
import test from 'tape'
|
||||||
|
import nlp from '../_lib.js'
|
||||||
|
const here = '[three/number-parse] '
|
||||||
|
|
||||||
|
test('parse numbers', function (t) {
|
||||||
|
const arr = [
|
||||||
|
['seven hundred', 700],
|
||||||
|
['a hundred and seventy', 170],
|
||||||
|
['9 hundred', 900],
|
||||||
|
['9 hundred and 2', 902],
|
||||||
|
['9 hundred and twenty', 920],
|
||||||
|
['hundred and seventy', 170],
|
||||||
|
['hundred and seventy two', 172],
|
||||||
|
['hundred and seventy two thousand', 172000],
|
||||||
|
['seven hundred and twenty', 720],
|
||||||
|
['three twenty', 320],
|
||||||
|
['hundred and three', 103],
|
||||||
|
|
||||||
|
//dropped-hundred
|
||||||
|
['seven twenty', 720],
|
||||||
|
['two twenty', 220],
|
||||||
|
['eight fifty', 850],
|
||||||
|
['two fifty', 250],
|
||||||
|
['two fifty five', 255],
|
||||||
|
|
||||||
|
['two and a half', 2.5],
|
||||||
|
['fifty and a half', 50.5],
|
||||||
|
// ['two fifty and three quarters', 250.75],
|
||||||
|
['twenty two percent', 22],
|
||||||
|
['two hundred and twenty percent', 220],
|
||||||
|
['220 percent', 220],
|
||||||
|
['$220', 220],
|
||||||
|
|
||||||
|
// false-positives
|
||||||
|
['seven and twenty', 7],
|
||||||
|
['three three', 3],
|
||||||
|
['four two zero', 4],
|
||||||
|
// ['three twentieth', null],
|
||||||
|
// ['third twenty', null],
|
||||||
|
// ['seventy hundred', null],
|
||||||
|
]
|
||||||
|
arr.forEach(function (a) {
|
||||||
|
const num = nlp(a[0]).values().get()[0]
|
||||||
|
t.equal(num, a[1], here + a[0])
|
||||||
|
})
|
||||||
|
t.end()
|
||||||
|
})
|
||||||
Reference in new issue
Block a user