node-nlp
Version:
Library for NLU (Natural Language Understanding) done in Node.js
250 lines (173 loc) • 8.75 kB
JavaScript
// QUnit Setup
//-------------------------------------
var test = function() {
QUnit.test.apply(QUnit.test, arguments);
}
var ok = function() {
QUnit.assert.ok.apply(QUnit.assert, arguments);
}
//-------------------------------------
test("Test - Date + Time Expression", function() {
var text = "Something happen on 2014-04-18 13:00 - 16:00 as";
var results = chrono.parse(text, new Date(2012,7,10));
ok(results.length == 1, JSON.stringify( results ) )
ok(results[0].text == '2014-04-18 13:00 - 16:00')
});
test("Test - Compare with native js", function() {
var text = 'Sat Nov 05 1994 22:45:30 GMT+0900 (JST)';
var result = chrono.parse(text)[0];
var expect = new Date(text);
ok(result.text == text, result.text);
ok(Math.abs(expect.getTime() - result.start.date().getTime()) <= 1000)
var text = 'Fri, 31 Mar 2000 07:00:00 UTC';
var result = chrono.parse(text)[0];
var expect = new Date(text);
ok(result.text == text, result.text);
ok(Math.abs(expect.getTime() - result.start.date().getTime()) <= 1000)
var text = '2014-12-14T18:22:14.759Z';
var result = chrono.parse(text)[0];
var expect = new Date(text);
ok(result.text == text, result.text);
ok(Math.abs(expect.getTime() - result.start.date().getTime()) == 0)
});
test('Test - Random text', function() {
var text = "Adam <Adam@supercalendar.com> написал(а):\nThe date is 02.07.2013";
var result = chrono.parse(text, new Date(2013,5,22,3,33))[0];
ok(result.text == '02.07.2013', result.text)
var text = "174 November 1,2001- March 31,2002";
var results = chrono.parse(text);
ok(results.length == 1, JSON.stringify(results) )
ok(results[0].text == 'November 1,2001- March 31,2002', JSON.stringify(results) )
var text = "...Thursday, December 15, 2011 Best Available Rate "
var results = chrono.parse(text);
ok(results.length == 1, JSON.stringify(results) )
ok(results[0].start.get('year') == 2011, JSON.stringify(results) )
var text = "SUN 15SEP 11:05 AM - 12:50 PM"
var results = chrono.parse(text);
ok(results.length == 1, JSON.stringify(results) )
ok(results[0].text.length == 29, JSON.stringify(results) )
var text = "SUN 15SEP 11:05 AM – 12:50 PM"
var results = chrono.parse(text);
ok(results.length == 1, JSON.stringify(results) )
ok(results[0].end != null, JSON.stringify(results) )
var text = "FRI 13SEP 1:29 PM - FRI 13SEP 3:29 PM"
var results = chrono.parse(text);
ok(results.length == 1, JSON.stringify(results) )
ok(results[0].start.get('hour') == 13, JSON.stringify(results) )
ok(results[0].end.get('hour') == 15, JSON.stringify(results) )
var text = "9:00 AM to 5:00 PM, Tuesday, 20 May 2013"
var results = chrono.parse(text);
ok(results.length == 1, JSON.stringify(results) )
ok(results[0].start.get('hour') == 9, JSON.stringify(results) )
ok(results[0].end.get('hour') == 17, JSON.stringify(results) )
ok(results[0].end.get('meridiem') == 1, JSON.stringify(results))
var resultDate = results[0].start.date();
var expectDate = new Date(2013, 4, 20, 9, 0);
ok(Math.abs(expectDate.getTime() - resultDate.getTime()) < 1000, resultDate +'/' +expectDate)
var resultDate = results[0].end.date();
var expectDate = new Date(2013, 4, 20, 17, 0);
ok(Math.abs(expectDate.getTime() - resultDate.getTime()) < 1000, resultDate +'/' +expectDate)
var text = "2014-07-07T04:00:00Z"
var results = chrono.parse(text);
ok(results.length == 1, JSON.stringify(results) )
ok(results[0].text == '2014-07-07T04:00:00Z', JSON.stringify(results))
var text = "1.5.3 - 2015-09-24";
var results = chrono.parse(text);
ok(results.length == 1, JSON.stringify(results) )
ok(results[0].text == '2015-09-24', JSON.stringify(results))
var text = "1.5.30 - 2015-09-24";
var results = chrono.parse(text);
ok(results.length == 1, JSON.stringify(results) )
ok(results[0].text == '2015-09-24', JSON.stringify(results))
var text = "1.50.30 - 2015-09-24";
var results = chrono.parse(text);
ok(results.length == 1, JSON.stringify(results) )
ok(results[0].text == '2015-09-24', JSON.stringify(results))
var text = "Monday afternoon to last night";
var results = chrono.parse(text, new Date(2017, 7-1, 7));
ok(results.length == 1, JSON.stringify(results));
ok(results[0].text == 'Monday afternoon to last night', JSON.stringify(results));
ok(results[0].start.get('day') == 3, JSON.stringify(results));
ok(results[0].start.get('month') == 7, JSON.stringify(results));
var text = "tonight to Thursday";
var results = chrono.parse(text, new Date(2017, 7-1, 7));
ok(results.length == 1, JSON.stringify(results));
ok(results[0].text == 'tonight to Thursday', JSON.stringify(results));
ok(results[0].end.get('day') == 13, JSON.stringify(results));
ok(results[0].end.get('month') == 7, JSON.stringify(results));
var text = 'August 12, 2015 to 13 September';
var results = chrono.parse(text, new Date(2017, 7-1, 7));
ok(results.length == 1, JSON.stringify(results));
ok(results[0].text == 'August 12, 2015 to 13 September', JSON.stringify(results));
ok(results[0].end.get('day') == 13, JSON.stringify(results));
ok(results[0].end.get('month') == 9, JSON.stringify(results));
ok(results[0].end.get('year') == 2015, JSON.stringify(results));
var text = 'from 10am to now';
var results = chrono.parse(text, new Date(2017, 7-1, 7, 15));
ok(results.length == 1, JSON.stringify(results));
ok(results[0].text == 'from 10am to now', JSON.stringify(results));
ok(results[0].end.get('hour') == 15, JSON.stringify(results));
ok(results[0].end.get('minute') == 0, JSON.stringify(results));
})
test("Test - Random non-date patterns", function() {
var text = ' 3'
var results = chrono.parse(text);
ok(results.length == 0, JSON.stringify(results) )
var text = ' 1'
var results = chrono.parse(text);
ok(results.length == 0, JSON.stringify(results) )
var text = ' 11 '
var results = chrono.parse(text);
ok(results.length == 0, JSON.stringify(results) )
var text = ' 0.5 '
var results = chrono.parse(text);
ok(results.length == 0, JSON.stringify(results) )
var text = ' 35.49 '
var results = chrono.parse(text);
ok(results.length == 0, JSON.stringify(results) )
var text = '12.53%'
var results = chrono.parse(text);
ok(results.length == 0, JSON.stringify(results) )
var text = "6358fe2310> *5.0* / 5 Outstanding";
var results = chrono.parse(text);
ok(results.length == 0, JSON.stringify(results) )
var text = "6358fe2310> *1.5* / 5 Outstanding";
var results = chrono.parse(text);
ok(results.length == 0, JSON.stringify(results) )
var text = "Total: $1,194.09 [image: View Reservation";
var results = chrono.parse(text);
ok(results.length == 0, JSON.stringify(results) )
var text = "Version: 1.1.3";
var results = chrono.parse(text);
ok(results.length == 0, JSON.stringify(results) )
var text = "Version: 1.1.30";
var results = chrono.parse(text);
ok(results.length == 0, JSON.stringify(results) )
var text = "Version: 1.10.30";
var results = chrono.parse(text);
ok(results.length == 0, JSON.stringify(results) )
});
test("Test - Wikipedia Texts", function() {
var text = 'October 7, 2011, of which details were not revealed out of respect to Jobs\'s family.[239] Apple announced on the same day that they had no plans for a public service, but were encouraging "well-wishers" to send their remembrance messages to an email address created to receive such messages.[240] Sunday, October 16, 2011';
var results = chrono.parse(text, new Date(2012,7,10));
ok(results.length == 2, text )
ok(results.length == 2, JSON.stringify( results ) )
var result = results[0];
if(result){
ok( result.start.get('year') == 2011 &&
result.start.get('month') == 10 &&
result.start.get('day') == 7,
JSON.stringify(result.start));
ok(result.index == 0, 'Index : '+result.index)
ok(result.text == 'October 7, 2011', 'Text :'+ result.text )
}
var result = results[1];
if(result){
ok( result.start.get('year') == 2011 &&
result.start.get('month') == 10 &&
result.start.get('day') == 16,
JSON.stringify(result.start));
ok(result.index == 297, 'Index : '+result.index)
ok(result.text == 'Sunday, October 16, 2011', 'Text :'+ result.text )
}
});