# -*- coding: utf-8 -*-
"""
Sistema de Modelado de Tópicos
Copyleft (@) 2014 CENDITEL nodo Mérida - https://planificacion.cenditel.gob.ve/trac/
"""
## @package django_topic_explorer.utils
#
# Métodos para el trato de json
# @author Jorge Redondo (jredondo at cenditel.gob.ve)
# @author Centro Nacional de Desarrollo e Investigación en Tecnologías Libres
# (CENDITEL) nodo Mérida - Venezuela
# @copyright GNU Public License versión 2 (GPLv2)
# @version 1.3
from utils import colorlib
import itertools
label = lambda x: x
def populateJson(lda_v):
"""!
Función para cargar un json
@author Jorge Redondo (jredondo at cenditel.gob.ve)
@copyright GNU/GPLv2
@param lda_v {object} Recibe el objeto del lda
@return Retorna un json
"""
# populate entropy values
data = lda_v.topic_oscillations()
colors = [itertools.cycle(cs) for cs in zip(*colorlib.brew(3,n_cls=4))]
factor = len(data) / len(colors)
js = {}
for rank,topic_H in enumerate(data):
topic, H = topic_H
js[str(topic)] = {
"H" : H,
"color" : colors[min(rank / factor, len(colors)-1)].next()
}
# populate word values
data = lda_v.topics()
for i,topic in enumerate(data):
js[str(i)].update({'words' : dict([(w, p) for w,p in topic[:20]])})
return js
def doc_json(lda_v,doc_id,N=40):
"""!
Función para cargar los documentos y sus tópicos en un json
@author Jorge Redondo (jredondo at cenditel.gob.ve)
@copyright GNU/GPLv2
@param lda_v {object} Recibe el objeto del lda
@param doc_id {string} Recibe el id del documento
@param N {object} Recibe la cantidad
@return Retorna un json
"""
if doc_id!='null':
try:
if N > 0:
data = lda_v.dist_doc_doc(doc_id)[:N]
else:
data = lda_v.dist_doc_doc(doc_id)[N:]
data = reversed(data)
#data = docs_data(lda_v,doc_id,N)
docs = [doc for doc,prob in data]
doc_topics_mat = lda_v.doc_topics(docs)
js = []
for doc_prob, topics in zip(data, doc_topics_mat):
doc, prob = doc_prob
js.append({'doc' : doc, 'label': label(doc), 'prob' : 1-prob,
'topics' : dict([(str(t), p) for t,p in topics])})
return js
except:
import sys,traceback
exc_type, exc_value, exc_traceback = sys.exc_info()
print "*** print_tb:"
traceback.print_tb(exc_traceback, limit=1, file=sys.stdout)
print "*** print_exception:"
traceback.print_exception(exc_type, exc_value, exc_traceback, limit=2, file=sys.stdout)
return "error"