Spaces:
Sleeping
Sleeping
File size: 4,720 Bytes
f99351f d71a9cf dbe3d41 f86f0ff dbe3d41 f86f0ff 8b56823 f99351f 8b56823 f86f0ff 8b56823 f99351f 0d67209 f99351f efd1bb0 f99351f efd1bb0 f99351f 0d67209 f99351f 90e7939 f99351f 90e7939 f99351f e5b1472 f99351f 0d67209 f99351f 1871ff3 f99351f 1871ff3 f99351f d702ff2 f99351f d702ff2 b97d9f7 36f877d f99351f b97d9f7 36f877d 332e11b f99351f efd1bb0 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 |
import streamlit as st
from transformers import pipeline, AutoModelForMaskedLM, AutoTokenizer
from cltk.data.fetch import FetchCorpus
import builtins
#import stanza
# Salva la vecchia funzione input
_original_input = builtins.input
# Definisci una funzione che restituisce sempre "Y"
def _always_yes(prompt=""):
print(prompt, "Y") # per far vedere a log che abbiamo risposto 'Y'
return "Y"
# Sostituisci input con _always_yes
builtins.input = _always_yes
#stanza.download("la")
corpus_downloader = FetchCorpus(language="lat")
corpus_downloader.import_corpus("lat_models_cltk")
# Esempio: prova a importare CLTK (se presente)
try:
from cltk import NLP
nlp_lat = NLP(language="lat")
except ImportError:
nlp_lat = None
# Ripristina la funzione input originale (importante!)
#builtins.input = _original_input
# Imposta una chiave di sessione per il testo input, così possiamo aggiornarlo
if "input_text_value" not in st.session_state:
st.session_state["input_text_value"] = "Lorem ipsum dolor sit amet, [MASK] adipiscing elit."
# Frasi di esempio
examples = [
"Asdrubal, frater Annibalis, qui secundo Punico bello [MASK] ingentibus copiis ab Hispania veniens ...",
"hanno et mago qui [MASK] punico bello cornelium consulem aput liparas ceperunt ...",
"Lorem ipsum dolor sit amet, [MASK] adipiscing elit.",
"Populus Romanus cum Macedonibus [MASK] ter gessit",
"Reliqui qui tum principes numerabantur in magistratibus [MASK] cotidieque fere a nobis in contionibus audiebantur."
]
st.title("Completamento di parole in testi Latino Antico con Analisi Morfologica")
st.write("Esempi di testo (clicca sul bottone per copiare la frase nel campo di input):")
# Per ogni frase, creiamo una riga con la frase + bottone "Usa questa frase"
for i, example in enumerate(examples, start=1):
cols = st.columns([4,1]) # la prima colonna più larga per il testo, la seconda più stretta per il bottone
with cols[0]:
st.write(f"Esempio {i}: {example}")
with cols[1]:
# Se il bottone viene premuto, aggiorna la session state
if st.button(f"Usa {i}"):
st.session_state["input_text_value"] = example
# Qui la text_input è associata alla chiave "input_text_value"
input_text = st.text_area(
label="Testo:",
height=150, # Altezza in pixel
key="input_text_value"
)
# Esempio: carichiamo un modello di linguaggio
# (sostituisci con i tuoi modelli)
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)
punctuation_marks = {".", ",", ";", ":", "!", "?"}
def get_valid_predictions(sentence, max_attempts=3, top_k=5):
attempt = 0
filtered_predictions = []
while attempt < max_attempts:
predictions = fill_mask_roberta(sentence, top_k=top_k)
# Filtra le predizioni rimuovendo la punteggiatura
filtered_predictions = [
pred for pred in predictions if pred["token_str"] not in punctuation_marks
]
# Se troviamo almeno una parola valida, interrompiamo il ciclo
if filtered_predictions:
break
attempt += 1
return filtered_predictions
# Se l'utente ha inserito (o selezionato) un testo
if input_text:
# Sostituiamo [MASK] con <mask> (lo tokenizer Roberta se lo aspetta così)
input_text_roberta = input_text.replace("[MASK]", "<mask>")
predictions_roberta = get_valid_predictions(input_text_roberta)
st.subheader("Risultati delle previsioni:")
for pred in predictions_roberta:
st.write(f" Token: {pred['token_str']}\n")
st.write(f" Probabilità: {pred['score']:.4f}\n")
st.write(f" Sequence: {pred['sequence']}\n")
st.write("---")
# Esempio di analisi con CLTK (se installato e importato)
if nlp_lat is not None:
st.subheader("Analisi Morfologica con CLTK")
for pred in predictions_roberta:
# Ricostruisci la frase sostituendo <mask> con la parola predetta
doc = nlp_lat(pred['token_str'])
st.write(f"Frase {i}: {pred['token_str']}")
for w in doc.words:
st.write(
f"- **Token**: {w.string}\n"
f" - Lemma: {w.lemma}\n"
f" - UPOS: {w.upos}\n"
f" - Morph: {w.features}\n"
)
st.write("---")
else:
st.warning("CLTK non installato (o non importato). Esegui 'pip install cltk' per abilitare l'analisi.") |