File size: 3,896 Bytes
f99351f
 
d71a9cf
dbe3d41
f86f0ff
dbe3d41
 
 
 
 
 
 
 
 
 
f86f0ff
 
 
8b56823
f99351f
 
 
 
 
 
 
8b56823
 
f86f0ff
8b56823
f99351f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
efd1bb0
f99351f
 
 
 
 
efd1bb0
f99351f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e5b1472
f99351f
 
e5b1472
 
 
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
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"
]

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_input("Testo:", 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)

# 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 = fill_mask_roberta(input_text_roberta)
    
    st.subheader("Risultati delle previsioni:")
    for pred in predictions_roberta:
        st.write(
            f" Token: {pred['token_str']}\n"
            f" Probabilità: {pred['score']:.4f}\n"
            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.")