AIdeaText commited on
Commit
2384502
·
verified ·
1 Parent(s): eaf0799

Update modules/ui.py

Browse files
Files changed (1) hide show
  1. modules/ui.py +147 -38
modules/ui.py CHANGED
@@ -12,7 +12,16 @@ from spacy import displacy
12
  #Importaciones locales
13
  #Importaciones locales de autenticación y base de datos
14
  from .auth import authenticate_user, register_user
15
- from .database import get_student_data, store_morphosyntax_result, store_semantic_result, store_chat_history, create_admin_user, create_student_user
 
 
 
 
 
 
 
 
 
16
 
17
  #Importaciones locales de uiadmin
18
  from .admin_ui import admin_page
@@ -257,7 +266,10 @@ def display_morphosyntax_analysis_interface(nlp_models, lang_code):
257
  'repeated_words': "Palabras repetidas",
258
  'legend': "Leyenda: Categorías gramaticales",
259
  'arc_diagram': "Análisis sintáctico: Diagrama de arco",
260
- 'sentence': "Oración"
 
 
 
261
  },
262
  'en': {
263
  'title': "AIdeaText - Morphological and Syntactic Analysis",
@@ -267,7 +279,10 @@ def display_morphosyntax_analysis_interface(nlp_models, lang_code):
267
  'repeated_words': "Repeated words",
268
  'legend': "Legend: Grammatical categories",
269
  'arc_diagram': "Syntactic analysis: Arc diagram",
270
- 'sentence': "Sentence"
 
 
 
271
  },
272
  'fr': {
273
  'title': "AIdeaText - Analyse morphologique et syntaxique",
@@ -277,7 +292,10 @@ def display_morphosyntax_analysis_interface(nlp_models, lang_code):
277
  'repeated_words': "Mots répétés",
278
  'legend': "Légende : Catégories grammaticales",
279
  'arc_diagram': "Analyse syntaxique : Diagramme en arc",
280
- 'sentence': "Phrase"
 
 
 
281
  }
282
  }
283
 
@@ -285,21 +303,16 @@ def display_morphosyntax_analysis_interface(nlp_models, lang_code):
285
 
286
  input_key = f"morphosyntax_input_{lang_code}"
287
 
288
- # Inicializar la clave en session_state si no existe
289
  if input_key not in st.session_state:
290
  st.session_state[input_key] = ""
291
 
292
- # Función para actualizar el estado del input
293
- def update_input():
294
- st.session_state[input_key] = st.session_state[f"text_area_{lang_code}"]
295
-
296
  sentence_input = st.text_area(
297
  t['input_label'],
298
  height=150,
299
  placeholder=t['input_placeholder'],
300
  value=st.session_state[input_key],
301
  key=f"text_area_{lang_code}",
302
- on_change=update_input
303
  )
304
 
305
  if st.button(t['analyze_button'], key=f"analyze_button_{lang_code}"):
@@ -339,11 +352,11 @@ def display_morphosyntax_analysis_interface(nlp_models, lang_code):
339
  word_colors,
340
  arc_diagrams,
341
  ):
342
- st.success("Análisis guardado correctamente.")
343
  else:
344
- st.error("Hubo un problema al guardar el análisis. Por favor, inténtelo de nuevo.")
345
  else:
346
- st.warning("Por favor, ingrese un texto para analizar.")
347
 
348
  ###############################################################################################################
349
  def display_semantic_analysis_interface(nlp_models, lang_code):
@@ -351,93 +364,189 @@ def display_semantic_analysis_interface(nlp_models, lang_code):
351
  'es': {
352
  'title': "AIdeaText - Análisis semántico",
353
  'file_uploader': "Cargar archivo de texto",
 
354
  'analyze_button': "Analizar texto",
355
  'semantic_relations': "Relaciones Semánticas Relevantes",
 
 
 
356
  },
