import altair as alt import numpy as np import pandas as pd import streamlit as st import streamlit.components.v1 as components # For embedding custom HTML from generate_knowledge_graph import generate_knowledge_graph # Set up Streamlit page configuration st.set_page_config( page_icon=None, layout="wide", # Use wide layout for better graph display initial_sidebar_state="auto", menu_items=None ) # Set the title of the app st.title("Knowledge Graph From Text") # Sidebar section for user input method st.sidebar.title("Input document") input_method = st.sidebar.radio( "Choose an input method:", ["Upload txt", "Input text"], # Options for uploading a file or manually inputting text ) # Case 1: User chooses to upload a .txt file if input_method == "Upload txt": # File uploader widget in the sidebar uploaded_file = st.sidebar.file_uploader(label="Upload file", type=["txt"]) if uploaded_file is not None: # Read the uploaded file content and decode it as UTF-8 text text = uploaded_file.read().decode("utf-8") # Button to generate the knowledge graph if st.sidebar.button("Generate Knowledge Graph"): with st.spinner("Generating knowledge graph..."): # Call the function to generate the graph from the text net = generate_knowledge_graph(text) st.success("Knowledge graph generated successfully!") print("hello world") # Save the graph to an HTML file output_file = "knowledge_graph.html" net.save_graph(output_file) # Open the HTML file and display it within the Streamlit app HtmlFile = open(output_file, 'r', encoding='utf-8') components.html(HtmlFile.read(), height=1000) # Case 2: User chooses to directly input text else: # Text area for manual input text = st.sidebar.text_area("Input text", height=300) if text: # Check if the text area is not empty if st.sidebar.button("Generate Knowledge Graph"): with st.spinner("Generating knowledge graph..."): # Call the function to generate the graph from the input text net = generate_knowledge_graph(text) st.success("Knowledge graph generated successfully!") # Save the graph to an HTML file output_file = "knowledge_graph.html" net.save_graph(output_file) # Open the HTML file and display it within the Streamlit app HtmlFile = open(output_file, 'r', encoding='utf-8') components.html(HtmlFile.read(), height=1000) """ # Welcome to Streamlit! Edit `/streamlit_app.py` to customize this app to your heart's desire :heart:. If you have any questions, checkout our [documentation](https://docs.streamlit.io) and [community forums](https://discuss.streamlit.io). In the meantime, below is an example of what you can do with just a few lines of code: """ num_points = st.slider("Number of points in spiral", 1, 10000, 1100) num_turns = st.slider("Number of turns in spiral", 1, 300, 31) indices = np.linspace(0, 1, num_points) theta = 2 * np.pi * num_turns * indices radius = indices x = radius * np.cos(theta) y = radius * np.sin(theta) df = pd.DataFrame({ "x": x, "y": y, "idx": indices, "rand": np.random.randn(num_points), }) st.altair_chart(alt.Chart(df, height=700, width=700) .mark_point(filled=True) .encode( x=alt.X("x", axis=None), y=alt.Y("y", axis=None), color=alt.Color("idx", legend=None, scale=alt.Scale()), size=alt.Size("rand", legend=None, scale=alt.Scale(range=[1, 150])), ))