import gradio as gr from anytree import Node, RenderTree import spacy from spacy import displacy nlp = spacy.load("en_core_web_md") # -- Main functions -- def postag(tk): tag = "" plural_tags = ["NNS", "NNPS"] if tk.tag_ in plural_tags: tag = " (Plural)" else: tag = " ({})".format(tk.tag_) return tag def genFlatDepthTree(expr): doc = nlp(expr) root = next(doc.sents).root node = Node(root.text+"\t (Root)"+postag(root)+" - [0]", parent=None) def tree(tk, last_node, depth): if tk.n_lefts + tk.n_rights > 0: for ch in tk.children: tree(ch, Node(ch.text+"\t"+postag(ch)+" - ["+str(depth+1)+"]", parent=last_node), depth+1) tree(root, node, 0) flat_tree = "" for pre, fill, node in RenderTree(node): flat_tree += """{}{}\n""".format(pre, node.name) img_tree = displacy.render(doc, style='dep', options={'distance': 100}) return "
"+img_tree+"
", flat_tree # def syntacticTree(expr): # doc = nlp(expr) # depths = {} # def walk_tree(tk, depth): # depths[tk.text] = depth # if tk.n_lefts + tk.n_rights > 0: # if Doesn't root # [walk_tree(child, depth + 1) for child in tk.children] # [walk_tree(sent.root, 0) for sent in doc.sents] # flat_tree = [tk.text+" - "+str(depths[tk.text]) for tk in doc] # image_tree = displacy.render(doc, style='dep', options={'distance': 100}) # image_tree = "
"+image_tree+"
" # return image_tree,flat_tree # -- Interface -- demo = gr.Blocks(css=".container { max-width: 900px; margin: auto;}", title="Syntactic tree generator") with demo: gr.Markdown("""

🌳 Syntactic Tree Generator 🌳

""") with gr.Row(): with gr.Column(): gr.Image(value="https://img.unocero.com/2019/11/facebook-app-para-hacer-memes-1-1024x576.jpg",label="", type="URL") with gr.Column(): input_expr = gr.Textbox(label="Input", placeholder="Enter an expression here") out_flat_tree = gr.Text(label="Flat tree", value="") out_image_tree = gr.HTML(label="") gr.Examples( examples=[ "glass in guys hand on right first guy", "i have been happy", "the happy spiders", "gradio is a package that allows users to create simple web apps with just a few lines of code", "the best dog out there"], inputs=input_expr, examples_per_page=5, ) input_expr.change( fn=genFlatDepthTree, inputs=input_expr, outputs=[out_image_tree, out_flat_tree]) demo.launch()