357
  'en': {
358
  'title': "AIdeaText - Semantic Analysis",
359
  'file_uploader': "Upload text file",
 
360
  'analyze_button': "Analyze text",
361
  'semantic_relations': "Relevant Semantic Relations",
 
 
 
362
  },
363
  'fr': {
364
  'title': "AIdeaText - Analyse sémantique",
365
  'file_uploader': "Télécharger le fichier texte",
 
366
  'analyze_button': "Analyser le texte",
367
  'semantic_relations': "Relations Sémantiques Pertinentes",
 
 
 
368
  }
369
  }
370
 
371
  t = translations[lang_code]
372
-
373
  st.header(t['title'])
374
 
 
 
 
 
 
375
  uploaded_file = st.file_uploader(t['file_uploader'], type=['txt'])
376
 
377
- if uploaded_file is not None:
378
- text_content = uploaded_file.getvalue().decode('utf-8')
 
 
 
 
 
379
 
380
- if st.button(t['analyze_button']):
381
- relations_graph = perform_semantic_analysis(text_content, nlp_models[lang_code], lang_code)
 
 
 
 
 
 
 
382
 
383
- with st.expander(t['semantic_relations'], expanded=True):
384
- st.pyplot(relations_graph)
385
 
386
- ##################################################################################################
 
 
 
 
 
387
 
 
 
 
 
 
 
 
388
  def display_discourse_analysis_interface(nlp_models, lang_code):
389
  translations = {
390
  'es': {
391
  'title': "AIdeaText - Análisis del discurso",
392
  'file_uploader1': "Cargar archivo de texto 1 (Patrón)",
393
  'file_uploader2': "Cargar archivo de texto 2 (Comparación)",
 
 
394
  'analyze_button': "Analizar textos",
395
  'comparison': "Comparación de Relaciones Semánticas",
 
 
 
396
  },
397
  'en': {
398
  'title': "AIdeaText - Discourse Analysis",
399
  'file_uploader1': "Upload text file 1 (Pattern)",
400
  'file_uploader2': "Upload text file 2 (Comparison)",
 
 
401
  'analyze_button': "Analyze texts",
402
  'comparison': "Comparison of Semantic Relations",
 
 
 
403
  },
404
  'fr': {
405
  'title': "AIdeaText - Analyse du discours",
406
  'file_uploader1': "Télécharger le fichier texte 1 (Modèle)",
407
  'file_uploader2': "Télécharger le fichier texte 2 (Comparaison)",
 
 
408
  'analyze_button': "Analyser les textes",
409
  'comparison': "Comparaison des Relations Sémantiques",
 
 
 
410
  }
411
  }
412
 
413
  t = translations[lang_code]
414
-
415
  st.header(t['title'])
416
 
 
 
 
 
 
 
417
  col1, col2 = st.columns(2)
418
 
419
  with col1:
420
  uploaded_file1 = st.file_uploader(t['file_uploader1'], type=['txt'])
 
 
 
 
 
 
421
 
422
  with col2:
423
  uploaded_file2 = st.file_uploader(t['file_uploader2'], type=['txt'])
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
424
 
425
- if uploaded_file1 is not None and uploaded_file2 is not None:
426
- text_content1 = uploaded_file1.getvalue().decode('utf-8')
427
- text_content2 = uploaded_file2.getvalue().decode('utf-8')
428
-
429
- if st.button(t['analyze_button']):
430
- graph1, graph2 = perform_discourse_analysis(text_content1, text_content2, nlp_models[lang_code], lang_code)
431
-
432
- st.subheader(t['comparison'])
433
-
434
- col1, col2 = st.columns(2)
435
-
436
- with col1:
437
- st.pyplot(graph1)
438
-
439
- with col2:
440
- st.pyplot(graph2)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
441
 
442
  ##################################################################################################
443
 
 
12
  #Importaciones locales
13
  #Importaciones locales de autenticación y base de datos
14
  from .auth import authenticate_user, register_user
