source: modelado_topicos/topic_explorer/views.py @ 8ebf4a3

preprocesamientov1.0
Last change on this file since 8ebf4a3 was 431bd02, checked in by rboet <rboet@…>, 9 años ago

cambios al obtener el json, la ñ en los topicos y el orden de las palabras en el tooltip

  • Propiedad mode establecida a 100755
File size: 7.1 KB
Línea 
1from django.shortcuts import render
2
3from django.conf import settings
4
5from django.http import HttpResponse, HttpResponseRedirect, HttpResponseServerError, StreamingHttpResponse
6
7import json
8
9from utils import colorlib
10import itertools
11from vsm.corpus import Corpus
12from vsm.model.ldacgsmulti import LdaCgsMulti as LCM
13from vsm.viewer.ldagibbsviewer import LDAGibbsViewer as LDAViewer
14from vsm.viewer.wrappers import doc_label_name
15from django.core import serializers
16
17from django.views.generic import TemplateView
18from django.core.urlresolvers import reverse
19
20from StringIO import StringIO
21import csv
22
23from django_topic_explorer.settings import URL_COMUN
24from django.utils.safestring import mark_safe
25from django_topic_explorer.settings import FILES_PATH
26
27#path = settings.PATH
28corpus_file = settings.CORPUS_FILE
29context_type = settings.CONTEXT_TYPE
30model_pattern = settings.MODEL_PATTERN
31topics = settings.TOPICS
32corpus_name = settings.CORPUS_NAME
33icons = settings.ICONS
34
35corpus_link = settings.CORPUS_LINK
36topics_range = [int(item) for item in settings.TOPICS.split(',')]
37doc_title_format = settings.DOC_TITTLE_FORMAT
38doc_url_format = settings.DOC_URL_FORMAT
39
40#global lda_m, lda_v
41
42lda_c = Corpus.load(corpus_file)
43#lda_m = LCM.load(model_pattern.format(k))
44#lda_v = LDAViewer(lda_c, lda_m)
45label = lambda x: x
46
47def dump_exception():
48    import sys,traceback
49    exc_type, exc_value, exc_traceback = sys.exc_info()
50    print "*** print_tb:"
51    traceback.print_tb(exc_traceback, limit=1, file=sys.stdout)
52    print "*** print_exception:"
53    traceback.print_exception(exc_type, exc_value, exc_traceback, limit=2, file=sys.stdout)
54    return HttpResponseServerError(str(exc_value))
55
56
57def doc_topic_csv(request, doc_id):
58    data = lda_v.doc_topics(doc_id)
59
60    output=StringIO()
61    writer = csv.writer(output)
62    writer.writerow(['topic','prob'])
63    writer.writerows([(t, "%6f" % p) for t,p in data])
64
65    return HttpResponse(output.getvalue())
66
67def doc_csv(request, k_param,doc_id,threshold=0.2):
68    lda_m = LCM.load(model_pattern.format(k_param))
69    lda_v = LDAViewer(lda_c, lda_m)
70    data = lda_v.sim_doc_doc(doc_id)
71
72    output=StringIO()
73    writer = csv.writer(output)
74    writer.writerow(['doc','prob'])
75    writer.writerows([(d, "%6f" % p) for d,p in data if p > threshold])
76
77    return HttpResponse(output.getvalue())
78
79def topic_json(request,k_param,topic_no, N=40):
80    #global lda_v
81    lda_m = LCM.load(model_pattern.format(k_param))
82    lda_v = LDAViewer(lda_c, lda_m)
83    try:
84        N = int(request.query.n)
85    except:
86        pass
87
88    if N > 0:
89        data = lda_v.dist_top_doc([int(topic_no)])[:N]
90    else:
91        data = lda_v.dist_top_doc([int(topic_no)])[N:]
92        data = reversed(data)
93
94    docs = [doc for doc,prob in data]
95    doc_topics_mat = lda_v.doc_topics(docs)
96
97    js = []
98    for doc_prob, topics in zip(data, doc_topics_mat):
99        doc, prob = doc_prob
100        js.append({'doc' : doc, 'label': label(doc), 'prob' : 1-prob,
101            'topics' : dict([(str(t), p) for t,p in topics])})
102    return HttpResponse(json.dumps(js))
103
104def doc_topics(request,doc_id, N=40):
105    try:
106        try:
107            N = int(request.query.n)
108        except:
109            pass
110        if N > 0:
111            data = lda_v.dist_doc_doc(doc_id)[:N]
112        else:
113            data = lda_v.dist_doc_doc(doc_id)[N:]
114            data = reversed(data)
115
116        docs = [doc for doc,prob in data]
117        doc_topics_mat = lda_v.doc_topics(docs)
118
119        js = []
120        for doc_prob, topics in zip(data, doc_topics_mat):
121            doc, prob = doc_prob
122            js.append({'doc' : doc, 'label': label(doc), 'prob' : 1-prob,
123                'topics' : dict([(str(t), p) for t,p in topics])})
124        return HttpResponse(json.dumps(js))
125    except:
126        return dump_exception()
127
128def topics(request):
129    try:
130        js=populateJson()
131        return HttpResponse(json.dumps(js))
132    except:
133        return dump_exception()
134   
135def populateJson():
136    # populate entropy values
137    data = lda_v.topic_oscillations()
138
139    colors = [itertools.cycle(cs) for cs in zip(*colorlib.brew(3,n_cls=4))]
140    factor = len(data) / len(colors)
141
142    js = {}
143    for rank,topic_H in enumerate(data):
144        topic, H = topic_H
145        js[str(topic)] = {
146            "H" : H,
147            "color" : colors[min(rank / factor, len(colors)-1)].next()
148        }
149
150    # populate word values
151    data = lda_v.topics()
152    for i,topic in enumerate(data):
153        js[str(i)].update({'words' : dict([(w.decode('unicode-escape'), p) for w,p in topic[:20]])})
154    return js
155
156
157def docs(request):
158    try:
159        docs = lda_v.corpus.view_metadata(context_type)[doc_label_name(context_type)]
160        js = list()
161        for doc in docs:
162            js.append({
163                'id': doc,
164                'label' : label(doc)
165            })
166
167        return HttpResponse(json.dumps(js))
168    except:
169        return dump_exception()
170
171def index(request):
172    global lda_m,lda_v
173    lda_m = LCM.load(model_pattern.format(10))
174    lda_v = LDAViewer(lda_c, lda_m)
175    template_name = 'topic_explorer/index.html'
176    return render(request,template_name,
177        {'filename':None,
178         'corpus_name' : corpus_name,
179         'corpus_link' : corpus_link,
180         'context_type' : context_type,
181         'topics_range' : topics_range,
182         'doc_title_format' : doc_title_format,
183         'doc_url_format' : doc_url_format})
184
185def visualize(request,k_param,filename=None,topic_no=None):
186    global lda_m,lda_v
187    lda_m = LCM.load(model_pattern.format(k_param))
188    lda_v = LDAViewer(lda_c, lda_m)
189    template_name = 'topic_explorer/index.html'
190    return render(request,template_name,
191        {'filename':filename,
192         'k_param':k_param,
193         'topic_no':topic_no,
194         'corpus_name' : corpus_name,
195         'corpus_link' : corpus_link,
196         'context_type' : context_type,
197         'topics_range' : topics_range,
198         'doc_title_format' : doc_title_format,
199         'doc_url_format' : doc_url_format})
200
201class IrTopic(TemplateView):
202    template_name='topic_explorer/verTopico.html'
203    def post(self, request, *args, **kwargs):
204        propuesta = request.POST['nombre_propuesta']
205        #url = reverse('verTopicos')
206        #Obtnener json
207        Topic_Json = populateJson()
208        Topic_Json = json.dumps(Topic_Json)
209        topicos = json.loads(Topic_Json)
210        mi_color = []
211        mi_color = self.obtenerValores(topicos)
212        mi_color = json.dumps(mi_color)
213        topicos = json.dumps(topicos)
214        #print topicos
215        #carga el pre-procesado del archivo en una variable
216        texto=''
217        direccion = FILES_PATH + '/'+ propuesta
218        try:
219            archivo = open(direccion,'r')
220            texto=archivo.read()
221            archivo.close()
222        except:
223            text='No se encontro el documento'
224        return render(request,self.template_name,
225                      {'topicos':topicos,
226                       'propuesta':propuesta,
227                       'color':mi_color,
228                       'texto':texto})
229   
230    def obtenerValores(self,topicos):#funcion para obtener los colores del json
231        my_topic=[]
232        for x in topicos:
233            my_topic.append(topicos[x]['color'])
234        return my_topic
Nota: Vea TracBrowser para ayuda de uso del navegador del repositorio.