UNPKG

node-nlp

Version:

Library for NLU (Natural Language Understanding) done in Node.js

73 lines (58 loc) 1.89 kB
/* */ var moment = require('moment'); var Parser = require('../parser').Parser; var ParsedResult = require('../../result').ParsedResult; var util = require('../../utils/ZH-Hant.js'); var PATTERN = new RegExp( '(\\d{2,4}|[' + Object.keys(util.NUMBER).join('') + ']{2,4})?' + '(?:\\s*)' + '(?:年)?' + '(?:[\\s|,|,]*)' + '(\\d{1,2}|[' + Object.keys(util.NUMBER).join('') + ']{1,2})' + '(?:\\s*)' + '(?:月)' + '(?:\\s*)' + '(\\d{1,2}|[' + Object.keys(util.NUMBER).join('') + ']{1,2})?' + '(?:\\s*)' + '(?:日|號)?' ); var YEAR_GROUP = 1; var MONTH_GROUP = 2; var DAY_GROUP = 3; exports.Parser = function ZHHantDateParser() { Parser.apply(this, arguments); this.pattern = function() { return PATTERN; }; this.extract = function(text, ref, match, opt) { var startMoment = moment(ref); var result = new ParsedResult({ text: match[0], index: match.index, ref: ref, }); //Month var month = parseInt(match[MONTH_GROUP]); if (isNaN(month)) month = util.zhStringToNumber(match[MONTH_GROUP]); result.start.assign('month', month); //Day if (match[DAY_GROUP]) { var day = parseInt(match[DAY_GROUP]); if (isNaN(day)) day = util.zhStringToNumber(match[DAY_GROUP]); result.start.assign('day', day); } else { result.start.imply('day', startMoment.date()); } //Year if (match[YEAR_GROUP]) { var year = parseInt(match[YEAR_GROUP]); if (isNaN(year)) year = util.zhStringToYear(match[YEAR_GROUP]); result.start.assign('year', year); } else { result.start.imply('year', startMoment.year()); } result.tags.ZHHantDateParser = true; return result; }; };