|
import streamlit as st |
|
import fitz |
|
import requests |
|
from graphviz import Digraph |
|
|
|
|
|
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 |
|
|
|
|
|
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 |
|
|
|
|
|
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 |
|
|
|
|
|
st.title("Generatore di Mappe Mentali") |
|
st.write("Carica un PDF o inserisci del testo per generare una mappa mentale.") |
|
|
|
|
|
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) |
|
|
|
|
|
map_type = st.selectbox("Scegli il tipo di mappa", ["Mappa Concettuale", "Timeline", "Diagramma di Flusso", "Diagramma a Ragnatela"]) |
|
|
|
|
|
if st.button("Genera Mappa"): |
|
if text: |
|
images = search_images(text.split()[:3]) |
|
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.") |
|
|