|
import streamlit as st |
|
from streamlit_flow import streamlit_flow |
|
from streamlit_flow.elements import StreamlitFlowNode, StreamlitFlowEdge |
|
from streamlit_flow.state import StreamlitFlowState |
|
from streamlit_flow.layouts import LayeredLayout |
|
import base64 |
|
|
|
class FlowChart: |
|
def __init__(self): |
|
|
|
if "flowchart_state" not in st.session_state: |
|
st.session_state.flowchart_state = self.create_default_state() |
|
|
|
def create_default_state(self): |
|
"""Initialize default nodes and edges.""" |
|
|
|
nodes = [ |
|
|
|
StreamlitFlowNode("bundestag",(0, 0), {"content": "Bundestag"}, "input", "right"), |
|
StreamlitFlowNode("faz", (0, 0), {'content': "FAZ"}, 'input', 'right'), |
|
StreamlitFlowNode("taz", (0, 0), {"content": "taz"}, "input", "right"), |
|
StreamlitFlowNode("spiegel", (0, 0), {"content": "Spiegel"}, "input", "right"), |
|
StreamlitFlowNode("sz", (0, 0), {"content": "Süddeutsche Zeitung"}, "input", "right"), |
|
StreamlitFlowNode("bild", (0, 0), {"content": "Bild"}, "input", "right"), |
|
StreamlitFlowNode("zeit", (0, 0), {"content": "zeit"}, "input", "right"), |
|
StreamlitFlowNode("nzz", (0, 0), {"content": "Neu Zürcher Zeitung"}, "input", "right"), |
|
|
|
|
|
StreamlitFlowNode("corpus",(0, 0), {'content': "corpus"}, 'default', 'right', 'left'), |
|
|
|
StreamlitFlowNode("bertopic",(0, 0), {'content': """### BERToptic"""}, 'default', 'right', 'left'), |
|
|
|
StreamlitFlowNode("spacy",(0, 0), {'content': """### spacy"""}, 'default', 'right', 'left'), |
|
|
|
StreamlitFlowNode("inception",(0, 0), {'content': """### INCEpTION"""}, 'default', 'right', 'left'), |
|
|
|
StreamlitFlowNode("causalbert",(0, 0), {'content': """### CausalBERT"""}, 'default', 'right', 'left'), |
|
|
|
] |
|
|
|
edges = [ |
|
StreamlitFlowEdge("Bundestag-corpus", "bundestag", "corpus", animated=True), |
|
StreamlitFlowEdge("FAZ-corpus", "faz", "corpus", animated=True), |
|
StreamlitFlowEdge("taz-corpus", "taz", "corpus", animated=True), |
|
StreamlitFlowEdge("spiegel-corpus", "spiegel", "corpus", animated=True), |
|
StreamlitFlowEdge("sz-corpus", "sz", "corpus", animated=True), |
|
StreamlitFlowEdge("bild-corpus", "bild", "corpus", animated=True), |
|
StreamlitFlowEdge("zeit-corpus", "zeit", "corpus", animated=True), |
|
StreamlitFlowEdge("nzz-corpus", "nzz", "corpus", animated=True), |
|
StreamlitFlowEdge("corpus-BERTopic", "corpus", "bertopic", animated=True), |
|
StreamlitFlowEdge("corpus-spacy", "corpus", "spacy", animated=True), |
|
StreamlitFlowEdge("spacy-inception", "spacy", "inception", animated=True), |
|
StreamlitFlowEdge("inception-causalbert", "inception", "causalbert", animated=True) |
|
] |
|
return StreamlitFlowState(nodes, edges) |
|
|
|
def render(self): |
|
"""Render the flowchart with TreeLayout and restricted interactions.""" |
|
st.session_state.flowchart_state = streamlit_flow( |
|
"markdown_node_flow", |
|
st.session_state.flowchart_state, |
|
layout=LayeredLayout(direction='right'), |
|
fit_view=True, |
|
show_minimap=False, |
|
show_controls=True, |
|
hide_watermark=True, |
|
allow_new_edges=False, |
|
enable_node_menu=False, |
|
enable_edge_menu=False, |
|
enable_pane_menu=False |
|
) |