'This method can modify a tree in three ways:
1. Convert a tree into its Chomsky Normal Form (CNF)
equivalent -- Every subtree has either two non-terminals
or one terminal as its children.  This process requires
the creation of more"artificial" non-terminal nodes.
2. Markov (vertical) smoothing of children in new artificial
nodes
3. Horizontal (parent) annotation of nodes
:param factor: Right or left factoring method (default = "right")
:type  factor: str = [left|right]
:param horzMarkov: Markov order for sibling smoothing in artificial nodes (None (default) = include all siblings)
:type  horzMarkov: int | None
:param vertMarkov: Markov order for parent smoothing (0 (default) = no vertical annotation)
:type  vertMarkov: int | None
:param childChar: A string used in construction of the artificial nodes, separating the head of the
original subtree from the child nodes that have yet to be expanded (default = "|")
:type  childChar: str
:param parentChar: A string used to separate the node representation from its vertical annotation
:type  parentChar: str'

def chomsky_normal_form(self, factor=u'right', horzMarkov=None, vertMarkov=0, childChar=u'|', parentChar=u'^'):

    from nltk.treetransforms import chomsky_normal_form
    chomsky_normal_form(self, factor, horzMarkov, vertMarkov, childChar, parentChar)
