def treeTeX(self, tl=None): jos = True if tl == None: tl = self.copy(True) while jos == True: jos = False for pr in tl.treepositions(): if isinstance(tl[pr], Tree) and len( tl[pr]) == 1 and tl[pr].node == 'WFF': tl[pr] = toTeX(tl[pr][0]) jos = True break if isinstance(tl[pr], Tree) and len( tl[pr]) == 5 and 'WFF' not in [ (a.node if isinstance(a, Tree) else a) for a in tl[pr] ]: #tl[pr].node = ''.join([a for a in tl[pr]]) nod = ''.join([ (a.node if isinstance(a, Tree) else toTeX(a)) for a in tl[pr] ]) if pr == (): tl = Tree(nod, [tl[pr][1], tl[pr][3]]) else: tl[pr] = Tree(nod, [tl[pr][1], tl[pr][3]]) jos = True break if isinstance(tl[pr], Tree) and len( tl[pr]) == 2 and tl[pr][0] == 'n' and (not isinstance( tl[pr][1], Tree) or tl[pr][1].node != 'WFF'): #tl[pr].node = ''.join([a for a in tl[pr]]) if pr == (): tl = Tree( toTeX('n') + tl[pr][1].node if isinstance( tl[pr][1], Tree) else toTeX('n') + tl[pr][1], [tl[pr][1]]) else: tl[pr] = Tree( toTeX('n') + tl[pr][1].node if isinstance( tl[pr][1], Tree) else toTeX('n') + tl[pr][1], [tl[pr][1]]) jos = True break for pr in tl.treepositions(): if isinstance(tl[pr], Tree): tl[pr].node = '$' + tl[pr].node + '$' else: tl[pr] = '$' + tl[pr] + '$' return tl.pprint_latex_qtree()
def drawTreeTest(self): """Draw a tree using NLTK, the Qtree TeX package, and ImageMagick. This doesn't really work. It is very slow (esp. XeLaTeX typesetting) and the trees often spill over the page and are cut up. """ report = [] def getSubprocess(programName): try: return subprocess.Popen([programName], shell=False, stdin=subprocess.PIPE, stdout=subprocess.PIPE) except OSError: return None def programIsInstalled(command, name, check): try: process = getSubprocess(command) communication = process.communicate() response = communication[0].decode('utf-8') if check in response: result = True else: result = False except AttributeError: result = False return result # See if NLTK is installed nltkInstalled = nltkModuleIsInstalled() # See if XeLaTeX is installed xelatexInstalled = programIsInstalled('xelatex', 'XeLaTeX', 'This is XeTeX') # See if ImageMagick is installed imagemagickInstalled = programIsInstalled('convert', 'ImageMagick', 'ImageMagick') if not nltkInstalled or not xelatexInstalled or not imagemagickInstalled: session['flash'] = 'Dependencies for Tree drawing are not installed' session.save() return render('/derived/administer/index.html') # Create the Qtree using NLTK's nltk.Tree class from nltk import Tree #tree = Tree('(TOP (S (NP-SBJ (PRP It)) (VP (VBZ has) (NP (NP (DT no) (NN bearing)) (PP-DIR (IN on) (NP (NP (PRP$ our) (NN work) (NN force)) (NP-TMP (NN today)))))) (. .)))') tree = Tree(u"(TP (DP (D the) (NP (NP (N dog)) (CP (DP 0) (C' (C that) (TP (DP I) (T' (T 0_PAST) (VP (V see) (DP who)))))))) (T' (T 0_PAST) (VP (V be) (AP (A black)))))") tree = tree.pprint_latex_qtree() # Write the XeLaTeX file filesPath = config['app_conf']['permanent_store'] treesPath = os.path.join(filesPath, 'trees') if not os.path.exists(treesPath): os.makedirs(treesPath) formID = str(11) formTreesPath = os.path.join(treesPath, formID) if not os.path.exists(formTreesPath): os.makedirs(formTreesPath) xelatexDoc = u'%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s' % ( '\documentclass{article}', '\usepackage{fontspec}', '\setmainfont{Times}', '\usepackage{qtree}', '\\begin{document}', '\pagestyle{empty}', '\\tiny', '%s' % tree, '\end{document}' ) xelatexDocPath = os.path.join(formTreesPath, 'tree.tex') pdfDocPath = os.path.join(formTreesPath, 'tree.pdf') pngDocPath = os.path.join(formTreesPath, 'tree.png') xelatexDocFile = codecs.open(xelatexDocPath, 'w', 'utf-8') xelatexDocFile.write(xelatexDoc) xelatexDocFile.close() # Typeset the XeLaTeX file if not os.path.exists(pdfDocPath): outDirOpt = '-output-directory=%s' % formTreesPath args = ('xelatex', outDirOpt, xelatexDocPath, '-interaction=nonstopmode') s = subprocess.call(args, shell=False, stdout=subprocess.PIPE) # Convert the PDF to a PNG if not os.path.exists(pngDocPath): args = ('convert', '-density', '400', pdfDocPath, '-resize', '75%', '-flatten', '-trim', pngDocPath) s = subprocess.call(args, shell=False, stdout=subprocess.PIPE) fileReference = url('gettree', id=formID) img = '<img src="%s" />' % fileReference c.img = img return render('/derived/administer/index.html')
def drawTreeTest(self): """Draw a tree using NLTK, the Qtree TeX package, and ImageMagick. This doesn't really work. It is very slow (esp. XeLaTeX typesetting) and the trees often spill over the page and are cut up. """ report = [] def getSubprocess(programName): try: return subprocess.Popen([programName], shell=False, stdin=subprocess.PIPE, stdout=subprocess.PIPE) except OSError: return None def programIsInstalled(command, name, check): try: process = getSubprocess(command) communication = process.communicate() response = communication[0].decode('utf-8') if check in response: result = True else: result = False except AttributeError: result = False return result # See if NLTK is installed nltkInstalled = nltkModuleIsInstalled() # See if XeLaTeX is installed xelatexInstalled = programIsInstalled('xelatex', 'XeLaTeX', 'This is XeTeX') # See if ImageMagick is installed imagemagickInstalled = programIsInstalled('convert', 'ImageMagick', 'ImageMagick') if not nltkInstalled or not xelatexInstalled or not imagemagickInstalled: session[ 'flash'] = 'Dependencies for Tree drawing are not installed' session.save() return render('/derived/administer/index.html') # Create the Qtree using NLTK's nltk.Tree class from nltk import Tree #tree = Tree('(TOP (S (NP-SBJ (PRP It)) (VP (VBZ has) (NP (NP (DT no) (NN bearing)) (PP-DIR (IN on) (NP (NP (PRP$ our) (NN work) (NN force)) (NP-TMP (NN today)))))) (. .)))') tree = Tree( u"(TP (DP (D the) (NP (NP (N dog)) (CP (DP 0) (C' (C that) (TP (DP I) (T' (T 0_PAST) (VP (V see) (DP who)))))))) (T' (T 0_PAST) (VP (V be) (AP (A black)))))" ) tree = tree.pprint_latex_qtree() # Write the XeLaTeX file filesPath = config['app_conf']['permanent_store'] treesPath = os.path.join(filesPath, 'trees') if not os.path.exists(treesPath): os.makedirs(treesPath) formID = str(11) formTreesPath = os.path.join(treesPath, formID) if not os.path.exists(formTreesPath): os.makedirs(formTreesPath) xelatexDoc = u'%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s' % ( '\documentclass{article}', '\usepackage{fontspec}', '\setmainfont{Times}', '\usepackage{qtree}', '\\begin{document}', '\pagestyle{empty}', '\\tiny', '%s' % tree, '\end{document}') xelatexDocPath = os.path.join(formTreesPath, 'tree.tex') pdfDocPath = os.path.join(formTreesPath, 'tree.pdf') pngDocPath = os.path.join(formTreesPath, 'tree.png') xelatexDocFile = codecs.open(xelatexDocPath, 'w', 'utf-8') xelatexDocFile.write(xelatexDoc) xelatexDocFile.close() # Typeset the XeLaTeX file if not os.path.exists(pdfDocPath): outDirOpt = '-output-directory=%s' % formTreesPath args = ('xelatex', outDirOpt, xelatexDocPath, '-interaction=nonstopmode') s = subprocess.call(args, shell=False, stdout=subprocess.PIPE) # Convert the PDF to a PNG if not os.path.exists(pngDocPath): args = ('convert', '-density', '400', pdfDocPath, '-resize', '75%', '-flatten', '-trim', pngDocPath) s = subprocess.call(args, shell=False, stdout=subprocess.PIPE) fileReference = url('gettree', id=formID) img = '<img src="%s" />' % fileReference c.img = img return render('/derived/administer/index.html')