node-nlp
Version:
Library for NLU (Natural Language Understanding) done in Node.js
273 lines (227 loc) • 7.53 kB
JavaScript
var parser = require('./parsers/parser');
var refiner = require('./refiners/refiner');
exports.mergeOptions = function(options) {
var addedTypes = {};
var mergedOption = {
parsers: [],
refiners: []
};
options.forEach(function (option) {
if (option.call) {
option = option.call();
}
if (option.parsers) {
option.parsers.forEach(function (p) {
if (!addedTypes[p.constructor]) {
mergedOption.parsers.push(p);
addedTypes[p.constructor] = true;
}
});
}
if (option.refiners) {
option.refiners.forEach(function (r) {
if (!addedTypes[r.constructor]) {
mergedOption.refiners.push(r);
addedTypes[r.constructor] = true;
}
});
}
});
return mergedOption;
};
exports.commonPostProcessing = function() {
return {
refiners: [
// These should be after all other refiners
new refiner.ExtractTimezoneOffsetRefiner(),
new refiner.ExtractTimezoneAbbrRefiner(),
new refiner.UnlikelyFormatFilter()
]
}
};
// -------------------------------------------------------------
exports.strictOption = function () {
var strictConfig = {
strict: true
}
return exports.mergeOptions([
exports.en(strictConfig),
exports.de(strictConfig),
exports.es(strictConfig),
exports.fr(strictConfig),
exports.ja(strictConfig),
exports.zh,
exports.commonPostProcessing
]);
};
exports.casualOption = function () {
return exports.mergeOptions([
exports.en.casual,
// Some German abbriviate overlap with common English
exports.de({ strict: true }),
exports.es.casual,
exports.fr.casual,
exports.ja.casual,
exports.zh,
exports.commonPostProcessing
]);
};
// -------------------------------------------------------------
exports.de = function(config) {
return {
parsers: [
new parser.DEDeadlineFormatParser(config),
new parser.DEMonthNameLittleEndianParser(config),
new parser.DEMonthNameParser(config),
new parser.DESlashDateFormatParser(config),
new parser.DETimeAgoFormatParser(config),
new parser.DETimeExpressionParser(config)
],
refiners: [
new refiner.OverlapRemovalRefiner(),
new refiner.ForwardDateRefiner(),
new refiner.DEMergeDateTimeRefiner(),
new refiner.DEMergeDateRangeRefiner()
]
}
};
exports.de.casual = function() {
var option = exports.de({
strict: false
});
option.parsers.unshift(new parser.DECasualDateParser());
option.parsers.unshift(new parser.DEWeekdayParser());
return option;
};
// -------------------------------------------------------------
exports.en = function(config) {
return {
parsers: [
new parser.ENISOFormatParser(config),
new parser.ENDeadlineFormatParser(config),
new parser.ENMonthNameLittleEndianParser(config),
new parser.ENMonthNameMiddleEndianParser(config),
new parser.ENMonthNameParser(config),
new parser.ENSlashDateFormatParser(config),
new parser.ENSlashDateFormatStartWithYearParser(config),
new parser.ENSlashMonthFormatParser(config),
new parser.ENTimeAgoFormatParser(config),
new parser.ENTimeFromNowFormatParser(config),
new parser.ENTimeExpressionParser(config)
],
refiners: [
new refiner.OverlapRemovalRefiner(),
new refiner.ForwardDateRefiner(),
// English
new refiner.ENMergeDateTimeRefiner(),
new refiner.ENMergeDateRangeRefiner(),
new refiner.ENPrioritizeSpecificDateRefiner()
]
}
};
exports.en.casual = function(config) {
config = config || {};
config.strict = false;
var option = exports.en(config);
// EN
option.parsers.unshift(new parser.ENCasualDateParser());
option.parsers.unshift(new parser.ENCasualTimeParser());
option.parsers.unshift(new parser.ENWeekdayParser());
option.parsers.unshift(new parser.ENRelativeDateFormatParser());
return option;
};
exports.en_GB = function(config) {
config = config || {};
config.littleEndian = true;
return exports.en(config);
}
exports.en_GB.casual = function(config) {
config = config || {};
config.littleEndian = true;
return exports.en.casual(config);
}
// -------------------------------------------------------------
exports.ja = function() {
return {
parsers: [
new parser.JPStandardParser()
],
refiners: [
new refiner.OverlapRemovalRefiner(),
new refiner.ForwardDateRefiner(),
new refiner.JPMergeDateRangeRefiner()
]
}
};
exports.ja.casual = function() {
var option = exports.ja();
option.parsers.unshift(new parser.JPCasualDateParser());
return option;
};
// -------------------------------------------------------------
exports.es = function(config) {
return {
parsers: [
new parser.ESTimeAgoFormatParser(config),
new parser.ESDeadlineFormatParser(config),
new parser.ESTimeExpressionParser(config),
new parser.ESMonthNameLittleEndianParser(config),
new parser.ESSlashDateFormatParser(config)
],
refiners: [
new refiner.OverlapRemovalRefiner(),
new refiner.ForwardDateRefiner()
]
}
};
exports.es.casual = function() {
var option = exports.es({
strict: false
});
option.parsers.unshift(new parser.ESCasualDateParser());
option.parsers.unshift(new parser.ESWeekdayParser());
return option;
};
// -------------------------------------------------------------
exports.fr = function(config) {
return {
parsers: [
new parser.FRDeadlineFormatParser(config),
new parser.FRMonthNameLittleEndianParser(config),
new parser.FRSlashDateFormatParser(config),
new parser.FRTimeAgoFormatParser(config),
new parser.FRTimeExpressionParser(config)
],
refiners: [
new refiner.OverlapRemovalRefiner(),
new refiner.ForwardDateRefiner(),
new refiner.FRMergeDateRangeRefiner(),
new refiner.FRMergeDateTimeRefiner()
]
}
};
exports.fr.casual = function() {
var option = exports.fr({
strict: false
});
option.parsers.unshift(new parser.FRCasualDateParser());
option.parsers.unshift(new parser.FRWeekdayParser());
option.parsers.unshift(new parser.FRRelativeDateFormatParser());
return option;
};
// -------------------------------------------------------------
exports.zh = function() {
return {
parsers: [
new parser.ZHHantDateParser(),
new parser.ZHHantWeekdayParser(),
new parser.ZHHantTimeExpressionParser(),
new parser.ZHHantCasualDateParser(),
new parser.ZHHantDeadlineFormatParser()
],
refiners: [
new refiner.OverlapRemovalRefiner(),
new refiner.ForwardDateRefiner()
]
}
};