AIdeaText commited on
Commit
7d60ac9
·
verified ·
2 Parent(s): 15cb5eb 9c2e892

Merge branch #AIdeaText/test' into 'AIdeaText/test2'

Browse files
Files changed (1) hide show
  1. modules/ui/ui.py +149 -32
modules/ui/ui.py CHANGED
@@ -405,7 +405,10 @@ def display_morphosyntax_analysis_interface(nlp_models, lang_code):
405
  'root': "Raíz",
406
  'subjects': "Sujetos",
407
  'objects': "Objetos",
408
- 'verbs': "Verbos"
 
 
 
409
  },
410
  'en': {
411
  'title': "AIdeaText - Morphological and Syntactic Analysis",
@@ -436,7 +439,10 @@ def display_morphosyntax_analysis_interface(nlp_models, lang_code):
436
  'root': "Root",
437
  'subjects': "Subjects",
438
  'objects': "Objects",
439
- 'verbs': "Verbs"
 
 
 
440
  },
441
  'fr': {
442
  'title': "AIdeaText - Analyse morphologique et syntaxique",
@@ -467,7 +473,10 @@ def display_morphosyntax_analysis_interface(nlp_models, lang_code):
467
  'root': "Racine",
468
  'subjects': "Sujets",
469
  'objects': "Objets",
470
- 'verbs': "Verbes"
 
 
 
471
  }
472
  }
473
 
@@ -523,45 +532,153 @@ def display_morphosyntax_analysis_interface(nlp_models, lang_code):
523
  st.markdown(sentence_str)
524
 
525
  # Mostrar análisis de categorías gramaticales # Mostrar análisis morfológico
526
- col1, col2 =st.columns(2)
 
 
527
  with col1:
528
  with st.expander(t['pos_analysis'], expanded=True):
529
  pos_df = pd.DataFrame(advanced_analysis['pos_analysis'])
 
 
 
 
 
 
 
 
 
 
 
 
 
530
  st.dataframe(pos_df)
 
531
  with col2:
532
  with st.expander(t['morphological_analysis'], expanded=True):
533
  morph_df = pd.DataFrame(advanced_analysis['morphological_analysis'])
534
- st.dataframe(morph_df)
535
-
536
- # Mostrar diagramas de arco (código existente)
537
- with st.expander(t['arc_diagram'], expanded=True):
538
- sentences = list(doc.sents)
539
- arc_diagrams = []
540
- for i, sent in enumerate(sentences):
541
- st.subheader(f"{t['sentence']} {i+1}")
542
- html = displacy.render(sent, style="dep", options={"distance": 100})
543
- html = html.replace('height="375"', 'height="200"')
544
- html = re.sub(r'<svg[^>]*>', lambda m: m.group(0).replace('height="450"', 'height="300"'), html)
545
- html = re.sub(r'<g [^>]*transform="translate\((\d+),(\d+)\)"', lambda m: f'<g transform="translate({m.group(1)},50)"', html)
546
- st.write(html, unsafe_allow_html=True)
547
- arc_diagrams.append(html)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
548
 
549
- # Guardar resultados
550
- if store_morphosyntax_result(
551
- st.session_state.username,
552
- current_input,
553
- word_colors,
554
- advanced_analysis['arc_diagram'],
555
- advanced_analysis['pos_analysis'],
556
- advanced_analysis['morphological_analysis'],
557
- advanced_analysis['sentence_structure']
558
 
559
- ):
560
- st.success(t['success_message'])
561
- else:
562
- st.error(t['error_message'])
563
  else:
564
- st.warning(t['warning_message'])
 
 
565
 
566
  ###############################################################################################################
567
  def display_semantic_analysis_interface(nlp_models, lang_code):
 
405
  'root': "Raíz",
406
  'subjects': "Sujetos",
407
  'objects': "Objetos",
408
+ 'verbs': "Verbos",
409
+ 'grammatical_category': "Categoría gramatical",
410
+ 'dependency': "Dependencia",
411
+ 'morphology': "Morfología"
412
  },
