tpmkms
Version:
Reusable libraries for Entodicton, a natural language to json converter
147 lines (137 loc) • 5.22 kB
JavaScript
const { knowledgeModule, where } = require('./runtime').theprogrammablemind
const { defaultContextCheck } = require('./helpers')
const numbers_tests = require('./numbers.test.json')
const instance = require('./numbers.instance.json')
const gdefaults = require('./gdefaults')
const sdefaults = require('./sdefaults')
/*
TODO
10 microns
10 million 300 hundred and fifty
*/
const config = {
name: 'numbers',
operators: [
// "([round] ([roundable]) ([to|]) )",
// { pattern: "([testNumber])", scope: 'testing' },
"([number])",
"([integer])",
],
bridges: [
/*
{
id: "testNumber",
scope: 'testing',
},
*/
{
id: "number",
bridge: "{ instance: false, ...next(operator) }"
},
{
id: "integer",
isA: ['number'],
bridge: "{ instance: false, ...next(operator) }"
},
],
words: {
"literals": {
"one": [{"id": "integer", "initial": "{ value: 1, instance: true }" }],
"ones": [{"id": "integer", "initial": "{ value: 1, integer: 'many', instance: true }" }],
"two": [{"id": "integer", "initial": "{ value: 2 , instance: true}" }],
"twos": [{"id": "integer", "initial": "{ value: 2 , integer: 'many', instance: true}" }],
"three": [{"id": "integer", "initial": "{ value: 3, instance: true }" }],
"threes": [{"id": "integer", "initial": "{ value: 3, integer: 'many', instance: true }" }],
"four": [{"id": "integer", "initial": "{ value: 4, instance: true }" }],
"fours": [{"id": "integer", "initial": "{ value: 4, integer: 'many', instance: true }" }],
"five": [{"id": "integer", "initial": "{ value: 5, instance: true }" }],
"fives": [{"id": "integer", "initial": "{ value: 5, integer: 'many', instance: true }" }],
"six": [{"id": "integer", "initial": "{ value: 6, instance: true }" }],
"sixes": [{"id": "integer", "initial": "{ value: 6, integer: 'many', instance: true }" }],
"seven": [{"id": "integer", "initial": "{ value: 7, instance: true }" }],
"sevens": [{"id": "integer", "initial": "{ value: 7, integer: 'many', instance: true }" }],
"eight": [{"id": "integer", "initial": "{ value: 8, instance: true }" }],
"eights": [{"id": "integer", "initial": "{ value: 8, integer: 'many', instance: true }" }],
"nine": [{"id": "integer", "initial": "{ value: 9, instance: true }" }],
"nines": [{"id": "integer", "initial": "{ value: 9, integer: 'many', instance: true }" }],
"ten": [{"id": "integer", "initial": "{ value: 10, instance: true }" }],
"tens": [{"id": "integer", "initial": "{ value: 10, integer: 'many', instance: true }" }],
"pi": [{"id": "integer", "initial": { value: 3.1415926, integer: 'many', instance: true } }],
},
patterns: [
{
pattern: [{ type: 'digit' }, { repeat: true }],
allow_partial_matches: false,
defs: [{id: "integer", uuid: '1', initial: "{ value: int(text), instance: true }" }]
},
{
pattern: [{ type: 'digit' }, { repeat: true }, '.', { type: 'digit' }, { repeat: true }],
allow_partial_matches: false,
defs: [{id: "number", uuid: '1', initial: "{ value: float(text), instance: true }" }]
},
{
pattern: ['.', { type: 'digit' }, { repeat: true }],
allow_partial_matches: false,
defs: [{id: "number", uuid: '1', initial: "{ value: float(text), instance: true }" }]
},
],
},
hierarchy: [
{ child: 'number', parent: 'queryable', maybe: true },
// { child: 'unknown', parent: 'number', maybe: true },
],
generators: [
{
where: where(),
match: ({context, isA}) => isA(context.marker, 'number', { extended: true }) && Number.isInteger(context.roundTo),
apply: ({context}) => `${context.value.toFixed(context.roundTo)}`,
},
{
where: where(),
match: ({context, isA}) => isA(context.marker, 'number', { extended: true }) && context.leadingZeros && context.value >= 0,
apply: ({context}) => {
value = `${context.value}`
if (value.length < context.length) {
value = "0".repeat(context.length-value.length)+value
}
return value
}
},
{
where: where(),
match: ({context}) => ['number', 'integer'].includes(context.marker) && context.number == 'many',
apply: ({context}) => `${context.value}'s`
},
{
where: where(),
match: ({context}) => false && ['number', 'integer'].includes(context.marker),
apply: ({context}) => `${context.value}`
},
],
semantics: [
],
};
const template = {
fragments: [
'10.2345', // used for unit tests
]
}
knowledgeModule( {
config,
includes: [gdefaults, sdefaults],
instance,
template,
module,
description: 'talking about numbers',
test: {
name: './numbers.test.json',
contents: numbers_tests,
checks: {
context: [
defaultContextCheck({ marker: 'number', exported: true, extra: ['instance'] }),
defaultContextCheck({ match: ({isA, context}) => isA(context.marker, 'integer'), exported: true, extra: ['instance'] }),
defaultContextCheck()
],
}
},
})