AIdeaText commited on
Commit
5778534
1 Parent(s): 25afdce

Create discourse_mongo_db.py

Browse files
modules/database/discourse_mongo_db.py ADDED
@@ -0,0 +1,110 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #/modules/database/discourse_mongo_db.py
2
+
3
+ #/modules/database/discoruse_mongo_db.py
4
+ from .mongo_db import insert_document, find_documents, update_document, delete_document
5
+ from datetime import datetime, timezone
6
+ import logging
7
+
8
+ logger = logging.getLogger(__name__)
9
+ COLLECTION_NAME = 'student_discourse_analysis'
10
+
11
+ def store_student_semantic_result(username, text, analysis_result):
12
+ """
13
+ Guarda el resultado del análisis de discurso en MongoDB.
14
+ Args:
15
+ username: Nombre del usuario
16
+ text: Texto analizado
17
+ analysis_result: Resultado del análisis que incluye:
18
+ - key_concepts: Lista de conceptos clave y sus frecuencias
19
+ - concept_graph: Gráfico de relaciones conceptuales en bytes
20
+ - entities: Diccionario de entidades identificadas
21
+ - entity_graph: Gráfico de relaciones entre entidades en bytes
22
+ """
23
+ try:
24
+ analysis_document = {
25
+ 'username': username,
26
+ 'timestamp': datetime.now(timezone.utc).isoformat(),
27
+ 'text': text,
28
+ 'analysis_type': 'semantic',
29
+ 'key_concepts': analysis_result['key_concepts'],
30
+ 'concept_graph': analysis_result['concept_graph'],
31
+ 'entities': analysis_result['entities'],
32
+ 'entity_graph': analysis_result['entity_graph']
33
+ }
34
+
35
+ result = insert_document(COLLECTION_NAME, analysis_document)
36
+
37
+ if result:
38
+ logger.info(f"Análisis semántico guardado con ID: {result} para el usuario: {username}")
39
+ return True
40
+ return False
41
+
42
+ except Exception as e:
43
+ logger.error(f"Error al guardar el análisis semántico: {str(e)}")
44
+ return False
45
+
46
+ def get_student_semantic_analysis(username, limit=10):
47
+ """
48
+ Recupera los análisis semánticos de un estudiante.
49
+ Args:
50
+ username: Nombre del usuario
51
+ limit: Número máximo de análisis a retornar
52
+ Returns:
53
+ list: Lista de análisis semánticos
54
+ """
55
+ query = {"username": username, "analysis_type": "semantic"}
56
+ return find_documents(COLLECTION_NAME, query, sort=[("timestamp", -1)], limit=limit)
57
+
58
+ def update_student_semantic_analysis(analysis_id, update_data):
59
+ """
60
+ Actualiza un análisis semántico existente.
61
+ Args:
62
+ analysis_id: ID del análisis a actualizar
63
+ update_data: Datos a actualizar
64
+ """
65
+ query = {"_id": analysis_id}
66
+ update = {"$set": update_data}
67
+ return update_document(COLLECTION_NAME, query, update)
68
+
69
+ def delete_student_semantic_analysis(analysis_id):
70
+ """
71
+ Elimina un análisis semántico.
72
+ Args:
73
+ analysis_id: ID del análisis a eliminar
74
+ """
75
+ query = {"_id": analysis_id}
76
+ return delete_document(COLLECTION_NAME, query)
77
+
78
+ def get_student_semantic_data(username):
79
+ """
80
+ Obtiene todos los análisis semánticos de un estudiante.
81
+ Args:
82
+ username: Nombre del usuario
83
+ Returns:
84
+ dict: Diccionario con todos los análisis del estudiante
85
+ """
86
+ analyses = get_student_semantic_analysis(username, limit=None)
87
+
88
+ formatted_analyses = []
89
+ for analysis in analyses:
90
+ formatted_analysis = {
91
+ 'timestamp': analysis['timestamp'],
92
+ 'text': analysis['text'],
93
+ 'key_concepts': analysis['key_concepts'],
94
+ 'entities': analysis['entities']
95
+ # No incluimos los gráficos en el resumen general
96
+ }
97
+ formatted_analyses.append(formatted_analysis)
98
+
99
+ return {
100
+ 'entries': formatted_analyses
101
+ }
102
+
103
+ # Exportar las funciones necesarias
104
+ __all__ = [
105
+ 'store_student_semantic_result',
106
+ 'get_student_semantic_analysis',
107
+ 'update_student_semantic_analysis',
108
+ 'delete_student_semantic_analysis',
109
+ 'get_student_semantic_data'
110
+ ]