413
  'en': {
414
  'title': "AIdeaText - Morphological and Syntactic Analysis",
 
439
  'root': "Root",
440
  'subjects': "Subjects",
441
  'objects': "Objects",
442
+ 'verbs': "Verbs",
443
+ 'grammatical_category': "Grammatical category",
444
+ 'dependency': "Dependency",
445
+ 'morphology': "Morphology"
446
  },
447
  'fr': {
448
  'title': "AIdeaText - Analyse morphologique et syntaxique",
 
473
  'root': "Racine",
474
  'subjects': "Sujets",
475
  'objects': "Objets",
476
+ 'verbs': "Verbes",
477
+ 'grammatical_category': "Catégorie grammaticale",
478
+ 'dependency': "Dépendance",
479
+ 'morphology': "Morphologie"
480
  }
481
  }
482
 
 
532
  st.markdown(sentence_str)
533
 
534
  # Mostrar análisis de categorías gramaticales # Mostrar análisis morfológico
535
+ # Mostrar análisis de categorías gramaticales # Mostrar análisis morfológico
536
+ col1, col2 = st.columns(2)
537
+
538
  with col1:
539
  with st.expander(t['pos_analysis'], expanded=True):
540
  pos_df = pd.DataFrame(advanced_analysis['pos_analysis'])
541
+
542
+ # Traducir las etiquetas POS a sus nombres en el idioma seleccionado
543
+ pos_df['pos'] = pos_df['pos'].map(lambda x: POS_TRANSLATIONS[lang_code].get(x, x))
544
+
545
+ # Renombrar las columnas para mayor claridad
546
+ pos_df = pos_df.rename(columns={
547
+ 'pos': t['grammatical_category'],
548
+ 'count': t['count'],
549
+ 'percentage': t['percentage'],
550
+ 'examples': t['examples']
551
+ })
552
+
553
+ # Mostrar el dataframe
554
  st.dataframe(pos_df)
555
+
556
  with col2:
557
  with st.expander(t['morphological_analysis'], expanded=True):
558
  morph_df = pd.DataFrame(advanced_analysis['morphological_analysis'])
