def test_movement_index(self): for tracetype in ["T", "ICH", "CL"]: print(tracetype) # Regular trace t = T.parse("(NP *%s*-1)" % (tracetype,)) self.assertEqual(t.metadata.index, 1) self.assertEqual(t.metadata.idx_type, util.IDX_REGULAR) self.assertEqual(t.text, "*%s*" % (tracetype,)) self.assertEqual(t.label, "NP") # NB: traces cannot be gaps! t = T.parse("(NP *%s*=1)" % (tracetype,)) self.assertIsNone(t.metadata.index) self.assertIsNone(t.metadata.idx_type) self.assertEqual(t.text, "*%s*=1" % (tracetype,)) self.assertEqual(t.label, "NP") # Invalid trace t = T.parse("(NP *%s*-X)" % (tracetype,)) self.assertIsNone(t.metadata.index) self.assertIsNone(t.metadata.idx_type) self.assertEqual(t.text, "*%s*-X" % (tracetype,)) self.assertEqual(t.label, "NP") # Invalid trace (gap) t = T.parse("(NP *%s*=X)" % (tracetype,)) self.assertIsNone(t.metadata.index) self.assertIsNone(t.metadata.idx_type) self.assertEqual(t.text, "*%s*=X" % (tracetype,)) self.assertEqual(t.label, "NP")
def test_str_indices(self): t = T.parse("( (IP=1 (FOO bar)))") self.assertEqual(str(t), "( (IP=1 (FOO bar)))") t = T.parse("( (IP (NP-SBJ *T*-1)))") self.assertEqual(str(t), "( (IP (NP-SBJ *T*-1)))") # TODO: the below is a real issue...what to do about leaves at the top # level??? raise SkipTest t = T.parse("( (IP=1 foo))") self.assertEqual(str(t), "( (IP=1 foo))")
def tree(self, line, cell): # TODO: are we sure we like this method of assigning the tree to a # variable? t = tree.parse(cell) if line is not None and line.isidentifier() and not keyword.iskeyword(line): self.shell.user_ns[line] = t return t
def test_parse(self): self.assertIsNone(T.parse("")) self.assertIsNone(T.parse(" \n ")) self.assertRaises(T.ParseError, lambda: T.parse("(FOO")) self.assertRaises(T.ParseError, lambda: T.parse("(FOO))")) self.assertRaises(T.ParseError, lambda: T.parse("(FOO bar))")) self.assertRaises(T.ParseError, lambda: T.parse("(FOO)")) self.assertRaises(T.ParseError, lambda: T.parse("(FOO bar baz)"))
def test_str(self): t = T.parse("""( (IP (NP (D I)) (VBP love) (NP (NPR Python) (NPR programming))))""") s = str(t) self.assertIsInstance(s, str) self.assertMultiLineEqual(s, textwrap.dedent( """ ( (IP (NP (D I)) (VBP love) (NP (NPR Python) (NPR programming)))) """).strip())
def test_id(self): t = T.parse("""( (IP (NP (D I)) (VBP love) (NP (NPR Python) (NPR programming)))(ID foo))""") # Test that ID is parsed self.assertEqual(t.metadata["ID"], "foo") # Test that str works s = str(t) self.assertIsInstance(s, str) self.assertMultiLineEqual(s, textwrap.dedent( """ ( (IP (NP (D I)) (VBP love) (NP (NPR Python) (NPR programming))) (ID foo)) """).strip()) t2 = T.parse("""( (ID foo)(IP (NP (D I)) (VBP love) (NP (NPR Python) (NPR programming))))""") # Test that the order of the ID node doesn't matter to parsing self.assertEqual(t2.metadata.id, "foo") self.assertEqual(t, t2) self.assertEqual(s, str(t2))
def test_urtext(self): # TODO: woefully incomplete tree = "( (IP-MAT (X *T*) (X FOO) (X *con*) (XP (X bar) (X BAZ) (. .)) (CODE dddd)))" self.assertEqual(T.parse(tree).urtext, "FOO bar BAZ.")
def test_eq(self): t = T.parse("(NP (N foo))") t2 = T.parse("(NP (N foo))") self.assertEqual(t, t2)
def test_parse_1(self): t = T.parse("( (ID foo) (IP (NP (PRO it)) (VBP works)))") self.assertIsInstance(t, T.NonTerminal) self.assertEqual(t.metadata.id, 'foo') self.assertEqual(t, NT("IP", [NT("NP", [L("PRO", "it")]), L("VBP", "works")], {"ID": "foo"}))