## app.py ## import gradio as gr import spacy 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'] sentence_state = {'sentence': '', 'tagged_words': []} def generate_sentence(): result = text_generator('')[0] sentence = result['generated_text'] tagged_words = analyze_sentence(sentence) sentence_state['sentence'] = sentence sentence_state['tagged_words'] = tagged_words return sentence, [word for word, _ in tagged_words] 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) def game_flow(): sentence, words = generate_sentence() answer = check_answer(*gr.inputs) return sentence, words, answer iface = gr.Interface(fn=game_flow, inputs=[gr.inputs.Button(label='Generate Sentence')] + [gr.inputs.Dropdown(choices=pos_tags, label=f'Word {i+1}') for i in range(len(sentence_state['tagged_words']))], outputs=[gr.outputs.Textbox(label='Sentence'), gr.outputs.Textbox(label='Words'), gr.outputs.Textbox(label='Result')]) iface.launch()