def demo(): """ A demonstration showing how each tree transform can be used. """ from nltk_lite.draw.tree import draw_trees from nltk_lite.parse import bracket_parse from copy import deepcopy # original tree from WSJ bracketed text sentence = "(TOP (S (S (VP (VBN Turned) (ADVP (RB loose)) (PP (IN in) (NP (NP (NNP Shane) (NNP Longman) (POS 's)) (NN trading) (NN room))))) (, ,) (NP (DT the) (NN yuppie) (NNS dealers)) (VP (AUX do) (NP (NP (RB little)) (ADJP (RB right)))) (. .)))" tree = bracket_parse(sentence) # collapse subtrees with only one child collapsedTree = deepcopy(tree) collapseUnary(collapsedTree) # convert the tree to CNF cnfTree = deepcopy(collapsedTree) chomskyNormalForm(cnfTree) # convert the tree to CNF with parent annotation (one level) and horizontal smoothing of order two parentTree = deepcopy(collapsedTree) chomskyNormalForm(parentTree, horzMarkov = 2, vertMarkov = 1) # convert the tree back to its original form (used to make CYK results comparable) original = deepcopy(parentTree) unChomskyNormalForm(original) # convert tree back to bracketed text sentence2 = toTreebank(original) print "Sentences the same? ", sentence == sentence2 draw_trees(tree, collapsedTree, cnfTree, parentTree, original)
def draw(self): """ Open a new window containing a graphical diagram of this tree. """ from nltk_lite.draw.tree import draw_trees draw_trees(self)
def demo(): """ A demonstration of the probabilistic parsers. The user is prompted to select which demo to run, and how many parses should be found; and then each parser is run on the same demo, and a summary of the results are displayed. """ import sys, time from nltk_lite import tokenize from nltk_lite.parse import cfg, pcfg, pchart # Define two demos. Each demo has a sentence and a grammar. demos = [('I saw John with my cookie', pcfg.toy1), ('the boy saw Jack with Bob under the table with a telescope', pcfg.toy2)] # Ask the user which demo they want to use. print for i in range(len(demos)): print '%3s: %s' % (i+1, demos[i][0]) print ' %r' % demos[i][1] print print 'Which demo (%d-%d)? ' % (1, len(demos)), try: snum = int(sys.stdin.readline().strip())-1 sent, grammar = demos[snum] except: print 'Bad sentence number' return # Tokenize the sentence. tokens = list(tokenize.whitespace(sent)) # Define a list of parsers. We'll use all parsers. parsers = [ pchart.InsideParse(grammar), pchart.RandomParse(grammar), pchart.UnsortedParse(grammar), pchart.LongestParse(grammar), pchart.BeamParse(len(tokens)+1, grammar) ] # Run the parsers on the tokenized sentence. times = [] average_p = [] num_parses = [] all_parses = {} for parser in parsers: print '\ns: %s\nparser: %s\ngrammar: %s' % (sent,parser,pcfg) parser.trace(3) t = time.time() parses = parser.get_parse_list(tokens) times.append(time.time()-t) if parses: p = reduce(lambda a,b:a+b.prob(), parses, 0)/len(parses) else: p = 0 average_p.append(p) num_parses.append(len(parses)) for p in parses: all_parses[p.freeze()] = 1 # Print some summary statistics print print ' Parser | Time (secs) # Parses Average P(parse)' print '-------------------+------------------------------------------' for i in range(len(parsers)): print '%18s |%11.4f%11d%19.14f' % (parsers[i].__class__.__name__, times[i],num_parses[i],average_p[i]) parses = all_parses.keys() if parses: p = reduce(lambda a,b:a+b.prob(), parses, 0)/len(parses) else: p = 0 print '-------------------+------------------------------------------' print '%18s |%11s%11d%19.14f' % ('(All Parses)', 'n/a', len(parses), p) # Ask the user if we should draw the parses. print print 'Draw parses (y/n)? ', if sys.stdin.readline().strip().lower().startswith('y'): from nltk_lite.draw.tree import draw_trees print ' please wait...' draw_trees(*parses) # Ask the user if we should print the parses. print print 'Print parses (y/n)? ', if sys.stdin.readline().strip().lower().startswith('y'): for parse in parses: print parse
def demo(): """ A demonstration of the probabilistic parsers. The user is prompted to select which demo to run, and how many parses should be found; and then each parser is run on the same demo, and a summary of the results are displayed. """ import sys, time from nltk_lite import tokenize from nltk_lite.parse import cfg, pcfg, ViterbiParse # Define two demos. Each demo has a sentence and a grammar. demos = [('I saw John with my cookie', pcfg.toy1), ('the boy saw Jack with Bob under the table with a telescope', pcfg.toy2)] # Ask the user which demo they want to use. print for i in range(len(demos)): print '%3s: %s' % (i+1, demos[i][0]) print ' %r' % demos[i][1] print print 'Which demo (%d-%d)? ' % (1, len(demos)), try: snum = int(sys.stdin.readline().strip())-1 sent, grammar = demos[snum] except: print 'Bad sentence number' return # Tokenize the sentence. tokens = list(tokenize.whitespace(sent)) parser = ViterbiParse(grammar) all_parses = {} print '\nsent: %s\nparser: %s\ngrammar: %s' % (sent,parser,grammar) parser.trace(3) t = time.time() parses = parser.get_parse_list(tokens) time = time.time()-t if parses: average = reduce(lambda a,b:a+b.prob(), parses, 0)/len(parses) else: average = 0 num_parses = len(parses) for p in parses: all_parses[p.freeze()] = 1 # Print some summary statistics print print 'Time (secs) # Parses Average P(parse)' print '-----------------------------------------' print '%11.4f%11d%19.14f' % (time, num_parses, average) parses = all_parses.keys() if parses: p = reduce(lambda a,b:a+b.prob(), parses, 0)/len(parses) else: p = 0 print '------------------------------------------' print '%11s%11d%19.14f' % ('n/a', len(parses), p) # Ask the user if we should draw the parses. print print 'Draw parses (y/n)? ', if sys.stdin.readline().strip().lower().startswith('y'): from nltk_lite.draw.tree import draw_trees print ' please wait...' draw_trees(*parses) # Ask the user if we should print the parses. print print 'Print parses (y/n)? ', if sys.stdin.readline().strip().lower().startswith('y'): for parse in parses: print parse