text: '''
  =============================
  Filtering Insignificant Words
  =============================
  
  >>> from transforms import filter_insignificant
  >>> filter_insignificant([('your', 'PRP$'), ('book', 'NN'), ('is', 'VBZ'), ('great', 'JJ')], tag_suffixes=['PRP', 'PRP$'])
  [('book', 'NN'), ('is', 'VBZ'), ('great', 'JJ')]
  
  
  =====================
  Swapping Verb Phrases
  =====================
  
  >>> from transforms import swap_verb_phrase
  >>> swap_verb_phrase(filter_insignificant([('this', 'DT'), ('gripping', 'VBG'), ('book', 'NN'), ('is', 'VBZ'), ('fantastic', 'JJ')]))
  [('fantastic', 'JJ'), ('gripping', 'VBG'), ('book', 'NN')]
  >>> filter_insignificant(swap_verb_phrase([('this', 'DT'), ('gripping', 'VBG'), ('book', 'NN'), ('is', 'VBZ'), ('fantastic', 'JJ')]))
  [('fantastic', 'JJ'), ('gripping', 'VBG'), ('book', 'NN')]
  
  
  ==============================
  Chaining Chunk Transformations
  ==============================
  
  >>> from transforms import transform_chunk
  >>> transform_chunk([('the', 'DT'), ('book', 'NN'), ('of', 'IN'), ('recipes', 'NNS'), ('is', 'VBZ'), ('delicious', 'JJ')], trace=1)
  filter_insignificant : [('book', 'NN'), ('of', 'IN'), ('recipes', 'NNS'), ('is', 'VBZ'), ('delicious', 'JJ')]
  swap_verb_phrase : [('delicious', 'JJ'), ('book', 'NN'), ('of', 'IN'), ('recipes', 'NNS')]
  swap_infinitive_phrase : [('delicious', 'JJ'), ('recipes', 'NNS'), ('book', 'NN')]
  singularize_plural_noun : [('delicious', 'JJ'), ('recipe', 'NN'), ('book', 'NN')]
  [('delicious', 'JJ'), ('recipe', 'NN'), ('book', 'NN')]
  
  
  ===============================
  Converting a Chunk Tree to Text
  ===============================
  
  >>> from nltk.corpus import treebank_chunk
  >>> tree = treebank_chunk.chunked_sents()[0]
  >>> ' '.join([w for w, t in tree.leaves()])
  'Pierre Vinken , 61 years old , will join the board as a nonexecutive director Nov. 29 .'
  
  >>> from transforms import chunk_tree_to_sent
  >>> chunk_tree_to_sent(tree)
  'Pierre Vinken, 61 years old, will join the board as a nonexecutive director Nov. 29.'
  
  
  =====================
  Flattening Deep Trees
  =====================
  
  >>> from nltk.corpus import treebank
  >>> from transforms import flatten_deeptree
  >>> flatten_deeptree(treebank.parsed_sents()[0])
  Tree('S', [Tree('NP', [('Pierre', 'NNP'), ('Vinken', 'NNP')]), (',', ','), Tree('NP', [('61', 'CD'), ('years', 'NNS')]), ('old', 'JJ'), (',', ','), ('will', 'MD'), ('join', 'VB'), Tree('NP', [('the', 'DT'), ('board', 'NN')]), ('as', 'IN'), Tree('NP', [('a', 'DT'), ('nonexecutive', 'JJ'), ('director', 'NN')]), Tree('NP-TMP', [('Nov.', 'NNP'), ('29', 'CD')]), ('.', '.')])
  
  >>> from nltk.tree import Tree
  >>> Tree('NNP', ['Pierre']).height()
  2
  
  >>> Tree('NNP', ['Pierre']).pos()
  [('Pierre', 'NNP')]
  
  >>> Tree('NP', [Tree('NNP', ['Pierre']), Tree('NNP', ['Vinken'])]).height()
  3
  
  >>> Tree('NP', [Tree('NNP', ['Pierre']), Tree('NNP', ['Vinken'])]).pos()
  [('Pierre', 'NNP'), ('Vinken', 'NNP')]
  
  >>> from nltk.chunk.util import tree2conlltags
  >>> tree2conlltags(treebank.parsed_sents()[0])
  Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    File "/usr/local/lib/python2.6/dist-packages/nltk/chunk/util.py", line 417, in tree2conlltags
      raise ValueError, "Tree is too deeply nested to be printed in CoNLL format"
  ValueError: Tree is too deeply nested to be printed in CoNLL format
  
  >>> tree2conlltags(flatten_deeptree(treebank.parsed_sents()[0]))
  [('Pierre', 'NNP', 'B-NP'), ('Vinken', 'NNP', 'I-NP'), (',', ',', 'O'), ('61', 'CD', 'B-NP'), ('years', 'NNS', 'I-NP'), ('old', 'JJ', 'O'), (',', ',', 'O'), ('will', 'MD', 'O'), ('join', 'VB', 'O'), ('the', 'DT', 'B-NP'), ('board', 'NN', 'I-NP'), ('as', 'IN', 'O'), ('a', 'DT', 'B-NP'), ('nonexecutive', 'JJ', 'I-NP'), ('director', 'NN', 'I-NP'), ('Nov.', 'NNP', 'B-NP-TMP'), ('29', 'CD', 'I-NP-TMP'), ('.', '.', 'O')]
  
  >>> from nltk.corpus import cess_esp
  >>> cess_esp.parsed_sents()[0].height()
  22
  >>> flatten_deeptree(cess_esp.parsed_sents()[0]).height()
  3
  
  
  =======================
  Creating a Shallow Tree
  =======================
  
  >>> from transforms import shallow_tree
  >>> shallow_tree(treebank.parsed_sents()[0])
  Tree('S', [Tree('NP-SBJ', [('Pierre', 'NNP'), ('Vinken', 'NNP'), (',', ','), ('61', 'CD'), ('years', 'NNS'), ('old', 'JJ'), (',', ',')]), Tree('VP', [('will', 'MD'), ('join', 'VB'), ('the', 'DT'), ('board', 'NN'), ('as', 'IN'), ('a', 'DT'), ('nonexecutive', 'JJ'), ('director', 'NN'), ('Nov.', 'NNP'), ('29', 'CD')]), ('.', '.')])
  
  >>> treebank.parsed_sents()[0].height()
  7
  >>> shallow_tree(treebank.parsed_sents()[0]).height()
  3
  
  
  ======================
  Converting Tree Labels
  ======================
  
  >>> from transforms import convert_tree_labels
  >>> mapping = {'NP-SBJ': 'NP', 'NP-TMP': 'NP'}
  >>> convert_tree_labels(treebank.parsed_sents()[0], mapping)
  Tree('S', [Tree('NP', [Tree('NP', [Tree('NNP', ['Pierre']), Tree('NNP', ['Vinken'])]), Tree(',', [',']), Tree('ADJP', [Tree('NP', [Tree('CD', ['61']), Tree('NNS', ['years'])]), Tree('JJ', ['old'])]), Tree(',', [','])]), Tree('VP', [Tree('MD', ['will']), Tree('VP', [Tree('VB', ['join']), Tree('NP', [Tree('DT', ['the']), Tree('NN', ['board'])]), Tree('PP-CLR', [Tree('IN', ['as']), Tree('NP', [Tree('DT', ['a']), Tree('JJ', ['nonexecutive']), Tree('NN', ['director'])])]), Tree('NP', [Tree('NNP', ['Nov.']), Tree('CD', ['29'])])])]), Tree('.', ['.'])])
  '''
  # TODO: also do a task on converting tree nodes so NP-TMP -> NP
  
  if __name__ == '__main__':
  	import doctest
  	doctest.testmod()