public void timeRegexCountAndValueCheck(Double expectedCount, String... expectedValues) throws Exception { // Check the correct number of references is extracted assertEquals(expectedCount, Double.valueOf(JCasUtil.select(jCas, Temporal.class).size())); // Loop the matches and check their values for (int i = 0; i < expectedValues.length; i++) { String expectedVal = expectedValues[i]; // Get the value Temporal t1 = JCasUtil.selectByIndex(jCas, Temporal.class, i); assertNotNull(t1); // Check that the covered text is what we're expecting assertEquals(expectedVal, t1.getCoveredText()); // Check that the value and the covered text are the same assertEquals(t1.getValue(), t1.getCoveredText()); } }
@Test public void testMonths() throws Exception { jCas.setDocumentText( "It happened on the 15th October, Tuesday 11 Oct, and in September, but not on Wednesday 5 October 2016 or 3 Oct '16 or in January 2014. 15th of October was the last day it happened."); processJCas(); assertEquals(4, JCasUtil.select(jCas, Temporal.class).size()); Temporal ts1 = JCasUtil.selectByIndex(jCas, Temporal.class, 0); assertEquals("15th October", ts1.getCoveredText()); Temporal ts2 = JCasUtil.selectByIndex(jCas, Temporal.class, 1); assertEquals("Tuesday 11 Oct", ts2.getCoveredText()); Temporal ts3 = JCasUtil.selectByIndex(jCas, Temporal.class, 2); assertEquals("September", ts3.getCoveredText()); Temporal ts4 = JCasUtil.selectByIndex(jCas, Temporal.class, 3); assertEquals("15th of October", ts4.getCoveredText()); }
@Test public void testDays() throws Exception { jCas.setDocumentText( "Monday, Tuesday 11th, Wednesday 12th October, Thursday 13th October 2016, Fri 14 Oct, Sat 15 Oct 16, Thu 12th Oct"); processJCas(); assertEquals(5, JCasUtil.select(jCas, Temporal.class).size()); Temporal ts1 = JCasUtil.selectByIndex(jCas, Temporal.class, 0); assertEquals("Monday", ts1.getCoveredText()); Temporal ts2 = JCasUtil.selectByIndex(jCas, Temporal.class, 1); assertEquals("Tuesday 11th", ts2.getCoveredText()); Temporal ts3 = JCasUtil.selectByIndex(jCas, Temporal.class, 2); assertEquals("Wednesday 12th October", ts3.getCoveredText()); Temporal ts4 = JCasUtil.selectByIndex(jCas, Temporal.class, 3); assertEquals("Fri 14 Oct", ts4.getCoveredText()); Temporal ts5 = JCasUtil.selectByIndex(jCas, Temporal.class, 4); assertEquals("Thu 12th Oct", ts5.getCoveredText()); }
@Test public void testBadDayMonthYears() throws Exception { jCas.setDocumentText("She worked from 1st - 30th February 2015"); processJCas(); assertEquals( 1, JCasUtil.select(jCas, Temporal.class) .size()); // Month will be extracted, but the invalid date won't be Temporal t = JCasUtil.selectByIndex(jCas, Temporal.class, 0); assertEquals("February 2015", t.getCoveredText()); }
@Test public void test() throws Exception { populateJCas(jCas); processJCas(); assertEquals(1, JCasUtil.select(jCas, Person.class).size()); assertEquals(1, JCasUtil.select(jCas, Temporal.class).size()); assertEquals(1, JCasUtil.select(jCas, Location.class).size()); Temporal dt = JCasUtil.selectByIndex(jCas, Temporal.class, 0); assertEquals("December 1972", dt.getCoveredText()); Location l = JCasUtil.selectByIndex(jCas, Location.class, 0); assertEquals("Oxford", l.getCoveredText()); }
@Test public void testMonthsLowerCase() throws Exception { jCas.setDocumentText( "It happened on the 15th october, tuesday 11 oct, and in september, but not on wednesday 5 october 2016 or 3 Oct '16 or in january 2014. 15th of october was the last day it happened."); processJCas(); assertEquals(0, JCasUtil.select(jCas, Temporal.class).size()); jCas.reset(); jCas.setDocumentText( "It happened on the 15th october, tuesday 11 oct, and in september, but not on wednesday 5 october 2016 or 3 Oct '16 or in january 2014. 15th of october was the last day it happened."); processJCas(UnqualifiedDate.PARAM_ALLOW_LOWERCASE, true); assertEquals(4, JCasUtil.select(jCas, Temporal.class).size()); Temporal ts1 = JCasUtil.selectByIndex(jCas, Temporal.class, 0); assertEquals("15th october", ts1.getCoveredText()); Temporal ts2 = JCasUtil.selectByIndex(jCas, Temporal.class, 1); assertEquals("tuesday 11 oct", ts2.getCoveredText()); Temporal ts3 = JCasUtil.selectByIndex(jCas, Temporal.class, 2); assertEquals("september", ts3.getCoveredText()); Temporal ts4 = JCasUtil.selectByIndex(jCas, Temporal.class, 3); assertEquals("15th of october", ts4.getCoveredText()); }
@Test public void test() throws Exception { AnalysisEngine rneAE = AnalysisEngineFactory.createEngine(RemoveNestedEntities.class); populateJCas(jCas); rneAE.process(jCas); assertEquals(1, JCasUtil.select(jCas, Person.class).size()); assertEquals(1, JCasUtil.select(jCas, Temporal.class).size()); assertEquals(1, JCasUtil.select(jCas, Location.class).size()); Temporal dt = JCasUtil.selectByIndex(jCas, Temporal.class, 0); assertEquals("December 1972", dt.getCoveredText()); Location l = JCasUtil.selectByIndex(jCas, Location.class, 0); assertEquals("Oxford", l.getCoveredText()); }
@Test public void testCurrencyInDate() throws Exception { AnalysisEngine ae = AnalysisEngineFactory.createEngine(CleanTemporal.class); jCas.setDocumentText("It cost $4.10"); Temporal dt = new Temporal(jCas); dt.setBegin(8); dt.setEnd(13); dt.setValue(dt.getCoveredText()); dt.addToIndexes(); assertEquals(1, JCasUtil.select(jCas, Temporal.class).size()); ae.process(jCas); assertEquals(0, JCasUtil.select(jCas, Temporal.class).size()); }
@Test public void testToday() throws Exception { jCas.setDocumentText("Today is Wednesday"); setDocumentDate(); processJCas(); assertEquals(1, JCasUtil.select(jCas, Temporal.class).size()); Temporal t1 = JCasUtil.selectByIndex(jCas, Temporal.class, 0); assertEquals("Today", t1.getCoveredText()); assertEquals(relativeTo.atStartOfDay().toEpochSecond(ZoneOffset.UTC), t1.getTimestampStart()); assertEquals( relativeTo.plusDays(1).atStartOfDay().toEpochSecond(ZoneOffset.UTC), t1.getTimestampStop()); }
@Test public void testMilli() throws Exception { jCas.setDocumentText("47 people were seen at 1507725753567."); processJCas(EpochTime.PARAM_EARLIEST, "1500000000", EpochTime.PARAM_MILLIS, true); assertEquals(1, JCasUtil.select(jCas, Temporal.class).size()); Temporal t = JCasUtil.selectByIndex(jCas, Temporal.class, 0); assertEquals("1507725753567", t.getCoveredText()); assertEquals(1507725753, t.getTimestampStart()); assertEquals(1507725754, t.getTimestampStop()); }
@Test public void test() throws Exception { jCas.setDocumentText("47 people were seen at 1507725753."); processJCas(EpochTime.PARAM_EARLIEST, "1500000000"); assertEquals(1, JCasUtil.select(jCas, Temporal.class).size()); Temporal t = JCasUtil.selectByIndex(jCas, Temporal.class, 0); assertEquals("1507725753", t.getCoveredText()); assertEquals(1507725753, t.getTimestampStart()); assertEquals(1507725754, t.getTimestampStop()); } }
@Test public void testYear() throws Exception { jCas.setDocumentText( "The year was 1997, which is the year after 1996 (a leap year). ABC1997, 1997ABC, and ABC1997ABC shouldn't be found!"); processJCas(); assertEquals(2, JCasUtil.select(jCas, Temporal.class).size()); Temporal t1 = JCasUtil.selectByIndex(jCas, Temporal.class, 0); assertEquals("1997", t1.getCoveredText()); assertEquals(852076800L, t1.getTimestampStart()); assertEquals(883612800L, t1.getTimestampStop()); Temporal t2 = JCasUtil.selectByIndex(jCas, Temporal.class, 1); assertEquals("1996", t2.getCoveredText()); assertEquals(820454400L, t2.getTimestampStart()); assertEquals(852076800L, t2.getTimestampStop()); }
@Test public void testYears() throws Exception { jCas.setDocumentText( "Woolworths was a retail chain from 1909-2008. We had very hot summers in 2009-11. 1969 was wet, as was the year '16."); processJCas(); assertEquals(2, JCasUtil.select(jCas, Temporal.class).size()); Temporal ts1 = JCasUtil.selectByIndex(jCas, Temporal.class, 0); assertEquals("1909-2008", ts1.getCoveredText()); assertEquals(-1924992000L, ts1.getTimestampStart()); assertEquals(1230768000L, ts1.getTimestampStop()); Temporal ts2 = JCasUtil.selectByIndex(jCas, Temporal.class, 1); assertEquals("2009-11", ts2.getCoveredText()); assertEquals(1230768000L, ts2.getTimestampStart()); assertEquals(1325376000L, ts2.getTimestampStop()); }
@Test public void testMonthYears() throws Exception { jCas.setDocumentText( "From January to November 2015, not a lot happened. From December 15-January '16, Christmas happened."); processJCas(); assertEquals(2, JCasUtil.select(jCas, Temporal.class).size()); Temporal ts1 = JCasUtil.selectByIndex(jCas, Temporal.class, 0); assertEquals("January to November 2015", ts1.getCoveredText()); assertEquals(1420070400L, ts1.getTimestampStart()); assertEquals(1448928000L, ts1.getTimestampStop()); Temporal ts2 = JCasUtil.selectByIndex(jCas, Temporal.class, 1); assertEquals("December 15-January '16", ts2.getCoveredText()); assertEquals(1448928000L, ts2.getTimestampStart()); assertEquals(1454284800L, ts2.getTimestampStop()); }
@Test public void testTimeOnDate() throws Exception { jCas.setDocumentText("Be ready to go at 1100hrs on 5 October 2016"); processJCas(); assertEquals(1, JCasUtil.select(jCas, Temporal.class).size()); Temporal ts1 = JCasUtil.selectByIndex(jCas, Temporal.class, 0); assertEquals("1100hrs on 5 October 2016", ts1.getCoveredText()); assertEquals(1475665200L, ts1.getTimestampStart()); assertEquals(1475665260L, ts1.getTimestampStop()); jCas.reset(); jCas.setDocumentText("Be ready to go at 11:00:00hrs on 5 Oct 2016"); processJCas(); assertEquals(1, JCasUtil.select(jCas, Temporal.class).size()); Temporal ts2 = JCasUtil.selectByIndex(jCas, Temporal.class, 0); assertEquals("11:00:00hrs on 5 Oct 2016", ts2.getCoveredText()); assertEquals(1475665200L, ts2.getTimestampStart()); assertEquals(1475665201L, ts2.getTimestampStop()); }
@Test public void testNextLastYearPeriod() throws Exception { jCas.setDocumentText( "In the next year, something will happen which didn't happen within the last year."); setDocumentDate(); processJCas(); assertEquals(2, JCasUtil.select(jCas, Temporal.class).size()); Temporal t1 = JCasUtil.selectByIndex(jCas, Temporal.class, 0); assertEquals("In the next year", t1.getCoveredText()); assertEquals(relativeTo.atStartOfDay().toEpochSecond(ZoneOffset.UTC), t1.getTimestampStart()); assertEquals( relativeTo.plusYears(1).plusDays(1).atStartOfDay().toEpochSecond(ZoneOffset.UTC), t1.getTimestampStop()); Temporal t2 = JCasUtil.selectByIndex(jCas, Temporal.class, 1); assertEquals("within the last year", t2.getCoveredText()); assertEquals( relativeTo.minusYears(1).atStartOfDay().toEpochSecond(ZoneOffset.UTC), t2.getTimestampStart()); assertEquals( relativeTo.plusDays(1).atStartOfDay().toEpochSecond(ZoneOffset.UTC), t2.getTimestampStop()); }
@Test public void testAmericanDates() throws Exception { jCas.setDocumentText("Is it 04/07/2017, or 07/04/2017? It could even be 23/12/2017!"); processJCas(Date.PARAM_AMERICAN_FORMAT, true); assertEquals(3, JCasUtil.select(jCas, Temporal.class).size()); Temporal ts1 = JCasUtil.selectByIndex(jCas, Temporal.class, 0); assertEquals("04/07/2017", ts1.getCoveredText()); // 7th April in American dates assertEquals(1491523200L, ts1.getTimestampStart()); assertEquals(1491609600L, ts1.getTimestampStop()); Temporal ts2 = JCasUtil.selectByIndex(jCas, Temporal.class, 1); assertEquals("07/04/2017", ts2.getCoveredText()); // 4th July in American dates assertEquals(1499126400L, ts2.getTimestampStart()); assertEquals(1499212800L, ts2.getTimestampStop()); Temporal ts3 = JCasUtil.selectByIndex(jCas, Temporal.class, 2); assertEquals("23/12/2017", ts3.getCoveredText()); // Must be 23rd December assertEquals(1513987200L, ts3.getTimestampStart()); assertEquals(1514073600L, ts3.getTimestampStop()); }
@Test public void test() throws Exception { jCas.setDocumentText("This test was written at 251137Z FEB 13"); processJCas(); assertEquals(1, JCasUtil.select(jCas, Temporal.class).size()); Temporal dt = JCasUtil.selectByIndex(jCas, Temporal.class, 0); assertNotNull(dt); assertEquals("251137Z FEB 13", dt.getCoveredText()); assertEquals("251137Z FEB 13", dt.getValue()); assertEquals("EXACT", dt.getPrecision()); assertEquals("SINGLE", dt.getScope()); assertEquals("DATETIME", dt.getTemporalType()); LocalDateTime date = LocalDateTime.of(2013, Month.FEBRUARY, 25, 11, 37); assertEquals(date.toInstant(ZoneOffset.UTC).getEpochSecond(), dt.getTimestampStart()); assertEquals( date.plusMinutes(1).toInstant(ZoneOffset.UTC).getEpochSecond(), dt.getTimestampStop()); }
@Test public void test2() throws Exception { jCas.setDocumentText("Report Title: An example report\nDTG: 04 1558D Sep 10"); processJCas(); Temporal dt = JCasUtil.selectByIndex(jCas, Temporal.class, 0); assertNotNull(dt); assertEquals("04 1558D Sep 10", dt.getCoveredText()); assertEquals("04 1558D Sep 10", dt.getValue()); assertEquals("EXACT", dt.getPrecision()); assertEquals("SINGLE", dt.getScope()); assertEquals("DATETIME", dt.getTemporalType()); LocalDateTime date = LocalDateTime.of(2010, Month.SEPTEMBER, 4, 11, 58); assertEquals(date.toInstant(ZoneOffset.UTC).getEpochSecond(), dt.getTimestampStart()); assertEquals( date.plusMinutes(1).toInstant(ZoneOffset.UTC).getEpochSecond(), dt.getTimestampStop()); }
@Test public void test3() throws Exception { jCas.setDocumentText("Report Title: An example report\nDTG: 04 1558D*SEP 10"); processJCas(); Temporal dt = JCasUtil.selectByIndex(jCas, Temporal.class, 0); assertNotNull(dt); assertEquals("04 1558D*SEP 10", dt.getCoveredText()); assertEquals("04 1558D*SEP 10", dt.getValue()); assertEquals("EXACT", dt.getPrecision()); assertEquals("SINGLE", dt.getScope()); assertEquals("DATETIME", dt.getTemporalType()); LocalDateTime date = LocalDateTime.of(2010, Month.SEPTEMBER, 4, 11, 28); assertEquals(date.toInstant(ZoneOffset.UTC).getEpochSecond(), dt.getTimestampStart()); assertEquals( date.plusMinutes(1).toInstant(ZoneOffset.UTC).getEpochSecond(), dt.getTimestampStop()); }