summaryrefslogtreecommitdiff
path: root/bin/wiki/ImportarDesdeURL/node_modules/chrono-node/src/refiners/en/ENPrioritizeSpecificDateRefiner.js
diff options
context:
space:
mode:
Diffstat (limited to 'bin/wiki/ImportarDesdeURL/node_modules/chrono-node/src/refiners/en/ENPrioritizeSpecificDateRefiner.js')
-rw-r--r--bin/wiki/ImportarDesdeURL/node_modules/chrono-node/src/refiners/en/ENPrioritizeSpecificDateRefiner.js114
1 files changed, 114 insertions, 0 deletions
diff --git a/bin/wiki/ImportarDesdeURL/node_modules/chrono-node/src/refiners/en/ENPrioritizeSpecificDateRefiner.js b/bin/wiki/ImportarDesdeURL/node_modules/chrono-node/src/refiners/en/ENPrioritizeSpecificDateRefiner.js
new file mode 100644
index 00000000..ebd3d11e
--- /dev/null
+++ b/bin/wiki/ImportarDesdeURL/node_modules/chrono-node/src/refiners/en/ENPrioritizeSpecificDateRefiner.js
@@ -0,0 +1,114 @@
+/*
+
+*/
+var ParsedComponents = require('../../result').ParsedComponents;
+var Refiner = require('../refiner').Refiner;
+
+
+var PATTERN = new RegExp("^\\s*(at|after|before|on|,|-|\\(|\\))?\\s*$");
+
+function isMoreSpecific(prevResult, currResult) {
+ var moreSpecific = false;
+
+ if (prevResult.start.isCertain('year')) {
+ if (!currResult.start.isCertain('year')) {
+ moreSpecific = true;
+ } else {
+ if (prevResult.start.isCertain('month')) {
+ if (!currResult.start.isCertain('month')) {
+ moreSpecific = true;
+ } else {
+ if (prevResult.start.isCertain('day') && !currResult.start.isCertain('day')) {
+ moreSpecific = true;
+ }
+ }
+ }
+ }
+ }
+
+ return moreSpecific;
+}
+
+
+function isAbleToMerge(text, prevResult, currResult) {
+ var textBetween = text.substring(prevResult.index + prevResult.text.length, currResult.index);
+
+ // Only accepts merge if one of them comes from casual relative date
+ var includesRelativeResult = (prevResult.tags['ENRelativeDateFormatParser'] || currResult.tags['ENRelativeDateFormatParser']);
+
+ // We assume they refer to the same date if all date fields are implied
+ var referToSameDate = !prevResult.start.isCertain('day') && !prevResult.start.isCertain('month') && !prevResult.start.isCertain('year');
+
+ // If both years are certain, that determines if they refer to the same date
+ // but with one more specific than the other
+ if (prevResult.start.isCertain('year') && currResult.start.isCertain('year'))
+ referToSameDate = (prevResult.start.get('year') === currResult.start.get('year'));
+
+ // We now test with the next level (month) if they refer to the same date
+ if (prevResult.start.isCertain('month') && currResult.start.isCertain('month'))
+ referToSameDate = (prevResult.start.get('month') === currResult.start.get('month')) && referToSameDate;
+
+ return includesRelativeResult && textBetween.match(PATTERN) && referToSameDate;
+}
+
+function mergeResult(text, specificResult, nonSpecificResult){
+
+ var specificDate = specificResult.start;
+ var nonSpecificDate = nonSpecificResult.start;
+
+ var startIndex = Math.min(specificResult.index, nonSpecificResult.index);
+ var endIndex = Math.max(
+ specificResult.index + specificResult.text.length,
+ nonSpecificResult.index + nonSpecificResult.text.length);
+
+ specificResult.index = startIndex;
+ specificResult.text = text.substring(startIndex, endIndex);
+
+ for (var tag in nonSpecificResult.tags) {
+ specificResult.tags[tag] = true;
+ }
+ specificResult.tags['ENPrioritizeSpecificDateRefiner'] = true;
+ return specificResult;
+}
+
+exports.Refiner = function ENPrioritizeSpecificDateRefiner() {
+ Refiner.call(this);
+
+ this.refine = function(text, results, opt) {
+
+ if (results.length < 2) return results;
+
+ var mergedResult = [];
+ var currResult = null;
+ var prevResult = null;
+
+ for (var i = 1; i < results.length; i++) {
+
+ currResult = results[i];
+ prevResult = results[i-1];
+
+ if (isMoreSpecific(prevResult, currResult)
+ && isAbleToMerge(text, prevResult, currResult)) {
+
+ prevResult = mergeResult(text, prevResult, currResult);
+ currResult = null;
+ i += 1;
+
+ } else if (isMoreSpecific(currResult, prevResult)
+ && isAbleToMerge(text, prevResult, currResult)) {
+
+ prevResult = mergeResult(text, currResult, prevResult);
+ currResult = null;
+ i += 1;
+ }
+
+ mergedResult.push(prevResult);
+ }
+
+ if (currResult != null) {
+ mergedResult.push(currResult);
+ }
+
+ return mergedResult;
+ }
+}