import gradio as gr import spacy from spacy import displacy nlp = spacy.load("en_core_web_md") # -- Main functions -- 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=20, ) input_expr.change( fn=syntacticTree, inputs=input_expr, outputs=[out_image_tree, out_flat_tree]) demo.launch()