source: modelado_topicos/topic_explorer/views.py @ fb25bf8

preprocesamientov1.0
Last change on this file since fb25bf8 was fb25bf8, checked in by Jorge Redondo Flames <jredondo@…>, 9 años ago

CSS separated, and added type=button to UI buttons

  • Propiedad mode establecida a 100644
File size: 5.4 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
8import colorlib
9import itertools
10from vsm.corpus import Corpus
11from vsm.model.ldacgsmulti import LdaCgsMulti as LCM
12from vsm.viewer.ldagibbsviewer import LDAGibbsViewer as LDAViewer
13from vsm.viewer.wrappers import doc_label_name
14
15
16
17#path = settings.PATH
18corpus_file = settings.CORPUS_FILE
19context_type = settings.CONTEXT_TYPE
20model_pattern = settings.MODEL_PATTERN
21topics = settings.TOPICS
22corpus_name = settings.CORPUS_NAME
23icons = settings.ICONS
24
25corpus_link = settings.CORPUS_LINK
26topics_range = [int(item) for item in settings.TOPICS.split(',')]
27doc_title_format = settings.DOC_TITTLE_FORMAT
28doc_url_format = settings.DOC_URL_FORMAT
29
30#global lda_m, lda_v
31
32
33lda_c = Corpus.load(corpus_file)
34#lda_m = LCM.load(model_pattern.format(k))
35#lda_v = LDAViewer(lda_c, lda_m)
36label = lambda x: x
37
38def dump_exception():
39    import sys,traceback
40    exc_type, exc_value, exc_traceback = sys.exc_info()
41    print "*** print_tb:"
42    traceback.print_tb(exc_traceback, limit=1, file=sys.stdout)
43    print "*** print_exception:"
44    traceback.print_exception(exc_type, exc_value, exc_traceback, limit=2, file=sys.stdout)
45    return HttpResponseServerError(str(exc_value))
46
47
48def doc_topic_csv(request, doc_id):
49    data = lda_v.doc_topics(doc_id)
50
51    output=StringIO()
52    writer = csv.writer(output)
53    writer.writerow(['topic','prob'])
54    writer.writerows([(t, "%6f" % p) for t,p in data])
55
56    return HttpResponse(output.getvalue())
57
58def doc_csv(request, doc_id, threshold=0.2):
59    data = lda_v.sim_doc_doc(doc_id)
60
61    output=StringIO()
62    writer = csv.writer(output)
63    writer.writerow(['doc','prob'])
64    writer.writerows([(d, "%6f" % p) for d,p in data if p > threshold])
65
66    return HttpResponse(output.getvalue())
67
68def topic_json(request,k_param,topic_no, N=40):
69    global lda_v
70    lda_m = LCM.load(model_pattern.format(k_param))
71    lda_v = LDAViewer(lda_c, lda_m)
72    try:
73        N = int(request.query.n)
74    except:
75        pass
76
77    if N > 0:
78        data = lda_v.dist_top_doc([int(topic_no)])[:N]
79    else:
80        data = lda_v.dist_top_doc([int(topic_no)])[N:]
81        data = reversed(data)
82
83    docs = [doc for doc,prob in data]
84    doc_topics_mat = lda_v.doc_topics(docs)
85
86    js = []
87    for doc_prob, topics in zip(data, doc_topics_mat):
88        doc, prob = doc_prob
89        js.append({'doc' : doc, 'label': label(doc), 'prob' : 1-prob,
90            'topics' : dict([(str(t), p) for t,p in topics])})
91
92    return HttpResponse(json.dumps(js))
93
94def doc_topics(request,doc_id, N=40):
95    try:
96        try:
97            N = int(request.query.n)
98        except:
99            pass
100        if N > 0:
101            data = lda_v.dist_doc_doc(doc_id)[:N]
102        else:
103            data = lda_v.dist_doc_doc(doc_id)[N:]
104            data = reversed(data)
105
106        docs = [doc for doc,prob in data]
107        doc_topics_mat = lda_v.doc_topics(docs)
108
109        js = []
110        for doc_prob, topics in zip(data, doc_topics_mat):
111            doc, prob = doc_prob
112            js.append({'doc' : doc, 'label': label(doc), 'prob' : 1-prob,
113                'topics' : dict([(str(t), p) for t,p in topics])})
114
115        return HttpResponse(json.dumps(js))
116    except:
117        return dump_exception()
118
119def topics(request):
120    try:
121        # populate entropy values
122        data = lda_v.topic_oscillations()
123
124        colors = [itertools.cycle(cs) for cs in zip(*colorlib.brew(3,n_cls=4))]
125        factor = len(data) / len(colors)
126
127        js = {}
128        for rank,topic_H in enumerate(data):
129            topic, H = topic_H
130            js[str(topic)] = {
131                "H" : H,
132                "color" : colors[min(rank / factor, len(colors)-1)].next()
133            }
134
135        # populate word values
136        data = lda_v.topics()
137        for i,topic in enumerate(data):
138            js[str(i)].update({'words' : dict([(w, p) for w,p in topic[:10]])})
139
140        return HttpResponse(json.dumps(js))
141    except:
142        return dump_exception()
143
144def docs(request):
145    try:
146        docs = lda_v.corpus.view_metadata(context_type)[doc_label_name(context_type)]
147        js = list()
148        for doc in docs:
149            js.append({
150                'id': doc,
151                'label' : label(doc)
152            })
153
154        return HttpResponse(json.dumps(js))
155    except:
156        return dump_exception()
157
158def index(request):
159    global lda_m,lda_v
160    lda_m = LCM.load(model_pattern.format(10))
161    lda_v = LDAViewer(lda_c, lda_m)
162    template = 'index.html'
163    return render(request,template,
164        {'filename':None,
165         'corpus_name' : corpus_name,
166         'corpus_link' : corpus_link,
167         'context_type' : context_type,
168         'topics_range' : topics_range,
169         'doc_title_format' : doc_title_format,
170         'doc_url_format' : doc_url_format})
171
172def visualize(request,k_param,filename=None,topic_no=None):
173    global lda_m,lda_v
174    lda_m = LCM.load(model_pattern.format(k_param))
175    lda_v = LDAViewer(lda_c, lda_m)
176    template = 'index.html'
177    return render(request,template,
178        {'filename':filename,
179         'k_param':k_param,
180         'topic_no':topic_no,
181         'corpus_name' : corpus_name,
182         'corpus_link' : corpus_link,
183         'context_type' : context_type,
184         'topics_range' : topics_range,
185         'doc_title_format' : doc_title_format,
186         'doc_url_format' : doc_url_format})
187
188
Nota: Vea TracBrowser para ayuda de uso del navegador del repositorio.