import anthropic import os import streamlit as st import logging from typing import Dict, Any logger = logging.getLogger(__name__) def generate_claude_recommendations(text: str, metrics: Dict[str, Any], text_type: str, lang_code: str): """ Genera recomendaciones personalizadas utilizando la API de Claude. Args: text: El texto original que se analizó metrics: Métricas calculadas por el sistema text_type: Tipo de texto (academic_article, student_essay, general_communication) lang_code: Código del idioma Returns: str: HTML formateado con recomendaciones personalizadas """ # Diccionario para traducción de tipos de texto text_type_names = { 'academic_article': 'artículo académico', 'student_essay': 'trabajo universitario', 'general_communication': 'comunicación general' } # Identificar las áreas más débiles (ordenadas de peor a mejor) areas = ['vocabulary', 'structure', 'cohesion', 'clarity'] scores = {area: metrics[area]['normalized_score'] for area in areas} weak_areas = sorted(areas, key=lambda x: scores[x]) # Crear un mensaje estructurado para Claude try: client = anthropic.Anthropic(api_key=os.environ.get("ANTHROPIC_API_KEY")) # Construir el prompt para Claude prompt = f""" Actúa como un asistente experto en escritura académica y comunicación. Analiza el siguiente texto (clasificado como {text_type_names.get(text_type, text_type)}) y genera recomendaciones personalizadas para mejorarlo. Las métricas de análisis del texto son: - Vocabulario: {scores['vocabulary']:.2f}/1.00 - Estructura: {scores['structure']:.2f}/1.00 - Cohesión: {scores['cohesion']:.2f}/1.00 - Claridad: {scores['clarity']:.2f}/1.00 Áreas que necesitan mayor atención (de mayor a menor prioridad): {', '.join([area for area in weak_areas[:2]])} Texto analizado: "{text[:1000]}..." (texto truncado para análisis) Por favor, proporciona: 1. Un breve resumen del análisis (2-3 oraciones) 2. 3-4 recomendaciones específicas para mejorar el texto, identificando problemas concretos 3. Sugerencias de qué herramientas de AIdeaText serían más útiles (Análisis Morfosintáctico, Análisis Semántico, o Análisis del Discurso) 4. Un ejemplo concreto de cómo mejorar una frase del texto Utiliza un tono profesional pero amigable, y estructura tus recomendaciones en HTML simple usando etiquetas
,
Hemos detectado que las áreas de {weak_areas[0]} y {weak_areas[1]} son las que más podrían beneficiarse de mejoras.
Para obtener recomendaciones más detalladas, utiliza el asistente virtual de Claude AI ubicado en la esquina superior izquierda (presiona la flecha junto al logo).
""" def display_personalized_recommendations(text, metrics, text_type, lang_code, t): """ Muestra recomendaciones personalizadas en una interfaz amigable. Args: text: El texto original que se analizó metrics: Métricas calculadas por el sistema text_type: Tipo de texto lang_code: Código del idioma t: Diccionario de traducciones """ st.markdown("### 📝 Recomendaciones Personalizadas") # Verificar si ya tenemos las recomendaciones en la sesión recommendations_key = f"claude_recommendations_{text_type}" # Generar nuevas recomendaciones si no existen o si se ha cambiado el tipo de texto if recommendations_key not in st.session_state: with st.spinner("Generando recomendaciones personalizadas..."): recommendations_html = generate_claude_recommendations( text=text, metrics=metrics, text_type=text_type, lang_code=lang_code ) st.session_state[recommendations_key] = recommendations_html # Mostrar las recomendaciones st.markdown( f"""