MindMap / app.py
rosa0003's picture
Update app.py
921f62c verified
raw
history blame
2.47 kB
import streamlit as st
import fitz # PyMuPDF
import requests
from graphviz import Digraph
# Function to extract text from a PDF
def extract_text_from_pdf(pdf_file):
pdf_document = fitz.open(pdf_file)
text = ""
for page in pdf_document:
text += page.get_text()
pdf_document.close()
return text
# Function to search images via Wikipedia API
def search_images(query):
url = f"https://en.wikipedia.org/w/api.php?action=query&list=search&srsearch={query}&format=json"
response = requests.get(url)
data = response.json()
images = []
for item in data['query']['search']:
title = item['title']
img_url = f"https://en.wikipedia.org/wiki/File:{title.replace(' ', '_')}.png"
images.append(img_url)
return images
# Function to create a mind map
def create_mind_map(text, images):
dot = Digraph()
dot.node('A', 'Concept Central', shape='box', style='filled', fillcolor='lightblue')
for i, img in enumerate(images):
node_label = text[i] if i < len(text) else 'Other'
dot.node(f'B{i}', node_label, shape='ellipse', style='filled', fillcolor='lightyellow')
dot.edge('A', f'B{i}', label=f'Image {i+1}')
dot.node(f'C{i}', img, image=img, shape='rect')
dot.edge(f'B{i}', f'C{i}')
return dot
# Streamlit app initialization
st.title("Generatore di Mappe Mentali")
st.write("Carica un PDF o inserisci del testo per generare una mappa mentale.")
# Input options
input_option = st.radio("Scegli un'opzione:", ('Carica PDF', 'Scrivi Testo'))
if input_option == 'Carica PDF':
uploaded_file = st.file_uploader("Scegli un file PDF...", type="pdf")
if uploaded_file is not None:
text = extract_text_from_pdf(uploaded_file)
st.text_area("Testo estratto:", text, height=300)
else:
text = st.text_area("Inserisci il testo:", height=300)
# Dropdown for map options
map_type = st.selectbox("Scegli il tipo di mappa", ["Mappa Concettuale", "Timeline", "Diagramma di Flusso", "Diagramma a Ragnatela"])
# Button to generate the map
if st.button("Genera Mappa"):
if text:
images = search_images(text.split()[:3]) # Use the first three words for the search
mind_map = create_mind_map(text.split('\n'), images)
st.graphviz_chart(mind_map)
else:
st.warning("Per favore, inserisci del testo o carica un PDF.")
st.write("Prova a scrivere del testo breve o a caricare un PDF per vedere come funziona.")