UNPKG

tpmkms

Version:

Reusable libraries for Entodicton, a natural language to json converter

147 lines (137 loc) 5.22 kB
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() ], } }, })