def load_terms(request):
lexicon_ids = json.loads(request.POST['lids'])
try:
model = model_manager.get_model(request.session['model']).model
except LookupError as e:
return HttpResponseRedirect(URL_PREFIX + '/')
if model.wv.syn0norm is None:
model.init_sims()
words = [word for word in Word.objects.filter(lexicon__id__in = lexicon_ids) if word.wrd.encode('utf-8') in model.wv.vocab]
feature_vectors = [model.wv.syn0norm[model.wv.vocab[word.wrd.encode('utf-8')].index] for word in words]
output = {'terms':[],'concepts':[]}
if len(feature_vectors):
X = np.array(feature_vectors)
if request.POST['method'] == 'TSNE':
transformer = TSNE(n_components=2, random_state=0,metric='cosine',learning_rate=50)
elif request.POST['method'] == 'MDS':
transformer = MDS(n_components=2, max_iter=600,dissimilarity="precomputed", n_jobs=1)
X = pairwise_distances(X,metric='cosine',n_jobs=1)
else:
transformer = PCA(n_components=2)
transformed_feature_vectors = transformer.fit_transform(X).tolist()
terms = []
concepts = {}
for i in range(len(words)):
term = {'id':words[i].id,'term':words[i].wrd,'count':model.wv.vocab[words[i].wrd.encode('utf-8')].count,'x':transformed_feature_vectors[i][0] if len(feature_vectors) > 1 else 0,'y':transformed_feature_vectors[i][1] if len(feature_vectors) > 1 else 0}
term_concepts = TermConcept.objects.filter(term__term = words[i].wrd).filter(concept__author = request.user)
if term_concepts:
concept_id = term_concepts[0].concept.id
descriptive_term = term_concepts[0].concept.descriptive_term.term
descriptive_term_id = term_concepts[0].concept.descriptive_term.id
if concept_id not in concepts:
concepts[concept_id] = {'id':concept_id,'terms':[],'descriptive_term':descriptive_term,'descriptive_term_id':Word.objects.filter(wrd=descriptive_term)[0].id}
concepts[concept_id]['terms'].append(term)
else:
terms.append(term)
output['terms'].extend(terms)
output['concepts'].extend([concepts[concept_id] for concept_id in concepts])
logging.getLogger(INFO_LOGGER).info(json.dumps({'process':'CREATE CONCEPTS','event':'terms_loaded','args':{'user_name':request.user.username,'lexicon_ids':lexicon_ids,'dim_red_method':request.POST['method']}}))
else:
logging.getLogger(INFO_LOGGER).warning(json.dumps({'process':'CREATE CONCEPTS','event':'term_loading_failed','args':{'user_name':request.user.username,'lexicon_ids':lexicon_ids,'dim_red_method':request.POST['method']},'reason':'No terms to load.'}))
return HttpResponse(json.dumps(output), content_type='application/json')
评论列表
文章目录