source: modelado_topicos/topic_explorer/views.py @ 539bee2

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

Preprocesamiento con Freeling y otras opciones

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