syntactic_tree / app.py
nanom's picture
New flat depth tree
7cabef0
raw
history blame
2.57 kB
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()