test_cfg2chomsky.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. # -*- coding: utf-8 -*-
  2. import unittest
  3. import nltk
  4. from nltk.grammar import CFG
  5. class ChomskyNormalFormForCFGTest(unittest.TestCase):
  6. def test_simple(self):
  7. grammar = CFG.fromstring(
  8. """
  9. S -> NP VP
  10. PP -> P NP
  11. NP -> Det N | NP PP P
  12. VP -> V NP | VP PP
  13. VP -> Det
  14. Det -> 'a' | 'the'
  15. N -> 'dog' | 'cat'
  16. V -> 'chased' | 'sat'
  17. P -> 'on' | 'in'
  18. """
  19. )
  20. self.assertFalse(grammar.is_flexible_chomsky_normal_form())
  21. self.assertFalse(grammar.is_chomsky_normal_form())
  22. grammar = grammar.chomsky_normal_form(flexible=True)
  23. self.assertTrue(grammar.is_flexible_chomsky_normal_form())
  24. self.assertFalse(grammar.is_chomsky_normal_form())
  25. grammar2 = CFG.fromstring(
  26. """
  27. S -> NP VP
  28. NP -> VP N P
  29. VP -> P
  30. N -> 'dog' | 'cat'
  31. P -> 'on' | 'in'
  32. """
  33. )
  34. self.assertFalse(grammar2.is_flexible_chomsky_normal_form())
  35. self.assertFalse(grammar2.is_chomsky_normal_form())
  36. grammar2 = grammar2.chomsky_normal_form()
  37. self.assertTrue(grammar2.is_flexible_chomsky_normal_form())
  38. self.assertTrue(grammar2.is_chomsky_normal_form())
  39. def test_complex(self):
  40. grammar = nltk.data.load('grammars/large_grammars/atis.cfg')
  41. self.assertFalse(grammar.is_flexible_chomsky_normal_form())
  42. self.assertFalse(grammar.is_chomsky_normal_form())
  43. grammar = grammar.chomsky_normal_form(flexible=True)
  44. self.assertTrue(grammar.is_flexible_chomsky_normal_form())
  45. self.assertFalse(grammar.is_chomsky_normal_form())