15
+
16
+ from .database import (
17
+ get_student_data,
18
+ store_morphosyntax_result,
19
+ store_semantic_result,
20
+ store_discourse_analysis_result,
21
+ store_chat_history,
22
+ create_admin_user,
23
+ create_student_user
24
+ )
25
 
26
  #Importaciones locales de uiadmin
27
  from .admin_ui import admin_page
 
266
  'repeated_words': "Palabras repetidas",
267
  'legend': "Leyenda: Categorías gramaticales",
268
  'arc_diagram': "Análisis sintáctico: Diagrama de arco",
269
+ 'sentence': "Oración",
270
+ 'success_message': "Análisis guardado correctamente.",
271
+ 'error_message': "Hubo un problema al guardar el análisis. Por favor, inténtelo de nuevo.",
272
+ 'warning_message': "Por favor, ingrese un texto para analizar."
273
  },
274
  'en': {
275
  'title': "AIdeaText - Morphological and Syntactic Analysis",
 
279
  'repeated_words': "Repeated words",
280
  'legend': "Legend: Grammatical categories",
281
  'arc_diagram': "Syntactic analysis: Arc diagram",
282
+ 'sentence': "Sentence",
283
+ 'success_message': "Analysis saved successfully.",
284
+ 'error_message': "There was a problem saving the analysis. Please try again.",
285
+ 'warning_message': "Please enter a text to analyze."
286
  },
287
  'fr': {
288
  'title': "AIdeaText - Analyse morphologique et syntaxique",
 
292
  'repeated_words': "Mots répétés",
293
  'legend': "Légende : Catégories grammaticales",
294
  'arc_diagram': "Analyse syntaxique : Diagramme en arc",
295
+ 'sentence': "Phrase",
296
+ 'success_message': "Analyse enregistrée avec succès.",
297
+ 'error_message': "Un problème est survenu lors de l'enregistrement de l'analyse. Veuillez réessayer.",
298
+ 'warning_message': "Veuillez entrer un texte à analyser."
299
  }
300
  }
301
 
 
303
 
304
  input_key = f"morphosyntax_input_{lang_code}"
305
 
 
306
  if input_key not in st.session_state:
307
  st.session_state[input_key] = ""
308
 
 
 
 
 
309
  sentence_input = st.text_area(
310
  t['input_label'],
311
  height=150,
312
  placeholder=t['input_placeholder'],
313
  value=st.session_state[input_key],
314
  key=f"text_area_{lang_code}",
315
+ on_change=lambda: setattr(st.session_state, input_key, st.session_state[f"text_area_{lang_code}"])
316
  )
317
 
318
  if st.button(t['analyze_button'], key=f"analyze_button_{lang_code}"):
 
352
  word_colors,
353
  arc_diagrams,
354
  ):
355
+ st.success(t['success_message'])
356
  else:
357
+ st.error(t['error_message'])
358
  else:
359
+ st.warning(t['warning_message'])
360
 
361
  ###############################################################################################################
362
  def display_semantic_analysis_interface(nlp_models, lang_code):
 
364
  'es': {
365
  'title': "AIdeaText - Análisis semántico",
366
  'file_uploader': "Cargar archivo de texto",
367
+ 'input_label': "O ingrese el texto aquí:",
368
  'analyze_button': "Analizar texto",
369
  'semantic_relations': "Relaciones Semánticas Relevantes",
370
+ 'success_message': "Análisis semántico guardado correctamente.",
371
+ 'error_message': "Hubo un problema al guardar el análisis semántico. Por favor, inténtelo de nuevo.",
372
+ 'warning_message': "Por favor, ingrese un texto o cargue un archivo para analizar."
373
  },
374
  'en': {
375
  'title': "AIdeaText - Semantic Analysis",
376
  'file_uploader': "Upload text file",
377
+ 'input_label': "Or enter the text here:",
378
  'analyze_button': "Analyze text",
379
  'semantic_relations': "Relevant Semantic Relations",
380
+ 'success_message': "Semantic analysis saved successfully.",
381
+ 'error_message': "There was a problem saving the semantic analysis. Please try again.",
382
+ 'warning_message': "Please enter a text or upload a file to analyze."
383
  },
