Spaces:
Running
Running
| 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 genFlatDepthTree(expr): | |
| doc = nlp(expr) | |
| root = next(doc.sents).root | |
| node = Node(root.text+" : depth="+str(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+" : depth="+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 "<center><div style='max-width: 800px; overflow-x:auto;'>"+img_tree+"</div></center>", 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 = "<center><div style='max-width: 800px; overflow-x:auto;'>"+image_tree+"</div></center>" | |
| return image_tree,flat_tree | |
| # -- Interface -- | |
| demo = gr.Blocks(css=".container { max-width: 900px; margin: auto;}", title="Syntactic tree generator") | |
| with demo: | |
| gr.Markdown("""<center> <h1>Syntactic tree generator</h1> </center>""") | |
| 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 depth 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=4, | |
| ) | |
| input_expr.change( | |
| fn=syntacticTree, | |
| inputs=input_expr, | |
| outputs=[out_image_tree, out_flat_tree]) | |
| demo.launch() |