AIdeaText commited on
Commit
78ac4ef
1 Parent(s): a6b40c5

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +102 -5
app.py CHANGED
@@ -8,11 +8,24 @@ import spacy
8
  from spacy import displacy
9
  import re
10
 
11
- from modules.auth import register_user, authenticate_user
 
 
 
 
 
 
 
12
  from modules.morpho_analysis import get_repeated_words_colors, highlight_repeated_words, POS_COLORS, POS_TRANSLATIONS
13
  from modules.syntax_analysis import visualize_syntax
14
 
15
- # ... (resto de tus importaciones y configuraciones)
 
 
 
 
 
 
16
 
17
  def login_page():
18
  st.title("Iniciar Sesión")
@@ -23,6 +36,7 @@ def login_page():
23
  st.success(f"Bienvenido, {username}!")
24
  st.session_state.logged_in = True
25
  st.session_state.username = username
 
26
  st.experimental_rerun()
27
  else:
28
  st.error("Usuario o contraseña incorrectos")
@@ -39,8 +53,91 @@ def register_page():
39
  st.error("El usuario ya existe")
40
 
41
  def main_app():
42
- # Aquí va tu código principal de la aplicación
43
- # ... (el resto de tu código actual en app.py)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
44
 
45
  def main():
46
  if 'logged_in' not in st.session_state:
@@ -60,4 +157,4 @@ def main():
60
  main_app()
61
 
62
  if __name__ == "__main__":
63
- main()
 
8
  from spacy import displacy
9
  import re
10
 
11
+ # Configure the page to use the full width
12
+ st.set_page_config(
13
+ page_title="AIdeaText",
14
+ layout="wide",
15
+ page_icon="random"
16
+ )
17
+
18
+ from modules.auth import register_user, authenticate_user, get_user_role
19
  from modules.morpho_analysis import get_repeated_words_colors, highlight_repeated_words, POS_COLORS, POS_TRANSLATIONS
20
  from modules.syntax_analysis import visualize_syntax
21
 
22
+ @st.cache_resource
23
+ def load_spacy_models():
24
+ return {
25
+ 'es': spacy.load("es_core_news_lg"),
26
+ 'en': spacy.load("en_core_web_lg"),
27
+ 'fr': spacy.load("fr_core_news_lg")
28
+ }
29
 
30
  def login_page():
31
  st.title("Iniciar Sesión")
 
36
  st.success(f"Bienvenido, {username}!")
37
  st.session_state.logged_in = True
38
  st.session_state.username = username
39
+ st.session_state.role = get_user_role(username)
40
  st.experimental_rerun()
41
  else:
42
  st.error("Usuario o contraseña incorrectos")
 
53
  st.error("El usuario ya existe")
54
 
55
  def main_app():
56
+ # Load spaCy models
57
+ nlp_models = load_spacy_models()
58
+
59
+ # Language selection
60
+ languages = {
61
+ 'Español': 'es',
62
+ 'English': 'en',
63
+ 'Français': 'fr'
64
+ }
65
+ selected_lang = st.sidebar.selectbox("Select Language / Seleccione el idioma / Choisissez la langue", list(languages.keys()))
66
+ lang_code = languages[selected_lang]
67
+
68
+ # Translations
69
+ translations = {
70
+ 'es': {
71
+ 'title': "AIdeaText - Análisis morfológico y sintáctico",
72
+ 'input_label': "Ingrese un texto para analizar (máx. 5,000 palabras):",
73
+ 'input_placeholder': "El objetivo de esta aplicación es que mejore sus habilidades de redacción...",
74
+ 'analyze_button': "Analizar texto",
75
+ 'repeated_words': "Palabras repetidas",
76
+ 'legend': "Leyenda: Categorías gramaticales",
77
+ 'arc_diagram': "Análisis sintáctico: Diagrama de arco",
78
+ 'network_diagram': "Análisis sintáctico: Diagrama de red",
79
+ 'sentence': "Oración"
80
+ },
81
+ 'en': {
82
+ # ... (mantén las traducciones en inglés)
83
+ },
84
+ 'fr': {
85
+ # ... (mantén las traducciones en francés)
86
+ }
87
+ }
88
+
89
+ # Use translations
90
+ t = translations[lang_code]
91
+
92
+ st.markdown(f"### {t['title']}")
93
+
94
+ if st.session_state.role == "Estudiante":
95
+ # Código para la interfaz del estudiante
96
+ if 'input_text' not in st.session_state:
97
+ st.session_state.input_text = ""
98
+
99
+ sentence_input = st.text_area(t['input_label'], height=150, placeholder=t['input_placeholder'], value=st.session_state.input_text)
100
+ st.session_state.input_text = sentence_input
101
+
102
+ if st.button(t['analyze_button']):
103
+ if sentence_input:
104
+ doc = nlp_models[lang_code](sentence_input)
105
+
106
+ # Highlighted Repeated Words
107
+ with st.expander(t['repeated_words'], expanded=True):
108
+ word_colors = get_repeated_words_colors(doc)
109
+ highlighted_text = highlight_repeated_words(doc, word_colors)
110
+ st.markdown(highlighted_text, unsafe_allow_html=True)
111
+
112
+ # Legend for grammatical categories
113
+ st.markdown(f"##### {t['legend']}")
114
+ legend_html = "<div style='display: flex; flex-wrap: wrap;'>"
115
+ for pos, color in POS_COLORS.items():
116
+ if pos in POS_TRANSLATIONS:
117
+ legend_html += f"<div style='margin-right: 10px;'><span style='background-color: {color}; padding: 2px 5px;'>{POS_TRANSLATIONS[pos]}</span></div>"
118
+ legend_html += "</div>"
119
+ st.markdown(legend_html, unsafe_allow_html=True)
120
+
121
+ # Arc Diagram
122
+ with st.expander(t['arc_diagram'], expanded=True):
123
+ sentences = list(doc.sents)
124
+ for i, sent in enumerate(sentences):
125
+ st.subheader(f"{t['sentence']} {i+1}")
126
+ html = displacy.render(sent, style="dep", options={"distance": 100})
127
+ html = html.replace('height="375"', 'height="200"')
128
+ html = re.sub(r'<svg[^>]*>', lambda m: m.group(0).replace('height="450"', 'height="300"'), html)
129
+ html = re.sub(r'<g [^>]*transform="translate\((\d+),(\d+)\)"', lambda m: f'<g transform="translate({m.group(1)},50)"', html)
130
+ st.write(html, unsafe_allow_html=True)
131
+
132
+ # Network graph
133
+ with st.expander(t['network_diagram'], expanded=True):
134
+ fig = visualize_syntax(sentence_input, nlp_models[lang_code], lang_code)
135
+ st.pyplot(fig)
136
+
137
+ elif st.session_state.role == "Profesor":
138
+ # Código para la interfaz del profesor
139
+ st.write("Bienvenido, profesor. Aquí podrás ver el progreso de tus estudiantes.")
140
+ # Añade aquí la lógica para mostrar el progreso de los estudiantes
141
 
142
  def main():
143
  if 'logged_in' not in st.session_state:
 
157
  main_app()
158
 
159
  if __name__ == "__main__":
160
+ main()