384
  'fr': {
385
  'title': "AIdeaText - Analyse sémantique",
386
  'file_uploader': "Télécharger le fichier texte",
387
+ 'input_label': "Ou entrez le texte ici :",
388
  'analyze_button': "Analyser le texte",
389
  'semantic_relations': "Relations Sémantiques Pertinentes",
390
+ 'success_message': "Analyse sémantique enregistrée avec succès.",
391
+ 'error_message': "Un problème est survenu lors de l'enregistrement de l'analyse sémantique. Veuillez réessayer.",
392
+ 'warning_message': "Veuillez entrer un texte ou télécharger un fichier à analyser."
393
  }
394
  }
395
 
396
  t = translations[lang_code]
 
397
  st.header(t['title'])
398
 
399
+ # Inicializar el estado de la sesión para el texto semántico
400
+ if 'semantic_text' not in st.session_state:
401
+ st.session_state.semantic_text = ""
402
+
403
+ # Opción para cargar archivo
404
  uploaded_file = st.file_uploader(t['file_uploader'], type=['txt'])
405
 
406
+ # Opción para ingresar texto directamente
407
+ text_input = st.text_area(
408
+ t['input_label'],
409
+ value=st.session_state.semantic_text,
410
+ height=300,
411
+ key="semantic_text_input"
412
+ )
413
 
414
+ if st.button(t['analyze_button']):
415
+ # Priorizar el archivo cargado sobre el texto ingresado
416
+ if uploaded_file is not None:
417
+ text_content = uploaded_file.getvalue().decode('utf-8')
418
+ elif text_input:
419
+ text_content = text_input
420
+ else:
421
+ st.warning(t['warning_message'])
422
+ return
423
 
424
+ # Guardar el texto en el estado de la sesión
425
+ st.session_state.semantic_text = text_content
426
 
427
+ # Realizar el análisis
428
+ relations_graph = perform_semantic_analysis(text_content, nlp_models[lang_code], lang_code)
429
+
430
+ # Mostrar el gráfico de relaciones semánticas
431
+ with st.expander(t['semantic_relations'], expanded=True):
432
+ st.pyplot(relations_graph)
433
 
434
+ # Guardar el resultado del análisis
435
+ if store_semantic_result(st.session_state.username, text_content, relations_graph):
436
+ st.success(t['success_message'])
437
+ else:
438
+ st.error(t['error_message'])
439
+
440
+ ##################################################################################################
441
  def display_discourse_analysis_interface(nlp_models, lang_code):
442
  translations = {
443
  'es': {
444
  'title': "AIdeaText - Análisis del discurso",
445
  'file_uploader1': "Cargar archivo de texto 1 (Patrón)",
446
  'file_uploader2': "Cargar archivo de texto 2 (Comparación)",
447
+ 'input_label1': "O ingrese el texto 1 aquí:",
448
+ 'input_label2': "O ingrese el texto 2 aquí:",
449
  'analyze_button': "Analizar textos",
450
  'comparison': "Comparación de Relaciones Semánticas",
451
+ 'success_message': "Análisis del discurso guardado correctamente.",
452
+ 'error_message': "Hubo un problema al guardar el análisis del discurso. Por favor, inténtelo de nuevo.",
453
+ 'warning_message': "Por favor, ingrese ambos textos o cargue ambos archivos para analizar."
454
  },
455
  'en': {
456
  'title': "AIdeaText - Discourse Analysis",
457
  'file_uploader1': "Upload text file 1 (Pattern)",
458
  'file_uploader2': "Upload text file 2 (Comparison)",
459
+ 'input_label1': "Or enter text 1 here:",
460
+ 'input_label2': "Or enter text 2 here:",
461
  'analyze_button': "Analyze texts",
462
  'comparison': "Comparison of Semantic Relations",
463
+ 'success_message': "Discourse analysis saved successfully.",
464
+ 'error_message': "There was a problem saving the discourse analysis. Please try again.",
465
+ 'warning_message': "Please enter both texts or upload both files to analyze."
466
  },
467
  'fr': {
468
  'title': "AIdeaText - Analyse du discours",
469
  'file_uploader1': "Télécharger le fichier texte 1 (Modèle)",
470
  'file_uploader2': "Télécharger le fichier texte 2 (Comparaison)",
471
+ 'input_label1': "Ou entrez le texte 1 ici :",
472
+ 'input_label2': "Ou entrez le texte 2 ici :",
473
  'analyze_button': "Analyser les textes",
474
  'comparison': "Comparaison des Relations Sémantiques",
475
+ 'success_message': "Analyse du discours enregistrée avec succès.",
476
+ 'error_message': "Un problème est survenu lors de l'enregistrement de l'analyse du discours. Veuillez réessayer.",
477
+ 'warning_message': "Veuillez entrer les deux textes ou télécharger les deux fichiers à analyser."
478
  }
479
  }
