Demosthene-OR's picture
.....
a2110a1
import streamlit as st
import streamlit.components.v1 as components
from generate_knowledge_graph import generate_knowledge_graph, answer_question_with_graph
st.set_page_config(
page_icon="None",
layout="wide",
initial_sidebar_state="auto",
menu_items=None
)
st.title("Knowledge Graph From Text")
st.sidebar.title("Input document")
input_method = st.sidebar.radio(
"Choose an input method:",
("Upload .txt", "Input text")
)
# Text extraction based on user choice
text = ""
if input_method == "Upload .txt":
uploaded_file = st.sidebar.file_uploader(label="Upload file", type="txt")
if uploaded_file is not None:
text = uploaded_file.read().decode("utf-8")
else:
text = st.sidebar.text_area("Input text", height=300)
if st.sidebar.button("1. Generate Knowledge Graph"):
if text:
with st.spinner("Generating knowledge graph..."):
net, graph_docs = generate_knowledge_graph(text)
st.session_state['graph_docs'] = graph_docs
st.success("Knowledge graph generated successfully!")
output_file = "knowledge_graph.html"
net.save_graph(output_file)
HtmlFile = open(output_file, 'r', encoding='utf-8')
components.html(HtmlFile.read(), height=600)
else:
st.sidebar.error("Please provide some text to generate the graph.")
# QA Section
if 'graph_docs' in st.session_state:
st.markdown("---")
st.subheader("Posez une question sur le document")
col1, col2 = st.columns([3, 1])
with col1:
question = st.text_input("Votre question :")
with col2:
k_value = st.slider("Relations à analyser (Top K)", min_value=1, max_value=20, value=5)
if st.button("2. Analyser") and question:
with st.spinner("Recherche sémantique dans le graphe en cours..."):
answer, filtered_net = answer_question_with_graph(
question,
st.session_state['graph_docs'],
k_relations=k_value
)
st.info(f"**Réponse :** {answer}")
st.markdown("**Sous-graphe des relations utilisées pour répondre :**")
HtmlFile = open("filtered_graph.html", 'r', encoding='utf-8')
components.html(HtmlFile.read(), height=450)