void applyAnnotators(Chart chart, List<String> tokens, int start, int end) { for(Annotator annotator: annotators) { for(Rule rule: annotator.annotate(tokens.subList(start, end))) { if(chart.isSpanFull(start, end)) return; chart.addDerivation(start, end, new Derivation(rule, null)); } } }
@Test void annotateMonth() { List<String> tokens = Collections.singletonList("May"); List<Rule> rules = DateTimeAnnotator.INSTANCE.annotate(tokens); assertEquals(rules.get(0).getLHS(), "$DATE_MONTH"); List<Map<String, Object>> result = rules.get(0).getSemantics().apply(Collections.emptyList()); assertTrue(result.get(0).containsKey("month")); assertEquals(result.get(0).get("month"), 5.0); }
@Test void annotateDow() { List<String> tokens = Collections.singletonList("Sunday"); List<Rule> rules = DateTimeAnnotator.INSTANCE.annotate(tokens); assertEquals(rules.get(0).getLHS(), "$DATE_DOW"); List<Map<String, Object>> result = rules.get(0).getSemantics().apply(Collections.emptyList()); assertTrue(result.get(0).containsKey("dow")); assertEquals(result.get(0).get("dow"), 7.0); } }
@Test void applyAnnotators() { Parser p = new Parser(null, null, Collections.singletonList(PhraseAnnotator.INSTANCE)); Parser.Chart chart = p.new Chart(10); List<String> tokens = Arrays.asList("A", "B", "C"); Rule r = PhraseAnnotator.INSTANCE.annotate(tokens).get(0); p.applyAnnotators(chart, tokens, 0, 3); assertEquals(r, chart.getDerivations(0, 3).get(0).rule); }
@Test void annotate() { Annotator annotator = new TokenAnnotator(); List<String> tokens = Collections.singletonList("Single"); String expected = "Single"; List<Rule> actual = annotator.annotate(tokens); assertEquals(1, actual.size()); assertEquals("$TOKEN", actual.get(0).getLHS()); assertEquals(expected, actual.get(0).getRHS().toString()); assertEquals(expected, actual.get(0) .getSemantics().apply(null) .get(0).get(SemanticUtils.KEY_UNNAMED));; } }
@Test void annotate() { Annotator annotator = new NumberAnnotator(); List<String> tokens = Collections.singletonList("123"); List<Rule> actual = annotator.annotate(tokens); assertEquals(1, actual.size()); assertEquals("$NUMBER", actual.get(0).getLHS()); assertEquals("123", actual.get(0).getRHS().toString()); assertEquals(123.0, actual.get(0) .getSemantics().apply(null) .get(0).get(SemanticUtils.KEY_UNNAMED)); } }
@Test void annotate() { Annotator annotator = new PhraseAnnotator(); List<String> tokens = Arrays.asList( "The", "boy", "who", "cried" ); String expected = "The boy who cried"; List<Rule> actual = annotator.annotate(tokens); assertEquals(1, actual.size()); assertEquals("$PHRASE", actual.get(0).getLHS()); assertEquals(expected, actual.get(0).getRHS().toString()); assertEquals(expected, actual.get(0) .getSemantics().apply(null) .get(0).get(SemanticUtils.KEY_UNNAMED));; } }