480
 
481
  t = translations[lang_code]
 
482
  st.header(t['title'])
483
 
484
+ # Inicializar el estado de la sesión para los textos del discurso
485
+ if 'discourse_text1' not in st.session_state:
486
+ st.session_state.discourse_text1 = ""
487
+ if 'discourse_text2' not in st.session_state:
488
+ st.session_state.discourse_text2 = ""
489
+
490
  col1, col2 = st.columns(2)
491
 
492
  with col1:
493
  uploaded_file1 = st.file_uploader(t['file_uploader1'], type=['txt'])
494
+ text_input1 = st.text_area(
495
+ t['input_label1'],
496
+ value=st.session_state.discourse_text1,
497
+ height=300,
498
+ key="discourse_text_input1"
499
+ )
500
 
501
  with col2:
502
  uploaded_file2 = st.file_uploader(t['file_uploader2'], type=['txt'])
503
+ text_input2 = st.text_area(
504
+ t['input_label2'],
505
+ value=st.session_state.discourse_text2,
506
+ height=300,
507
+ key="discourse_text_input2"
508
+ )
509
+
510
+ if st.button(t['analyze_button']):
511
+ # Priorizar los archivos cargados sobre el texto ingresado
512
+ if uploaded_file1 is not None:
513
+ text_content1 = uploaded_file1.getvalue().decode('utf-8')
514
+ elif text_input1:
515
+ text_content1 = text_input1
516
+ else:
517
+ text_content1 = None
518
 
519
+ if uploaded_file2 is not None:
520
+ text_content2 = uploaded_file2.getvalue().decode('utf-8')
521
+ elif text_input2:
522
+ text_content2 = text_input2
523
+ else:
524
+ text_content2 = None
525
+
526
+ if text_content1 is None or text_content2 is None:
527
+ st.warning(t['warning_message'])
528
+ return
529
+
530
+ # Guardar los textos en el estado de la sesión
531
+ st.session_state.discourse_text1 = text_content1
532
+ st.session_state.discourse_text2 = text_content2
533
+
534
+ # Realizar el análisis
535
+ graph1, graph2 = perform_discourse_analysis(text_content1, text_content2, nlp_models[lang_code], lang_code)
536
+
537
+ # Mostrar los gráficos de comparación
538
+ st.subheader(t['comparison'])
539
+ col1, col2 = st.columns(2)
540
+ with col1:
541
+ st.pyplot(graph1)
542
+ with col2:
543
+ st.pyplot(graph2)
544
+
545
+ # Guardar el resultado del análisis
546
+ if store_discourse_analysis_result(st.session_state.username, text_content1 + "\n\n" + text_content2, graph1, graph2):
547
+ st.success(t['success_message'])
548
+ else:
549
+ st.error(t['error_message'])
550
 
551
  ##################################################################################################
552