package edu.stanford.nlp.international.spanish; import java.util.Arrays; import java.util.List; import junit.framework.TestCase; import edu.stanford.nlp.util.Pair; /** * @author Jon Gauthier * @author Christopher Manning */ public class SpanishVerbStripperITest extends TestCase { private final SpanishVerbStripper verbStripper = SpanishVerbStripper.getInstance(); public static void testStrippable() { assertTrue(SpanishVerbStripper.isStrippable("decirme")); assertTrue(SpanishVerbStripper.isStrippable("decirnos")); assertTrue(SpanishVerbStripper.isStrippable("jugarles")); assertTrue(SpanishVerbStripper.isStrippable("mandarlos")); assertTrue(SpanishVerbStripper.isStrippable("leerlo")); assertTrue(SpanishVerbStripper.isStrippable("jugarla")); assertTrue(SpanishVerbStripper.isStrippable("jugárselos")); assertTrue(SpanishVerbStripper.isStrippable("decírmelo")); assertTrue(SpanishVerbStripper.isStrippable("contándolo")); assertTrue(SpanishVerbStripper.isStrippable("yéndole")); assertTrue(SpanishVerbStripper.isStrippable("viviéndolo")); assertTrue(SpanishVerbStripper.isStrippable("leyéndolo")); assertTrue(SpanishVerbStripper.isStrippable("buscándome")); assertTrue(SpanishVerbStripper.isStrippable("sentaos")); assertTrue(SpanishVerbStripper.isStrippable("vestíos")); assertTrue(SpanishVerbStripper.isStrippable("cómprelos")); assertTrue(SpanishVerbStripper.isStrippable("házmelo")); assertTrue(SpanishVerbStripper.isStrippable("sentémonos")); assertTrue(SpanishVerbStripper.isStrippable("escribámosela")); assertTrue(SpanishVerbStripper.isStrippable("ponerlos")); } private void checkPronouns(String word, String originalStem, String normalizedStem, String... pronouns) { if (pronouns.length == 0) { // special case, the method returns null if no pronouns found to separate off assertNull(verbStripper.separatePronouns(word)); } else { List<String> pronounList = Arrays.asList(pronouns); SpanishVerbStripper.StrippedVerb result = verbStripper.separatePronouns(word); assertEquals(originalStem, result.getOriginalStem()); assertEquals(normalizedStem, result.getStem()); assertEquals(pronounList, result.getPronouns()); } } @SuppressWarnings("unchecked") public void testSeparatePronouns() { checkPronouns("decirme", "decir", "decir", "me"); // Should match capitalized verbs as well checkPronouns("Decirme", "Decir", "Decir", "me"); checkPronouns("contándoselo", "contándo", "contando", "se", "lo"); checkPronouns("aplicárseles", "aplicár", "aplicar", "se", "les"); // Don't treat plural past participles as 2nd-person commands! checkPronouns("sentados", null, null); checkPronouns("sentaos", "senta", "sentad", "os"); checkPronouns("damelo", "da", "da", "me", "lo"); checkPronouns("Imagínense", "Imagínen", "Imaginen", "se"); // Match elided 1P verb forms checkPronouns("vámonos", "vámo", "vamos", "nos"); // Let's write it to her checkPronouns("escribámosela", "escribámo", "escribamos", "se", "la"); // Looks like a verb with a clitic pronoun.. but it's not! There are // a *lot* of these in Spanish. checkPronouns("címbalo", null, null); checkPronouns("contando", null, null); // [cdm, Jan 2016] I think this shouldn't be split, but it was being erroneously split as [sal, os, null]. Ouch! */ checkPronouns("salos", null, null); } public void testStripVerb() { assertEquals("decir", verbStripper.stripVerb("decirme")); assertEquals("decir", verbStripper.stripVerb("decirnos")); assertEquals("jugar", verbStripper.stripVerb("jugarles")); assertEquals("mandar", verbStripper.stripVerb("mandarlos")); assertEquals("leer", verbStripper.stripVerb("leerlo")); assertEquals("jugar", verbStripper.stripVerb("jugarla")); assertEquals("jugar", verbStripper.stripVerb("jugárselos")); assertEquals("jugar", verbStripper.stripVerb("jugaros")); assertEquals("decir", verbStripper.stripVerb("decírmelo")); assertEquals("contando", verbStripper.stripVerb("contándolo")); assertEquals("yendo", verbStripper.stripVerb("yéndole")); assertEquals("viviendo", verbStripper.stripVerb("viviéndolo")); assertEquals("leyendo", verbStripper.stripVerb("leyéndolo")); assertEquals("buscando", verbStripper.stripVerb("buscándome")); assertEquals("sentad", verbStripper.stripVerb("sentaos")); assertEquals("vestid", verbStripper.stripVerb("vestíos")); assertEquals("compre", verbStripper.stripVerb("cómprelos")); assertEquals("haz", verbStripper.stripVerb("házmelo")); assertEquals("oír", verbStripper.stripVerb("oírse")); assertEquals("escribamos", verbStripper.stripVerb("escribámosela")); assertEquals("sentemos", verbStripper.stripVerb("sentémonos")); assertEquals("haber", verbStripper.stripVerb("haberlo")); assertEquals("poner", verbStripper.stripVerb("ponerlos")); } }