import streamlit as st from transformers import pipeline, AutoModelForMaskedLM, AutoTokenizer # CLTK per l'analisi testuale del latino try: from cltk import NLP nlp_lat = NLP(language="lat") except ImportError: nlp_lat = None # Titolo app st.title("Completamento di parole in testi Latino Antico con Analisi Morfologica") # Esempi di testo di partenza st.write("Esempi di testo:") st.write("Asdrubal, frater Annibalis, qui secundo Punico bello [MASK] ingentibus copiis ab Hispania veniens ...") st.write("hanno et mago qui [MASK]  punico bello cornelium consulem aput liparas ceperunt ...") st.write("Lorem ipsum dolor sit amet, [MASK] adipiscing elit.") st.write("Populus Romanus cum Macedonibus [MASK] ter gessit") # Input utente input_text = st.text_input("Testo:", value="Lorem ipsum dolor sit amet, [MASK] adipiscing elit.") # Caricamento modello e tokenizer (esempio con un modello RoBERTa addestrato su testi latini) # Cambia i nomi dei modelli secondo le tue necessità tokenizer_roberta = AutoTokenizer.from_pretrained("Cicciokr/Roberta-Base-Latin-Uncased") model_roberta = AutoModelForMaskedLM.from_pretrained("Cicciokr/Roberta-Base-Latin-Uncased") fill_mask_roberta = pipeline("fill-mask", model=model_roberta, tokenizer=tokenizer_roberta) if input_text: # Sostituisci [MASK] con il token usato dal modello RoBERTa input_text_roberta = input_text.replace("[MASK]", "") # Ottenere le predizioni predictions_roberta = fill_mask_roberta(input_text_roberta) st.subheader("Risultati delle previsioni:") for i, pred_roberta in enumerate(predictions_roberta): st.write( f"**Previsione {i+1}:** " f"Parola: {pred_roberta['token_str']} | " f"Probabilità: {pred_roberta['score']:.4f}" ) st.write(f"Sequence: {pred_roberta['sequence']}") st.write("---") # Se vuoi fare l'analisi morfologica con CLTK sulle frasi predette if nlp_lat is not None: st.subheader("Analisi Morfologica CLTK delle frasi predette") for i, pred_roberta in enumerate(predictions_roberta): # Ricostruisci la frase sostituendo con il token predetto predicted_text = input_text_roberta.replace("", pred_roberta['token_str']) # Esegui l'analisi NLP con CLTK sul testo completo doc = nlp_lat(predicted_text) st.write(f"**Analisi frase {i+1}:** {predicted_text}") for token in doc.tokens: st.write( f"- **Token**: {token.string}\n" f" - Lemma: {token.lemma}\n" f" - UPOS: {token.upos}\n" f" - Caratteristiche morfologiche: {token.features}\n" ) st.write("---") else: st.write("**CLTK non installato o non importato correttamente.** " "Esegui `pip install cltk` e riavvia l'app.")