File size: 2,235 Bytes
c2fc6b8
a8bb7b0
b09df44
0344802
c2fc6b8
a8bb7b0
 
c2fc6b8
a8bb7b0
dbcf61e
0344802
 
 
 
dbcf61e
856ec32
 
b09df44
0344802
c2fc6b8
32bf464
856ec32
 
0344802
a8bb7b0
b09df44
a8bb7b0
c2fc6b8
a8bb7b0
856ec32
 
32bf464
 
0344802
b09df44
0344802
 
 
 
dbcf61e
856ec32
0344802
856ec32
0344802
 
856ec32
 
0344802
 
 
 
 
 
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
## app.py ##
import gradio as gr
import spacy
import random
from transformers import pipeline

nlp = spacy.load('es_core_news_sm')
text_generator = pipeline('text-generation', model='gpt2')

pos_tags = ['ADJ', 'ADP', 'ADV', 'AUX', 'CONJ', 'DET', 'INTJ', 'NOUN', 'NUM', 'PART', 'PRON', 'PROPN', 'PUNCT', 'SCONJ', 'SYM', 'VERB', 'X']
pos_tags_es = ['ADJ', 'ADP', 'ADV', 'AUX', 'CONJ', 'DET', 'INTJ', 'NOMBRE', 'NUM', 'PART', 'PRON', 'PROPN', 'PUNT', 'SCONJ', 'SYM', 'VERBO', 'X']  # Spanish version
pos_explanation = {  # Add explanations for each POS tag
    # Add your own explanations here
}

sentence_state = {'sentence': '', 'tagged_words': []}

def generate_sentence():
    result = text_generator('Erase una vez', max_length=10)[0]
    sentence = result['generated_text']
    tagged_words = analyze_sentence(sentence)
    sentence_state['sentence'] = sentence
    sentence_state['tagged_words'] = tagged_words
    return sentence, random.sample(tagged_words, 5)  # Only select 5 words to classify

def analyze_sentence(sentence):
    doc = nlp(sentence)
    return [(token.text, token.pos_) for token in doc]

def check_answer(*args):
    correct_answer = [tag for word, tag in sentence_state['tagged_words']]
    user_answer = list(args)
    if user_answer == correct_answer:
        return '¡Correcto!'
    else:
        return 'Incorrecto. La respuesta correcta es: ' + str(correct_answer) + '. ' + explain(correct_answer)

def explain(tags):
    return ' '.join(pos_explanation[tag] for tag in tags)

def game_flow(start_game):
    if start_game == 'Iniciar':
        sentence, words = generate_sentence()
        answer = check_answer(*gr.inputs[1:])  # Skip the first input
        return sentence, [word for word, _ in words], answer

iface = gr.Interface(fn=game_flow, 
                     inputs=[gr.inputs.Textbox(label='Escribe "Iniciar" para generar una frase')] + 
                            [gr.inputs.Dropdown(choices=pos_tags_es, label=f'Palabra {i+1}') for i in range(5)],  # Only 5 words to classify
                     outputs=[gr.outputs.Textbox(label='Frase'),
                              gr.outputs.Textbox(label='Palabras'),
                              gr.outputs.Textbox(label='Resultado')])
iface