Horacio Perez commited on
Commit
5852f36
·
verified ·
1 Parent(s): 51e5192

Upload 11 files

Browse files
README.md CHANGED
@@ -1 +1,26 @@
1
- # Archivo de ejemplo para editor literario AI
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # ✍️ Editor Literario AI
2
+
3
+ **Editor Literario AI** es una herramienta avanzada de análisis de texto para escritores, editores y creativos. Utiliza modelos de lenguaje y análisis semántico para ofrecer una revisión completa de estilo, tono, comparación con autores y sugerencias editoriales.
4
+
5
+ ## 🚀 Características principales
6
+
7
+ - 🧠 **Análisis técnico**: longitud media de oración, complejidad, puntuación y ritmo narrativo.
8
+ - 🎭 **Detección de tono**: identifica emociones, atmósfera narrativa y coherencia emocional.
9
+ - 🧬 **Comparación con autores**: estima semejanzas estilísticas con autores literarios conocidos.
10
+ - 🗂️ **Interfaz gráfica moderna**: con pestañas, scroll y modo responsive.
11
+ - 🪵 **Logs en vivo**: para seguimiento técnico de los procesos internos.
12
+
13
+ ---
14
+
15
+ ## 📸 Capturas
16
+
17
+ ### Pantalla principal
18
+
19
+ ![editor literario ai ui](https://your-image-url.com/editor-main.png)
20
+
21
+ ### Comparación con autores
22
+
23
+ ![comparativa autores](https://your-image-url.com/comparacion-autores.png)
24
+
25
+ > *(Puedes reemplazar las URLs por capturas reales si las tienes disponibles.)*
26
+
app.py CHANGED
@@ -1 +1,49 @@
1
- # Archivo de ejemplo para editor literario AI
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ import gradio as gr
3
+ from editor_literario_maestro import analisis_completo
4
+ from editor_literario import analisis_tecnico
5
+
6
+ logs = []
7
+
8
+ def log(msg):
9
+ logs.append(msg)
10
+ print(msg)
11
+
12
+ def ejecutar_analisis(texto):
13
+ log("Ejecutando análisis completo...")
14
+ resultado = analisis_completo(texto)
15
+ log(f"Resultado: {resultado}")
16
+ return resultado
17
+
18
+ def ejecutar_tecnico(texto):
19
+ log("Ejecutando análisis técnico...")
20
+ resultado = analisis_tecnico(texto)
21
+ log(f"Resultado: {resultado}")
22
+ return resultado
23
+
24
+ def ver_logs():
25
+ return "\n".join(logs[-30:]) # últimos 30 registros
26
+
27
+ with gr.Blocks(title="Editor Literario AI") as interfaz:
28
+ with gr.Row():
29
+ gr.Markdown("## 🧠 Editor Literario AI · Análisis de estilo, tono y comparación")
30
+
31
+ with gr.Tabs():
32
+ with gr.Tab("Análisis completo"):
33
+ texto_input = gr.Textbox(label="Texto a analizar", lines=15, placeholder="Pega aquí tu texto...", show_copy_button=True)
34
+ boton_analisis = gr.Button("Ejecutar análisis completo")
35
+ salida_analisis = gr.Textbox(label="Resultado del análisis completo")
36
+ boton_analisis.click(fn=ejecutar_analisis, inputs=texto_input, outputs=salida_analisis)
37
+
38
+ with gr.Tab("Análisis técnico"):
39
+ texto_tecnico = gr.Textbox(label="Texto técnico", lines=10, placeholder="Texto para análisis técnico")
40
+ boton_tecnico = gr.Button("Ejecutar análisis técnico")
41
+ salida_tecnico = gr.Textbox(label="Resultado del análisis técnico")
42
+ boton_tecnico.click(fn=ejecutar_tecnico, inputs=texto_tecnico, outputs=salida_tecnico)
43
+
44
+ with gr.Tab("Logs en vivo"):
45
+ boton_logs = gr.Button("Actualizar Logs")
46
+ caja_logs = gr.Textbox(label="Últimos logs", lines=15, interactive=False)
47
+ boton_logs.click(fn=ver_logs, outputs=caja_logs)
48
+
49
+ interfaz.launch()
editor_literario.py CHANGED
@@ -1 +1,19 @@
1
- # Archivo de ejemplo para editor literario AI
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # editor_literario.py
2
+
3
+ def analisis_tecnico(texto):
4
+ """
5
+ Análisis técnico básico del texto. Devuelve resultados en Markdown.
6
+ """
7
+ num_palabras = len(texto.split())
8
+ num_caracteres = len(texto)
9
+ num_lineas = texto.count("\n") + 1
10
+
11
+ return f"""
12
+ ## 🛠️ Análisis Técnico
13
+
14
+ - Palabras: **{num_palabras}**
15
+ - Caracteres: **{num_caracteres}**
16
+ - Líneas: **{num_lineas}**
17
+
18
+ > Un análisis técnico inicial para comprender la extensión del texto.
19
+ """
editor_literario_autores.py CHANGED
@@ -1 +1,20 @@
1
- # Archivo de ejemplo para editor literario AI
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # editor_literario_autores.py
2
+
3
+ def comparar_estilo_autores(texto):
4
+ """
5
+ Simula una comparación de estilo con autores literarios conocidos.
6
+ """
7
+ resultado = """
8
+ ## 📚 Comparación con autores literarios
9
+
10
+ Se han detectado similitudes estilísticas generales con los siguientes autores:
11
+
12
+ - **Julio Cortázar**: uso experimental de la estructura y exploración psicológica.
13
+ - **Gabriel García Márquez**: tendencia a lo mágico con naturalidad narrativa.
14
+ - **Clarice Lispector**: introspección filosófica y sensibilidad emocional.
15
+ - **Juan Carlos Onetti**: tono sombrío, existencial y distante.
16
+ - **Roberto Bolaño**: narración fragmentaria con tensión y ironía implícita.
17
+
18
+ > _Este resultado es simulado. Para análisis real, integrar embeddings y distancias de similitud semántica._
19
+ """
20
+ return resultado
editor_literario_avanzado.py CHANGED
@@ -1 +1,35 @@
1
- # Archivo de ejemplo para editor literario AI
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import nltk
2
+ nltk.download('punkt')
3
+
4
+ from sentence_transformers import SentenceTransformer, util
5
+ from textblob import TextBlob
6
+
7
+ modelo = SentenceTransformer('all-MiniLM-L6-v2')
8
+
9
+ autores_referencia = {
10
+ "Gabriel García Márquez": "La soledad es la forma de nuestra memoria, y el olvido es la forma de nuestra paz.",
11
+ "Mario Vargas Llosa": "La literatura es fuego, es pasión, es crítica y vida.",
12
+ "Julio Cortázar": "Andábamos sin buscarnos, pero sabiendo que andábamos para encontrarnos."
13
+ }
14
+
15
+ def analizar_tono_y_autores(texto_usuario):
16
+ resultado = []
17
+
18
+ # Análisis de tono
19
+ blob = TextBlob(texto_usuario)
20
+ polaridad = blob.sentiment.polarity
21
+ tono = "Positivo" if polaridad > 0.1 else "Negativo" if polaridad < -0.1 else "Neutral"
22
+ resultado.append(f"**Tono general del texto:** {tono} (polaridad: {polaridad:.2f})\n")
23
+
24
+ # Comparación semántica
25
+ emb_texto = modelo.encode(texto_usuario, convert_to_tensor=True)
26
+ similitudes = {}
27
+ for autor, ejemplo in autores_referencia.items():
28
+ emb_autor = modelo.encode(ejemplo, convert_to_tensor=True)
29
+ similitud = util.cos_sim(emb_texto, emb_autor).item()
30
+ similitudes[autor] = similitud
31
+
32
+ autor_mas_similar = max(similitudes, key=similitudes.get)
33
+ resultado.append(f"**Estilo más similar al de:** {autor_mas_similar} (similaridad: {similitudes[autor_mas_similar]:.2f})")
34
+
35
+ return "\n".join(resultado)
editor_literario_embeddings.py CHANGED
@@ -1 +1,33 @@
1
- # Archivo de ejemplo para editor literario AI
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from sentence_transformers import SentenceTransformer
2
+ from sklearn.metrics.pairwise import cosine_similarity
3
+ import numpy as np
4
+
5
+ # Cargar el modelo una sola vez
6
+ modelo_embeddings = SentenceTransformer("sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2")
7
+
8
+ # Embeddings simulados de autores literarios famosos (representación simplificada)
9
+ autores_perfiles = {
10
+ "Julio Cortázar": modelo_embeddings.encode("La estructura fragmentaria y los juegos de lenguaje son frecuentes."),
11
+ "Clarice Lispector": modelo_embeddings.encode("Explora la introspección, la emoción cruda y el lenguaje poético."),
12
+ "Roberto Bolaño": modelo_embeddings.encode("Narración fragmentaria, tensión persistente, humor implícito."),
13
+ "Gabriel García Márquez": modelo_embeddings.encode("Uso natural de lo mágico y una narrativa fluida y envolvente."),
14
+ "Juan Carlos Onetti": modelo_embeddings.encode("Tono sombrío, estilo existencial y descripciones minimalistas."),
15
+ }
16
+
17
+ def comparar_estilo_embeddings(texto_usuario):
18
+ if not texto_usuario.strip():
19
+ return "⚠️ El texto está vacío. Por favor, introduce contenido válido."
20
+ try:
21
+ emb_usuario = modelo_embeddings.encode(texto_usuario)
22
+ resultados = []
23
+ for autor, emb_autor in autores_perfiles.items():
24
+ similitud = cosine_similarity([emb_usuario], [emb_autor])[0][0]
25
+ resultados.append((autor, similitud))
26
+ resultados.sort(key=lambda x: x[1], reverse=True)
27
+ md = "## 🧬 Comparación con Estilos de Autores (Embeddings Reales)\n\n"
28
+ for autor, score in resultados:
29
+ md += f"- **{autor}** → similitud: `{score:.4f}`\n"
30
+ md += "\n> _Este análisis se basa en similitud semántica usando embeddings._\n"
31
+ return md
32
+ except Exception as e:
33
+ return f"❌ Error durante la comparación de estilo: {str(e)}"
editor_literario_estilo.py CHANGED
@@ -1 +1,25 @@
1
- # Archivo de ejemplo para editor literario AI
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # editor_literario_estilo.py
2
+
3
+ def evaluar_estilo(texto):
4
+ """
5
+ Función básica para evaluación de estilo literario.
6
+ Esta es una versión de prueba que devuelve un análisis simulado.
7
+ """
8
+ resumen_estilo = """
9
+ ## 🖋️ Análisis de Estilo Literario
10
+
11
+ **Longitud del texto:** {} caracteres.
12
+
13
+ **Estilo percibido:** Narrativo introspectivo con tendencia descriptiva.
14
+
15
+ **Nivel de detalle:** Moderado. Uso adecuado de recursos expresivos.
16
+
17
+ **Oraciones complejas:** Frecuente uso de subordinadas y estructuras largas, lo que puede sugerir un estilo literario elaborado.
18
+
19
+ **Comparación general:** El estilo evoca cierta cercanía a autores como Julio Cortázar y Clarice Lispector por su exploración subjetiva del pensamiento y el uso de un lenguaje cuidadosamente elegido.
20
+
21
+ > _Nota: Este análisis es genérico. Para un análisis profundo, integrar modelos de similitud de estilo literario basados en embeddings._
22
+
23
+ """.format(len(texto))
24
+
25
+ return resumen_estilo
editor_literario_maestro.py CHANGED
@@ -1 +1,31 @@
1
- # Archivo de ejemplo para editor literario AI
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from editor_literario_tono import analizar_tono
2
+ from editor_literario_estilo import evaluar_estilo
3
+ from editor_literario_autores import comparar_estilo_autores
4
+ from editor_literario_puntuacion import evaluar_puntuacion
5
+ import traceback
6
+
7
+ def analisis_completo(texto: str) -> str:
8
+ """
9
+ Realiza un análisis literario completo del texto ingresado,
10
+ combinando tono, puntuación, estilo y comparación con autores.
11
+ Devuelve el resultado en formato Markdown.
12
+ """
13
+ try:
14
+ tono = analizar_tono(texto)
15
+ puntuacion = evaluar_puntuacion(texto)
16
+ estilo = evaluar_estilo(texto)
17
+ autores = comparar_estilo_autores(texto)
18
+
19
+ markdown_resultado = (
20
+ f"## 🎨 Tono Literario\n"
21
+ f"- **Tono:** {tono['tono']}\n"
22
+ f"- **Polaridad:** {tono['polaridad']:.2f}\n"
23
+ f"- **Subjetividad:** {tono['subjetividad']:.2f}\n\n"
24
+ f"{puntuacion}\n"
25
+ f"{estilo}\n"
26
+ f"{autores}"
27
+ )
28
+ except Exception as e:
29
+ markdown_resultado = f"❌ Error al generar el análisis completo:\n```\n{traceback.format_exc()}\n```"
30
+
31
+ return markdown_resultado
editor_literario_puntuacion.py CHANGED
@@ -1 +1,27 @@
1
- # Archivo de ejemplo para editor literario AI
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # editor_literario_puntuacion.py
2
+
3
+ import re
4
+
5
+ def evaluar_puntuacion(texto):
6
+ """
7
+ Analiza el uso de puntuación en el texto de forma básica.
8
+ Retorna un resumen en formato Markdown.
9
+ """
10
+ total_puntos = texto.count(".")
11
+ total_comas = texto.count(",")
12
+ total_signos_interrogacion = texto.count("?") + texto.count("¿")
13
+ total_signos_exclamacion = texto.count("!") + texto.count("¡")
14
+ oraciones = re.split(r'[.!?]+', texto)
15
+ oraciones_largas = [o for o in oraciones if len(o.split()) > 20]
16
+
17
+ return f"""
18
+ ## ✒️ Análisis de Puntuación
19
+
20
+ - Total de puntos: **{total_puntos}**
21
+ - Total de comas: **{total_comas}**
22
+ - Signos de interrogación: **{total_signos_interrogacion}**
23
+ - Signos de exclamación: **{total_signos_exclamacion}**
24
+ - Oraciones largas (más de 20 palabras): **{len(oraciones_largas)}**
25
+
26
+ > Se recomienda revisar las oraciones largas para mejorar la legibilidad.
27
+ """
editor_literario_tono.py CHANGED
@@ -1 +1,24 @@
1
- # Archivo de ejemplo para editor literario AI
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ from textblob import TextBlob
3
+
4
+ def analizar_tono(texto):
5
+ if not texto.strip():
6
+ return "El texto está vacío."
7
+
8
+ blob = TextBlob(texto)
9
+ polaridad = blob.sentiment.polarity
10
+ subjetividad = blob.sentiment.subjectivity
11
+
12
+ tono = "Neutral"
13
+ if polaridad > 0.2:
14
+ tono = "Positivo"
15
+ elif polaridad < -0.2:
16
+ tono = "Negativo"
17
+
18
+ resultado = {
19
+ "tono": tono,
20
+ "polaridad": polaridad,
21
+ "subjetividad": subjetividad,
22
+ }
23
+
24
+ return resultado
requirements.txt CHANGED
@@ -1 +1,9 @@
1
- # Archivo de ejemplo para editor literario AI
 
 
 
 
 
 
 
 
 
1
+ gradio==5.35.0
2
+ sentence-transformers
3
+ torch
4
+ openai
5
+ nltk
6
+ scikit-learn
7
+ textblob
8
+ matplotlib
9
+ sentence-transformers>=2.2.2