compromise
Version:
natural language processing in the browser
55 lines (49 loc) • 1.16 kB
JavaScript
;
//turn a infinitiveVerb, like "walk" into an adjective like "walkable"
const rules = [
[/[^aeiou]y$/, 'i'], //relay - reliable
[/([aeiou][n])$/, '$1n'], //win - winnable
];
//convert - 'convertible'
//http://grammarist.com/usage/able-ible/
//http://blog.oxforddictionaries.com/2012/10/ibles-and-ables/
const ible_suffixes = {
collect: true,
exhaust: true,
convert: true,
digest: true,
discern: true,
dismiss: true,
reverse: true,
access: true,
collapse: true,
express: true
};
const irregulars = {
eat: 'edible',
hear: 'audible',
see: 'visible',
defend: 'defensible',
write: 'legible',
move: 'movable',
divide: 'divisible',
perceive: 'perceptible'
};
//takes an infitive verb, and returns an adjective form
const toAdjective = function(str) {
if (irregulars[str]) {
return irregulars[str];
}
for(let i = 0; i < rules.length; i++) {
if (str.match(rules[i][0])) {
str = str.replace(rules[i][0], rules[i][1]);
}
}
let adj = str + 'able';
if (ible_suffixes[str]) {
adj = str + 'ible';
}
return adj;
};
module.exports = toAdjective;
// console.log(toAdjective('buy'));