private void correctTimestamps(final Map<String, Object> map, final Temporal e) { // Remove whatever is there... map.remove("timestampStart"); map.remove("timestampStop"); // If it appears at all valid, then convert from seconds to millis if (e.getTimestampStart() != 0 && e.getTimestampStop() != 0) { map.put("timestampStart", e.getTimestampStart() * 1000); map.put("timestampStop", e.getTimestampStop() * 1000); } }
@Override public void validate(Temporal t) { super.validate(t); assertEquals(millisStart, t.getTimestampStart()); assertEquals(millisStop, t.getTimestampStop()); } }
@Test public void testNextLastMonth() throws Exception { jCas.setDocumentText("Last month was September, and next month is November"); setDocumentDate(); processJCas(); assertEquals(2, JCasUtil.select(jCas, Temporal.class).size()); Temporal t1 = JCasUtil.selectByIndex(jCas, Temporal.class, 0); assertEquals("Last month", t1.getCoveredText()); assertEquals( LocalDate.of(2016, 9, 1).atStartOfDay().toEpochSecond(ZoneOffset.UTC), t1.getTimestampStart()); assertEquals( LocalDate.of(2016, 10, 1).atStartOfDay().toEpochSecond(ZoneOffset.UTC), t1.getTimestampStop()); Temporal t2 = JCasUtil.selectByIndex(jCas, Temporal.class, 1); assertEquals("next month", t2.getCoveredText()); assertEquals( LocalDate.of(2016, 11, 1).atStartOfDay().toEpochSecond(ZoneOffset.UTC), t2.getTimestampStart()); assertEquals( LocalDate.of(2016, 12, 1).atStartOfDay().toEpochSecond(ZoneOffset.UTC), t2.getTimestampStop()); }
@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 testMetadataCase() throws Exception { jCas.setDocumentText("This week is the end of term."); Metadata md = new Metadata(jCas); md.setKey("date"); md.setValue("15 MAY 17"); md.addToIndexes(); processJCas(RelativeDate.PARAM_DATE_FORMAT, "d MMM yy"); assertEquals(1, JCasUtil.select(jCas, Temporal.class).size()); Temporal t1 = JCasUtil.selectByIndex(jCas, Temporal.class, 0); assertEquals("This week", t1.getCoveredText()); assertEquals( LocalDate.of(2017, 5, 15).atStartOfDay().toEpochSecond(ZoneOffset.UTC), t1.getTimestampStart()); assertEquals( LocalDate.of(2017, 5, 22).atStartOfDay().toEpochSecond(ZoneOffset.UTC), t1.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 testNextLastWeekPeriod() throws Exception { jCas.setDocumentText( "In the next week we expect to see results from what happened within the last week."); setDocumentDate(); processJCas(); assertEquals(2, JCasUtil.select(jCas, Temporal.class).size()); Temporal t1 = JCasUtil.selectByIndex(jCas, Temporal.class, 0); assertEquals("In the next week", t1.getCoveredText()); assertEquals(relativeTo.atStartOfDay().toEpochSecond(ZoneOffset.UTC), t1.getTimestampStart()); assertEquals( relativeTo.plusDays(8).atStartOfDay().toEpochSecond(ZoneOffset.UTC), t1.getTimestampStop()); Temporal t2 = JCasUtil.selectByIndex(jCas, Temporal.class, 1); assertEquals("within the last week", t2.getCoveredText()); assertEquals( relativeTo.minusDays(7).atStartOfDay().toEpochSecond(ZoneOffset.UTC), t2.getTimestampStart()); assertEquals( relativeTo.plusDays(1).atStartOfDay().toEpochSecond(ZoneOffset.UTC), t2.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 testNextLastMonthPeriod() throws Exception { jCas.setDocumentText( "In the last month something happened, but it's not expected to happen again within the next month"); setDocumentDate(); processJCas(); assertEquals(2, JCasUtil.select(jCas, Temporal.class).size()); Temporal t1 = JCasUtil.selectByIndex(jCas, Temporal.class, 0); assertEquals("In the last month", t1.getCoveredText()); assertEquals( relativeTo.minusMonths(1).atStartOfDay().toEpochSecond(ZoneOffset.UTC), t1.getTimestampStart()); assertEquals( relativeTo.plusDays(1).atStartOfDay().toEpochSecond(ZoneOffset.UTC), t1.getTimestampStop()); Temporal t2 = JCasUtil.selectByIndex(jCas, Temporal.class, 1); assertEquals("within the next month", t2.getCoveredText()); assertEquals(relativeTo.atStartOfDay().toEpochSecond(ZoneOffset.UTC), t2.getTimestampStart()); assertEquals( relativeTo.plusMonths(1).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 testYesterday() throws Exception { jCas.setDocumentText("Yesterday was Tuesday, and the day before yesterday was Monday"); setDocumentDate(); processJCas(); assertEquals(2, JCasUtil.select(jCas, Temporal.class).size()); Temporal t1 = JCasUtil.selectByIndex(jCas, Temporal.class, 0); assertEquals("Yesterday", t1.getCoveredText()); assertEquals( relativeTo.minusDays(1).atStartOfDay().toEpochSecond(ZoneOffset.UTC), t1.getTimestampStart()); assertEquals(relativeTo.atStartOfDay().toEpochSecond(ZoneOffset.UTC), t1.getTimestampStop()); Temporal t2 = JCasUtil.selectByIndex(jCas, Temporal.class, 1); assertEquals("day before yesterday", t2.getCoveredText()); assertEquals( relativeTo.minusDays(2).atStartOfDay().toEpochSecond(ZoneOffset.UTC), t2.getTimestampStart()); assertEquals( relativeTo.minusDays(1).atStartOfDay().toEpochSecond(ZoneOffset.UTC), t2.getTimestampStop()); }
@Test public void testDates() throws Exception { jCas.setDocumentText( "Today is Tuesday 4th October 2016, or October 4 2016, or 2016-10-04, or maybe even 4/10/16."); processJCas(); assertEquals(4, JCasUtil.select(jCas, Temporal.class).size()); Temporal ts1 = JCasUtil.selectByIndex(jCas, Temporal.class, 0); assertEquals("Tuesday 4th October 2016", ts1.getCoveredText()); assertEquals(1475539200L, ts1.getTimestampStart()); assertEquals(1475625600L, ts1.getTimestampStop()); Temporal ts2 = JCasUtil.selectByIndex(jCas, Temporal.class, 1); assertEquals("October 4 2016", ts2.getCoveredText()); assertEquals(1475539200L, ts2.getTimestampStart()); assertEquals(1475625600L, ts2.getTimestampStop()); Temporal ts3 = JCasUtil.selectByIndex(jCas, Temporal.class, 2); assertEquals("2016-10-04", ts3.getCoveredText()); assertEquals(1475539200L, ts3.getTimestampStart()); assertEquals(1475625600L, ts3.getTimestampStop()); Temporal ts4 = JCasUtil.selectByIndex(jCas, Temporal.class, 3); assertEquals("4/10/16", ts4.getCoveredText()); assertEquals(1475539200L, ts4.getTimestampStart()); assertEquals(1475625600L, ts4.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 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()); }
@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()); }