source: consulta_publica/visualization/views.py @ 7784803

baseconstituyenteestudiantesgeneralplan_patriasala
Last change on this file since 7784803 was 7310249, checked in by rudmanmrrod <rudman22@…>, 7 años ago

Solventadas consultas en generales en la consulta y procesamiento, agregados graficos de barra y torta para las respuestas simple/multiple/si-no de la consulta, Agregado modelos de estado, municipio y parroquia de Argenis

  • Propiedad mode establecida a 100644
File size: 10.9 KB
Línea 
1# -*- coding: utf-8 -*-
2"""
3Sistema de Consulta Pública
4
5Copyleft (@) 2017 CENDITEL nodo Mérida - https://planificacion.cenditel.gob.ve/trac/wiki/ModeladoTopicos_2017
6"""
7## @package visualization.views
8#
9# Vistas correspondientes a la aplicación procesamiento
10# @author Rodrigo Boet (rboet at cenditel.gob.ve)
11# @author <a href='http://www.cenditel.gob.ve'>Centro Nacional de Desarrollo e Investigación en Tecnologías Libres
12# (CENDITEL) nodo Mérida - Venezuela</a>
13# @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
14# @version 1.0
15import json
16from django.shortcuts import render
17from django.http import JsonResponse
18from django.views.generic import TemplateView
19from base.functions import dump_exception
20from consulta_publica.settings import PROCESAMIENTO_PATH, BASE_DIR
21from procesamiento.models import Procesamiento
22from utils.ldac2vsm import *
23from utils.json_data import *
24from vsm.viewer.ldagibbsviewer import LDAGibbsViewer as LDAViewer
25
26def topic_json(request,id,k,topic_no, N=40):
27    """!
28    Función para retornar la data de los tópicos en json
29
30    @author Jorge Redondo (jredondo at cenditel.gob.ve)
31    @copyright GNU/GPLv2
32    @param request <b>{object}</b> Objeto que mantiene la peticion
33    @param k <b>{int}</b> Recibe el número de tópicos a mostrar
34    @param topic_no <b>{string}</b> Recibe el número de tópicos
35    @param N <b>{int}</b> Recibe la cantidad
36    @return Retorna el render de la vista
37    """
38    k_param, lda_c, lda_m, lda_v = '','','',''
39    try:
40        if k != k_param:
41            k_param = k
42            lda_v = generate_topic(id,k_param,lda_c,lda_m,lda_v)
43        try:
44            N = int(request.query.n)
45        except:
46            pass
47
48        if N > 0:
49            data = lda_v.dist_top_doc([int(topic_no)])[:N]
50        else:
51            data = lda_v.dist_top_doc([int(topic_no)])[N:]
52            data = reversed(data)
53
54        docs = [doc for doc,prob in data]
55        doc_topics_mat = lda_v.doc_topics(docs)
56
57        js = []
58        for doc_prob, topics in zip(data, doc_topics_mat):
59            doc, prob = doc_prob
60            js.append({'doc' : doc, 'label': label(doc), 'prob' : 1-prob,
61                'topics' : dict([(str(t), p) for t,p in topics])})
62        return JsonResponse(js,safe=False)
63    except:
64        return dump_exception()
65   
66def visualize(request,id,k,filename=None,topic_no=None):
67    """!
68    Función para visualizar los tópicos
69
70    @author Jorge Redondo (jredondo at cenditel.gob.ve)
71    @copyright GNU/GPLv2
72    @param request <b>{object}</b> Objeto que mantiene la peticion
73    @param k <b>{int}</b> Recibe el número de tópicos a mostrar
74    @param filename <b>{string}</b> Recibe el nombre del  archivo
75    @param topic_no <b>{int}</b> Recibe el número de tópico
76    @return Retorna el render de la vista
77    """
78    k_param, lda_c, lda_m, lda_v = '','','',''
79    try:
80        if k != k_param:
81            k_param = k
82            lda_v = generate_topic(id,k_param,lda_c,lda_m,lda_v)
83        template_name = 'visualization.index.html'
84        return render(request,template_name,
85            {'k_param':k_param,
86             'topic_no':topic_no,
87             'filename':filename,
88             'id' : id,
89             'topics_range' : [10,20,30,40,50,60,70,80,90],
90            })
91    except:
92        return dump_exception()
93   
94   
95def topics(request,id,k):
96    """!
97    Función para servir los tópicos como un json
98
99    @author Jorge Redondo (jredondo at cenditel.gob.ve)
100    @copyright GNU/GPLv2
101    @param request <b>{object}</b> Objeto que mantiene la peticion
102    @param id <b>{int}</b> Id del procesamiento
103    @param k <b>{int}</b> Número de tópicos
104    @return Retorna el objeto json
105    """
106    lda_c,lda_m,lda_v = '','',''
107    lda_v = generate_topic(id,k,lda_c,lda_m,lda_v)
108    try:
109        js=populateJson(lda_v)
110        return JsonResponse(js,safe= False)
111    except:
112        return dump_exception()
113   
114   
115def doc_topics(request,id,k,doc_id, N=40):
116    """!
117    Función para retornar la data de los documentos en json
118
119    @author Jorge Redondo (jredondo at cenditel.gob.ve)
120    @copyright GNU/GPLv2
121    @param request <b>{object}</b> Objeto que mantiene la peticion
122    @param id <b>{int}</b> Id del procesamiento
123    @param doc_id <b>{string}</b> Recibe el número del documento
124    @param N <b>{int}</b> Recibe la cantidad
125    @return Retorna el render de la vista
126    """
127    lda_c,lda_m,lda_v = '','',''
128    try:
129        lda_v = generate_topic(id,k,lda_c,lda_m,lda_v)
130        try:
131            N = int(request.query.n)
132        except:
133            pass
134        js = doc_json(lda_v,doc_id,N)
135        return JsonResponse(js,safe=False)
136    except:
137        return dump_exception()
138   
139def generate_topic(id,k_param,lda_c,lda_m,lda_v):
140    """!
141    Función para generar los tópicos
142
143    @author Rodrigo Boet (rboet at cenditel.gob.ve)
144    @copyright GNU/GPLv2
145    @date 13-03-2017
146    @param id <b>{int}</b> Contiene el id del procesamiento
147    @param k_param <b>{int}</b> Contiene la cantidad de tópicos
148    @param lda_c <b>{object}</b> Objeto que perteneciente al lda
149    @param lda_m <b>{object}</b> Objeto que perteneciente al lda
150    @param lda_v <b>{object}</b> Objeto que perteneciente al lda
151    """
152    procesamiento = Procesamiento.objects.get(pk=id)
153    dir_consulta = "_".join(procesamiento.consulta.nombre_consulta.split(" "))
154    LDA_DATA_PATH = PROCESAMIENTO_PATH + '/' + dir_consulta+'/lda/'+dir_consulta+'{0}/'
155    LDA_CORPUS_FILE = PROCESAMIENTO_PATH + '/' + dir_consulta+'/lda/corpus.dat'
156    LDA_VOCAB_FILE = PROCESAMIENTO_PATH + '/' + dir_consulta+'/lda/vocab.txt'
157    LDA_CORPUS_DIR = PROCESAMIENTO_PATH + '/' + dir_consulta+'/pp/'
158    lda_c,lda_m = corpus_model(k_param,LDA_DATA_PATH.format(k_param),
159                       LDA_CORPUS_FILE,
160                       LDA_VOCAB_FILE,
161                       LDA_CORPUS_DIR)
162    lda_v = LDAViewer(lda_c, lda_m)
163    return lda_v
164
165
166class VerDocumento(TemplateView):
167    """!
168    Clase que permite la visualización de un archivo en particular
169    @author Rodrigo Boet (rboet at cenditel.gob.ve)
170    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
171    @date 30-03-2017
172    """
173   
174    template_name='visualization.docs.html'
175   
176   
177    def get(self, request, id, k, propuesta = None):
178        """!
179        Metodo que permite procesar las peticiones por get, con el fin de mostrar el documento
180   
181        @author Rodrigo Boet (rboet at cenditel.gob.ve)
182        @copyright GNU/GPLv2
183        @date 31-07-2015
184        @param self <b>{object}</b> Objeto que instancia el método
185        @param request <b>{object}</b> Objeto que mantiene la peticion
186        @param propuesta <b>{int}</b> Recibe el número de la propuesta
187        @return Retorna el render de la vista
188        """
189        lda_c,lda_m,lda_v = '','',''
190        lda_v = generate_topic(id,k,lda_c,lda_m,lda_v)
191        #Obtnener json
192        Topic_Json = populateJson(lda_v)
193        Topic_Json = json.dumps(Topic_Json)
194        topicos = json.loads(Topic_Json)
195        N = len(topicos)
196        Docs = doc_json(lda_v,propuesta,N)
197        Docs = json.dumps(Docs)
198        documentos = self.obtenerDocumento(json.loads(Docs),propuesta)
199        documentos = json.dumps(documentos)
200        mi_color = []
201        mi_color = self.obtenerValores(topicos)
202        mi_color = json.dumps(mi_color)
203        topicos = json.dumps(topicos)
204        ## Se carga el perfil
205        procesamiento = Procesamiento.objects.get(pk=id)
206        dir_consulta = "_".join(procesamiento.consulta.nombre_consulta.split(" "))
207        files = PROCESAMIENTO_PATH + '/' + dir_consulta+'/noaccent/'
208        #carga el pre-procesado del archivo en una variable
209        texto=''
210        direccion = files + '/'+ propuesta
211        try:
212            archivo = open(direccion,'r')
213            texto=archivo.read()
214            archivo.close()
215        except:
216            return dump_exception()
217            texto='No se encontro el documento'
218        return render(request,self.template_name,
219                      {'topicos':topicos,
220                       'propuesta':propuesta,
221                       'color':mi_color,
222                       'texto':texto,
223                       'documento':documentos})
224   
225    def obtenerValores(self,topicos):
226        """!
227        Metodo para obtener los colores del json
228   
229        @author Rodrigo Boet (rboet at cenditel.gob.ve)
230        @copyright GNU/GPLv2
231        @date 31-07-2015
232        @param self <b>{object}</b> Objeto que instancia el método
233        @param topicos <b>{dict}</b> Recibe un diccionario con los topicos
234        @return Retorna un diccionario con los colores
235        """
236        my_topic=[]
237        for x in topicos:
238            my_topic.append(topicos[x]['color'])
239        return my_topic
240   
241    def obtenerDocumento(self,docs,propuesta):
242        """!
243        Metodo para obtener un documento
244   
245        @author Rodrigo Boet (rboet at cenditel.gob.ve)
246        @copyright GNU/GPLv2
247        @date 03-02-2016
248        @param self <b>{object}</b> Objeto que instancia el método
249        @param docs <b>{dict}</b> Recibe un diccionario con los documentos
250        @param propuesta <b>{int}</b> Recibe el número de la propuesta
251        @return Retorna un diccionario con los colores
252        """
253        for x in docs:
254            if(x['doc']==propuesta):
255                return x
256           
257           
258class ListTopics(TemplateView):
259    """!
260    Clase que permite la visualización de un archivo en particular
261    @author Rodrigo Boet (rboet at cenditel.gob.ve)
262    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
263    @date 30-03-2017
264    """
265   
266    template_name='visualization.topics.list.html'
267   
268    def get_context_data(self,**kwargs):
269        """!
270        Metodo que permite cargar de nuevo valores en los datos de contexto de la vista
271   
272        @author Rodrigo Boet (rboet at cenditel.gob.ve)
273        @copyright GNU/GPLv2
274        @date 30-03-2017
275        @param self <b>{object}</b> Objeto que instancia la clase
276        @param kwargs <b>{object}</b> Objeto que contiene los datos de contexto
277        @return Retorna los datos de contexto
278        """
279        kwargs['topics_range'] = [10,20,30,40,50,60,70,80,90]
280        kwargs['id'] = self.kwargs['id']
281        return super(ListTopics, self).get_context_data(**kwargs)
282   
283def generate_topics(request,id,k):
284    """!
285    Metodo que genera una lista de los tópicos dado un párametro k
286
287    @author Rodrigo Boet (rboet at cenditel.gob.ve)
288    @copyright GNU/GPLv2
289    @date 30-03-2017
290    @param request <b>{object}</b> Recibe la peticion
291    @param id <b>{int}</b> Id del procesamiento
292    @param k <b>{int}</b> Número de tópicos
293    @return Retorna el json con las subunidades que consiguió
294    """
295    lda_c,lda_m,lda_v = '','',''
296    if(int(k) in [10,20,30,40,50,60,70,80,90]):
297        lda_v = generate_topic(id,k,lda_c,lda_m,lda_v)   
298        js = populateJson(lda_v)
299        return JsonResponse(js,safe=False)
300    return JsonResponse("El párametro k es inválido",safe=False)
Nota: Vea TracBrowser para ayuda de uso del navegador del repositorio.