559
+
560
+ # Definir el mapeo de columnas
561
+ column_mapping = {
562
+ 'text': t['word'],
563
+ 'lemma': t['lemma'],
564
+ 'pos': t['grammatical_category'],
565
+ 'dep': t['dependency'],
566
+ 'morph': t['morphology']
567
+ }
568
+
569
+ # Renombrar las columnas existentes
570
+ morph_df = morph_df.rename(columns={col: new_name for col, new_name in column_mapping.items() if col in morph_df.columns})
571
+
572
+ # Traducir las categorías gramaticales
573
+ morph_df[t['grammatical_category']] = morph_df[t['grammatical_category']].map(lambda x: POS_TRANSLATIONS[lang_code].get(x, x))
574
+
575
+ # Traducir las dependencias
576
+ dep_translations = {
577
+ 'es': {
578
+ 'ROOT': 'RAÍZ', 'nsubj': 'sujeto nominal', 'obj': 'objeto', 'iobj': 'objeto indirecto',
579
+ 'csubj': 'sujeto clausal', 'ccomp': 'complemento clausal', 'xcomp': 'complemento clausal abierto',
580
+ 'obl': 'oblicuo', 'vocative': 'vocativo', 'expl': 'expletivo', 'dislocated': 'dislocado',
581
+ 'advcl': 'cláusula adverbial', 'advmod': 'modificador adverbial', 'discourse': 'discurso',
582
+ 'aux': 'auxiliar', 'cop': 'cópula', 'mark': 'marcador', 'nmod': 'modificador nominal',
583
+ 'appos': 'aposición', 'nummod': 'modificador numeral', 'acl': 'cláusula adjetiva',
584
+ 'amod': 'modificador adjetival', 'det': 'determinante', 'clf': 'clasificador',
585
+ 'case': 'caso', 'conj': 'conjunción', 'cc': 'coordinante', 'fixed': 'fijo',
586
+ 'flat': 'plano', 'compound': 'compuesto', 'list': 'lista', 'parataxis': 'parataxis',
587
+ 'orphan': 'huérfano', 'goeswith': 'va con', 'reparandum': 'reparación', 'punct': 'puntuación'
588
+ },
589
+ 'en': {
590
+ 'ROOT': 'ROOT', 'nsubj': 'nominal subject', 'obj': 'object',
591
+ 'iobj': 'indirect object', 'csubj': 'clausal subject', 'ccomp': 'clausal complement', 'xcomp': 'open clausal complement',
592
+ 'obl': 'oblique', 'vocative': 'vocative', 'expl': 'expletive', 'dislocated': 'dislocated', 'advcl': 'adverbial clause modifier',
593
+ 'advmod': 'adverbial modifier', 'discourse': 'discourse element', 'aux': 'auxiliary', 'cop': 'copula', 'mark': 'marker',
594
+ 'nmod': 'nominal modifier', 'appos': 'appositional modifier', 'nummod': 'numeric modifier', 'acl': 'clausal modifier of noun',
595
+ 'amod': 'adjectival modifier', 'det': 'determiner', 'clf': 'classifier', 'case': 'case marking',
596
+ 'conj': 'conjunct', 'cc': 'coordinating conjunction', 'fixed': 'fixed multiword expression',
597
+ 'flat': 'flat multiword expression', 'compound': 'compound', 'list': 'list', 'parataxis': 'parataxis', 'orphan': 'orphan',
598
+ 'goeswith': 'goes with', 'reparandum': 'reparandum', 'punct': 'punctuation'
599
+ },
600
+ 'fr': {
601
+ 'ROOT': 'RACINE', 'nsubj': 'sujet nominal', 'obj': 'objet', 'iobj': 'objet indirect',
602
+ 'csubj': 'sujet phrastique', 'ccomp': 'complément phrastique', 'xcomp': 'complément phrastique ouvert', 'obl': 'oblique',
603
+ 'vocative': 'vocatif', 'expl': 'explétif', 'dislocated': 'disloqué', 'advcl': 'clause adverbiale', 'advmod': 'modifieur adverbial',
604
+ 'discourse': 'élément de discours', 'aux': 'auxiliaire', 'cop': 'copule', 'mark': 'marqueur', 'nmod': 'modifieur nominal',
605
+ 'appos': 'apposition', 'nummod': 'modifieur numéral', 'acl': 'clause relative', 'amod': 'modifieur adjectival', 'det': 'déterminant',
606
+ 'clf': 'classificateur', 'case': 'marqueur de cas', 'conj': 'conjonction', 'cc': 'coordination', 'fixed': 'expression figée',
607
+ 'flat': 'construction plate', 'compound': 'composé', 'list': 'liste', 'parataxis': 'parataxe', 'orphan': 'orphelin',
608
+ 'goeswith': 'va avec', 'reparandum': 'réparation', 'punct': 'ponctuation'
609
+ }
610
+ }
611
+ morph_df[t['dependency']] = morph_df[t['dependency']].map(lambda x: dep_translations[lang_code].get(x, x))
612
+
613
+ # Traducir la morfología
614
+ def translate_morph(morph_string, lang_code):
615
+ morph_translations = {
616
+ 'es': {
617
+ 'Gender': 'Género', 'Number': 'Número', 'Case': 'Caso', 'Definite': 'Definido',
618
+ 'PronType': 'Tipo de Pronombre', 'Person': 'Persona', 'Mood': 'Modo',
619
+ 'Tense': 'Tiempo', 'VerbForm': 'Forma Verbal', 'Voice': 'Voz',
620
+ 'Fem': 'Femenino', 'Masc': 'Masculino', 'Sing': 'Singular', 'Plur': 'Plural',
621
+ 'Ind': 'Indicativo', 'Sub': 'Subjuntivo', 'Imp': 'Imperativo', 'Inf': 'Infinitivo',
622
+ 'Part': 'Participio', 'Ger': 'Gerundio', 'Pres': 'Presente', 'Past': 'Pasado',
623
+ 'Fut': 'Futuro', 'Perf': 'Perfecto', 'Imp': 'Imperfecto'
624
+ },
625
+ 'en': {
626
+ 'Gender': 'Gender', 'Number': 'Number', 'Case': 'Case', 'Definite': 'Definite', 'PronType': 'Pronoun Type', 'Person': 'Person',
627
+ 'Mood': 'Mood', 'Tense': 'Tense', 'VerbForm': 'Verb Form', 'Voice': 'Voice',
628
+ 'Fem': 'Feminine', 'Masc': 'Masculine', 'Sing': 'Singular', 'Plur': 'Plural', 'Ind': 'Indicative',
629
+ 'Sub': 'Subjunctive', 'Imp': 'Imperative', 'Inf': 'Infinitive', 'Part': 'Participle',
630
+ 'Ger': 'Gerund', 'Pres': 'Present', 'Past': 'Past', 'Fut': 'Future', 'Perf': 'Perfect', 'Imp': 'Imperfect'
631
+ },
632
+ 'fr': {
633
+ 'Gender': 'Genre', 'Number': 'Nombre', 'Case': 'Cas', 'Definite': 'Défini', 'PronType': 'Type de Pronom',
634
+ 'Person': 'Personne', 'Mood': 'Mode', 'Tense': 'Temps', 'VerbForm': 'Forme Verbale', 'Voice': 'Voix',
635
+ 'Fem': 'Féminin', 'Masc': 'Masculin', 'Sing': 'Singulier', 'Plur': 'Pluriel', 'Ind': 'Indicatif',
636
+ 'Sub': 'Subjonctif', 'Imp': 'Impératif', 'Inf': 'Infinitif', 'Part': 'Participe',
637
+ 'Ger': 'Gérondif', 'Pres': 'Présent', 'Past': 'Passé', 'Fut': 'Futur', 'Perf': 'Parfait', 'Imp': 'Imparfait'
638
+ }
639
+ }
640
+ for key, value in morph_translations[lang_code].items():
641
+ morph_string = morph_string.replace(key, value)
642
+ return morph_string
643
+
644
+ morph_df[t['morphology']] = morph_df[t['morphology']].apply(lambda x: translate_morph(x, lang_code))
645
+
646
+ # Seleccionar y ordenar las columnas a mostrar
647
+ columns_to_display = [t['word'], t['lemma'], t['grammatical_category'], t['dependency'], t['morphology']]
648
+ columns_to_display = [col for col in columns_to_display if col in morph_df.columns]
649
+
650
+ # Mostrar el DataFrame
651
+ st.dataframe(morph_df[columns_to_display])
652
+
653
+ # Mostrar diagramas de arco (código existente)
654
+ with st.expander(t['arc_diagram'], expanded=True):
655
+ sentences = list(doc.sents)
656
+ arc_diagrams = []
657
+ for i, sent in enumerate(sentences):
658
+ st.subheader(f"{t['sentence']} {i+1}")
659
+ html = displacy.render(sent, style="dep", options={"distance": 100})
660
+ html = html.replace('height="375"', 'height="200"')
661
+ html = re.sub(r'<svg[^>]*>', lambda m: m.group(0).replace('height="450"', 'height="300"'), html)
662
+ html = re.sub(r'<g [^>]*transform="translate\((\d+),(\d+)\)"', lambda m: f'<g transform="translate({m.group(1)},50)"', html)
663
+ st.write(html, unsafe_allow_html=True)
664
+ arc_diagrams.append(html)
665
 
666
+ # Guardar resultados
667
+ if store_morphosyntax_result(
668
+ st.session_state.username,
669
+ current_input,
670
+ word_colors,
671
+ advanced_analysis['arc_diagram'],
672
+ advanced_analysis['pos_analysis'],
673
+ advanced_analysis['morphological_analysis'],
674
+ advanced_analysis['sentence_structure']
675
 
676
+ ):
677
+ st.success(t['success_message'])
 
 
678
  else:
679
+ st.error(t['error_message'])
680
+ else:
681
+ st.warning(t['warning_message'])
682
 
683
  ###############################################################################################################
684
  def display_semantic_analysis_interface(nlp_models, lang_code):