compromise
Version:
natural language processing in the browser
63 lines (60 loc) • 1.04 kB
JavaScript
;
//turn 'walk' into 'walker'
const irregulars = {
'tie': 'tier',
'dream': 'dreamer',
'sail': 'sailer',
'run': 'runner',
'rub': 'rubber',
'begin': 'beginner',
'win': 'winner',
'claim': 'claimant',
'deal': 'dealer',
'spin': 'spinner'
};
const dont = {
'aid': 1,
'fail': 1,
'appear': 1,
'happen': 1,
'seem': 1,
'try': 1,
'say': 1,
'marry': 1,
'be': 1,
'forbid': 1,
'understand': 1,
'bet': 1
};
const rules = [{
'reg': /e$/i,
'repl': 'er'
}, {
'reg': /([aeiou])([mlgp])$/i,
'repl': '$1$2$2er'
}, {
'reg': /([rlf])y$/i,
'repl': '$1ier'
}, {
'reg': /^(.?.[aeiou])t$/i,
'repl': '$1tter'
}];
const toActor = function(inf) {
//check blacklist
if (dont[inf]) {
return null
}
//check irregulars
if (irregulars[inf]) {
return irregulars[inf]
}
//try rules
for (let i = 0; i < rules.length; i++) {
if (inf.match(rules[i].reg)) {
return inf.replace(rules[i].reg, rules[i].repl)
}
}
//yup,
return inf + 'er'
}
module.exports = toActor