UNPKG

node-nlp

Version:

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

89 lines (63 loc) 2.61 kB
/* */ var moment = require('moment'); var Parser = require('../parser').Parser; var ParsedResult = require('../../result').ParsedResult; var util = require('../../utils/JP'); var PATTERN = /(?:(同|((昭和|平成)?([0-90-9]{2,4})))年\s*)?([0-90-9]{1,2})月\s*([0-90-9]{1,2})日/i; var YEAR_GROUP = 2; var ERA_GROUP = 3; var YEAR_NUMBER_GROUP = 4; var MONTH_GROUP = 5; var DAY_GROUP = 6; exports.Parser = function JPStandardParser(){ 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, }); var month = match[MONTH_GROUP]; month = util.toHankaku(month); month = parseInt(month); var day = match[DAY_GROUP]; day = util.toHankaku(day); day = parseInt(day); startMoment.set('date', day); startMoment.set('month', month - 1); result.start.assign('day', startMoment.date()); result.start.assign('month', startMoment.month() + 1); if (!match[YEAR_GROUP]) { //Find the most appropriated year startMoment.year(moment(ref).year()); var nextYear = startMoment.clone().add(1, 'y'); var lastYear = startMoment.clone().add(-1, 'y'); if( Math.abs(nextYear.diff(moment(ref))) < Math.abs(startMoment.diff(moment(ref))) ){ startMoment = nextYear; } else if( Math.abs(lastYear.diff(moment(ref))) < Math.abs(startMoment.diff(moment(ref))) ){ startMoment = lastYear; } result.start.assign('day', startMoment.date()); result.start.assign('month', startMoment.month() + 1); result.start.imply('year', startMoment.year()); } else if (match[YEAR_GROUP].match('同年')) { result.start.assign('year', startMoment.year()); } else { var year = match[YEAR_NUMBER_GROUP]; year = util.toHankaku(year); year = parseInt(year); if (match[ERA_GROUP] == '平成') { year += 1988; } else if (match[ERA_GROUP] == '昭和') { year += 1925; } result.start.assign('year', year); } result.tags['JPStandardParser'] = true; return result; }; }